apt update
apt upgrade -y
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
mariadb-secure-installation
Lors de l'exécution de mysql_secure_installation répondez comme suit :
mysqladmin -uroot create wordpressdb
mariadb -uroot -e"GRANT ALL ON wordpressdb.* TO admin@localhost IDENTIFIED BY 'P@ssw0rd'"
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
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
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;
}
systemctl reload nginx
Vous pouvez à présent vous connecter à votre navigateur web :
http://IP-SERVEUR
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;
}
systemctl reload nginx