Dans la suite de mon article sur le déploiement d’un serveur LEMP sur Debian 8, j’ai été amené à installer WordPress sur ce dernier.
Le HTTPS étant désormais un passage incontournable lors de la mise en production d’un site Web, nous verrons également comment paramétrer NGinx et WordPress pour jouer avec HTTPS.
Pré requis
– Un serveur LEMP fonctionnel (installation)
– Eventuellement un nom de domaine pour utiliser les certificats Let’s Encrypt
Création de la base de donnée MariaDB
Pour fonctionner, WordPress nécessite une base de données, que nous allons créer sur notre SGBD MariaDB. L’avantage de MariaDB est qu’il fonctionne avec l’ensemble des commandes MySQL.
Nous allons commencer par ouvrir une console root :
1 |
mysql -u root -p |
Puis créer notre base de données (remplacer wordpress par le nom de la base) :
1 |
CREATE DATABASE wordpress; |
Nous allons désormais créer un utilisateur SQL qui n’aura accès qu’à cette base de données. Ainsi, si notre site est compromis, on évitera d’impacter les autres bases de données. (Remplacez dbuser et passwd par le nom d’utilisateur et son mot de passe) :
1 2 3 4 |
CREATE USER dbuser@localhost IDENTIFIED BY 'passwd'; GRANT ALL PRIVILEGES ON wordpress.* TO dbuser@localhost; FLUSH PRIVILEGES; exit |
Téléchargement et configuration de WordPress
Nous avons besoin de quelques dépendances de PHP supplémentaires pour faire fonctionner WordPress.
1 |
apt-get install php7.0-gd libssh2-php |
Puis nous allons télécharger et décompresser les sources de WordPress :
1 2 3 4 |
cd /tmp wget http://wordpress.org/latest.tar.gz tar xf latest.tar.gz cp -R wordpress /var/www |
Désormais nous allons connecter WordPress à notre base de données. Pour cela nous allons copier le fichier wp-config-sample.php en wp-config.php et l’éditer pour lui indiquer nos identifiants de connexion à la base de données au niveau des variables suivantes :
1 2 |
cp /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php nano /var/www/wordpress/wp-config.php |
1 2 3 4 5 6 7 8 9 10 |
... /** The name of the database for WordPress */ define('DB_NAME', 'wordpress'); /** MySQL database username */ define('DB_USER', 'dbuser'); /** MySQL database password */ define('DB_PASSWORD', 'passwd'); ... |
Dans le précédent article nous avons configuré NGinx pour s’exécuter en tant que www-data. Nous allons donc le rendre propriétaire des fichiers de WordPress :
1 |
chown -R www-data:www-data /var/www/wordpress |
Configuration d’NGinx et HTTPS
Grâce à Let’s Encrypt qui délivre désormais des certificats gratuitement, il n’y a plus aucunes raisons de laisser ses sites en web en HTTP.
Si votre site web est accessible via un nom de domaine, il est possible de récupérer vos certificats Let’s Encrypt très facilement en suivant cette procédure.
Si ce n’est pas le cas, nous allons créer des certificats auto signés pour notre site :
1 2 3 4 5 6 |
mkdir /etc/nginx/ssl cd /etc/nginx/ssl/ openssl genrsa -out domain.key 4096 openssl req -new -key domain.key -out domain.csr openssl x509 -req -days 365 -in domain.csr -signkey domain.key -out domain.crt openssl dhparam -out /etc/nginx/ssl/dh4096.pem 4096 |
Cela peut prendre du temps, soyez patients.
Il ne nous reste plus qu’à éditer notre vhost et le configurer de telle manière (vous pouvez vous appuyer sur ce site pour générer votre server-bloc) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
server { listen 80; server_name domain.tld; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name domain.tld; root /var/www/wordpress; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location /wp-config.php { deny all; } location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|eot|otf|woff|woff2|ttf|ogg)$ { expires 10d; } #### HTTPS #### ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem; ssl_session_timeout 5m; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_dhparam /etc/nginx/ssl/dh4096.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:"; ssl_prefer_server_ciphers on; ssl_ecdh_curve secp384r1; ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/chain.pem; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; add_header Stict-Transport-Security "max-age=31536000"; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; } |
1 |
systemctl restart nginx |
Installation de WordPress
Il ne nous reste plus qu’à finaliser l’installation de WordPress.
On ouvre l’URL de notre serveur https://domain/ et on arrive alors sur la page de configuration de notre site.
Il nous reste alors à sélectionner la langue de WordPress et à inscrire notre premier utilisateur: l’administrateur.
Pour terminer nous allons sécuriser nos fichiers d’installation en modifiant les droits qui leur sont attribués :
1 2 3 4 |
chmod -R 755 /var/www/wordpress chmod 640 /var/www/wordpress/index.html chmod 640 /var/www/wordpress/wp-blog-header.php chmod 400 /var/www/wordpress/wp-config.php |
Nous avons désormais une installation de WordPress fonctionnelle sur un serveur LEMP, avec le support du HTTPS.
Vous n’avez donc plus d’excuses pour vous lancer vous aussi dans la rédaction de votre blog !
N’hésitez pas à partager vos questions dans les commentaires.