Installation Wordpress sur Nginx en http et https (certificat autosigné)

Mettre le système à jour :

apt update
apt upgrade -y

Installer le serveur web Nginx et le serveur SQL MariaDB, avec PHP

apt install nginx mariadb-server mariadb-client php-fpm php-mysql php-zip php-curl php-xml wget -y

systemctl start nginx
systemctl enable nginx
systemctl start mysqld
systemctl enable mysql

Initialiser MariaDB :

mariadb-secure-installation

Lors de l'exécution de mysql_secure_installation répondez comme suit :


Création de la base de données et de l'utilisateur

mysqladmin -uroot create wordpressdb
mariadb -uroot -e"GRANT ALL ON wordpressdb.* TO admin@localhost IDENTIFIED BY 'P@ssw0rd'"

Téléchargement et installation de Wordpress.

Nous allons utiliser le vhost par défaut de Nginx, dont le root est "/var/www/html"

rm /var/www/html/index.nginx-debian.html
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar -xvzf latest.tar.gz
rm latest.tar.gz
cp -r wordpress/* /var/www/html/
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
chown -R www-data:www-data /var/www/html
cd /var/www/html

Indiquer à Wordpress comment se connecter sa base SQL :

cp wp-config-sample.php wp-config.php
sed -i 's/database_name_here/wordpressdb/' wp-config.php
sed -i 's/username_here/admin/' wp-config.php
sed -i 's/password_here/P@ssw0rd/' wp-config.php

Configuration du vhost par défaut de Nginx

Renommer le fichier de configuration par défaut et en créer un nouveau :

mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.BAK
nano /etc/nginx/sites-available/default

Contenu du fichier /etc/nginx/sites-available/default :

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # Pas besoin de spécifier un server_name si on se contente de l'IP ou du nom local.
    # server_name votre_domaine_ou_IP;

    # Dossier racine du site
    root /var/www/html;
    index index.php index.html index.htm;

    # Bloc principal : si le fichier demandé n'existe pas, on réécrit vers index.php
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # Traitement des fichiers PHP via PHP-FPM
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
        # Vérifiez la version de PHP et le chemin du socket si nécessaire.
    }

    # Sécurité basique : interdiction d'accès aux fichiers .sql
    location ~* \.sql$ {
        deny all;
    }

    error_log /var/log/nginx/wordpress_error.log;
    access_log /var/log/nginx/wordpress_access.log;
}

Recharger Nginx :

systemctl reload nginx

Vous pouvez à présent vous connecter à votre navigateur web :

http://IP-SERVEUR


Pour passer votre site de http à https :

apt install openssl
mkdir /etc/nginx/ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/wordpress.key \
-out /etc/nginx/ssl/wordpress.crt

Renseignez les champs qui apparaissent ou laissez les vide dans notre cas de figure. Lorsque vous adressez une requête à une autorité de certification, tout doit être rempli. En guise de "Common Name", vous pouvez spécifier le nom de domaine (pour un vrai site web) ou simplement l'adresse IP de votre serveur web (notre cas ici).

chmod 600 /etc/nginx/ssl/wordpress.key

Nous allons reprendre la configuration effectuée plus haut en y ajoutant le certificat SSL et la clef privée, et en changeant le port d'écoute (80 -> 443). Ouvrez /etc/nginx/sites-available/default

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    # Pas besoin de spécifier un server_name si on se contente de l'IP ou du nom local.
    # server_name votre_domaine_ou_IP;

    # Dossier racine de Wordpress
    root /var/www/html;
    index index.php index.html index.htm;

    ssl_certificate /etc/nginx/ssl/wordpress.crt;
    ssl_certificate_key /etc/nginx/ssl/wordpress.key;

    # Bloc principal : si le fichier demandé n'existe pas, on réécrit vers index.php
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # Traitement des fichiers PHP via PHP-FPM
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
        # Vérifiez la version de PHP et le chemin du socket si nécessaire.
    }

    # Sécurité basique : interdiction d'accès aux fichiers .sql
    location ~* \.sql$ {
        deny all;
    }

    error_log /var/log/nginx/wordpress_error.log;
    access_log /var/log/nginx/wordpress_access.log;
}

Recharger Nginx :

systemctl reload nginx

⬆️ Retour en haut de la page