Testé sous DEBIAN Stable et Linux Mint LMDE. Fonctionnel sous Mint base ubuntu
Un how to pour installer rapidement un serveur nginx avec une base de données (MariaDB), php pluri-version et Wordpress. Cette documentation expliquera aussi comment faire du multi-sites avec nginx et l'installation de Wordpress.
Attention, les configurations proposées le sont dans le cas d’un serveur de développement, pas de production. A noter que l’aspect sécurité ne sera ici pas abordé, la finalité de ce guide est de disposer d’un environnement de travail fonctionnel pour ceux qui veulent travailler le développement web dynamique.
A savoir, dans la configuration de nginx (/etc/nginx/), il y a deux dossiers importants : sites-available et sites-enabled.
sites-available: Ce dossier contient les fichiers de configurations de vos sites. Ce dossier est un dépôt ; les fichiers de configuration qui y sont ne sont pas pris en compte.
sites-enabled: Dossier de liens symboliques vers les fichiers de site-available que vous souhaitez activer.
Pour éditer les fichiers de configuration, il est utilisé ici le paquet micro car ses raccourcis clavier sont plus instinctifs que ceux de nano, vi, vim… Pour l'installer :
Code : Tout sélectionner
sudo apt install micro
Installer les paquets suivants
Code : Tout sélectionner
sudo apt install nginx php-cli php-fpm php-mysql php-json php-opcache php-mbstring php-xml php-gd php-curl mariadb-server
Code : Tout sélectionner
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
Sécuriser la base données MariaDB
Code : Tout sélectionner
sudo mysql_secure_installation
Code : Tout sélectionner
Enter current password for root (enter for none):
--> saisie du mot de passe root
Switch to unix_socket authentication [Y/n]
--> n
Change the root password? [Y/n]
--> n
Remove anonymous users? [Y/n]
--> y
Disallow root login remotely? [Y/n]
--> y
Remove test database and access to it? [Y/n]
--> y
Reload privilege tables now? [Y/n]
--> y
Code : Tout sélectionner
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Configurer nginx : créer son premier bloc de serveur
Nginx n'utilise pas des répertoires virtuels (Virtual Hosts, terme d'Apache) mais des “server blocks”, ici traduit en blocs de serveur, qui utilisent les directives server_name et listen pour se lier aux sockets tcp (2).
Créer votre premier répertoire de publication web
Code : Tout sélectionner
sudo mkdir -p /var/www/html/site1
Si vous voulez que votre utilisateur puisse écrire dans ce répertoire, il devra faire partie du groupe www-data et les fichiers et dossiers devront appartenir également à ce groupe
Code : Tout sélectionner
sudo chown -R www-data:www-data /var/www/html/site1/
sudo chmod -R 775 /var/www/html/site1/
Code : Tout sélectionner
sudo adduser <utilisateur> www-data
Se déconnecter et se relogguer pour que la modification soit prise en compte Après reconnexion, on vérifie que l'utilisateur est bien dans le groupe www-data
Code : Tout sélectionner
groups
ragnarok cdrom floppy audio dip www-data video plugdev netdev bluetooth lpadmin scanner
Code : Tout sélectionner
sudo micro /etc/nginx/sites-available/site1.conf
Code : Tout sélectionner
server {
listen 80;
root /var/www/html/site1;
index index.php index.html index.htm;
server_name site1.local;
error_log /var/log/nginx/site1.local_error.log;
access_log /var/log/nginx/site1.local_access.log;
client_max_body_size 100M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Code : Tout sélectionner
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
Code : Tout sélectionner
ls /var/run/php/
php7.4-fpm.pid php7.4-fpm.sock php-fpm.sock
Code : Tout sélectionner
sudo rm /etc/nginx/sites-enabled/default /etc/nginx/sites-available/default
Code : Tout sélectionner
sudo ln -s /etc/nginx/sites-available/site1.conf /etc/nginx/sites-enabled/
Code : Tout sélectionner
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Code : Tout sélectionner
sudo service nginx reload
Exemple de syntaxe : index.php
Code : Tout sélectionner
<?php
echo "<h1>Site 1</h1>";
phpinfo();
?>
Le fichier /etc/hosts
Si vous voulez accéder à votre site, via son entrée server_name de votre bloc de serveur, alors insérer la ligne suivante dans votre fichier /etc/hosts
Code : Tout sélectionner
127.0.0.1 site1.local
Ce qui donne un fichier de ce style
Code : Tout sélectionner
127.0.0.1 localhost
127.0.1.1 debian11Vbox
127.0.0.1 site1.local
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Nginx et plusieurs blocs de serveur
1. Copier votre répertoire de publication web
Code : Tout sélectionner
sudo cp -R /var/www/html/site1 /var/www/html/site2
Code : Tout sélectionner
sudo chown -R www-data:www-data /var/www/html/site2
sudo chmod -R 775 /var/www/html/site2/
Code : Tout sélectionner
<?php
echo "<h1>Site 2</h1>";
phpinfo();
?>
Code : Tout sélectionner
sudo cp /etc/nginx/sites-available/site1.conf /etc/nginx/sites-available/site2.conf
Code : Tout sélectionner
sudo micro /etc/nginx/sites-available/site2.conf
Code : Tout sélectionner
server {
listen 80;
root /var/www/html/site2;
index index.php index.html index.htm;
server_name site2.local;
error_log /var/log/nginx/site2.local_error.log;
access_log /var/log/nginx/site2.local_access.log;
client_max_body_size 100M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
[codesudo ]ln -s /etc/nginx/sites-available/site2.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo service nginx reload[/code]
5. Adpater le fichier /etc/hosts Ajouter la ligne : /etc/hosts
Code : Tout sélectionner
127.0.0.1 site2.local
Installer Wordpress
MariaDB étant installé, il faut configurer la base de données pour Wordpress.
Se connecter au serveur de la base de données, créer une base de données et un utilisateur Wordpress et ajuster les privilèges
Code : Tout sélectionner
sudo mysql -u root -p
Code : Tout sélectionner
CREATE DATABASE BDDWPress;
GRANT ALL ON BDDWPress.* TO 'wp-admin'@'localhost' IDENTIFIED BY 'wp-mot-de-passe-1';
quit
Code : Tout sélectionner
cd /var/www/html/
Code : Tout sélectionner
wget https://wordpress.org/latest.tar.gz
sudo tar xzfv latest.tar.gz
sudo rm latest.tar.gz
Code : Tout sélectionner
sudo cd wordpress
sudo mv wp-config-sample.php wp-config.php
Code : Tout sélectionner
sudo micro wp-config.php
Modifier ce fichier en précisant le nom de la base de données, le nom de l'administrateur wordpress précédemment créé et son mot de passe : wp-config.php
Code : Tout sélectionner
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'BDDWPress' );
/** MySQL database username */
define( 'DB_USER', 'wp-admin' );
/** MySQL database password */
define( 'DB_PASSWORD', 'wp-mot-de-passe-1' );
Code : Tout sélectionner
sudo chown -R www-data:www-data /var/www/html/wordpress
sudo chmod -R 755 /var/www/html/wordpress
Il ne reste pas qu'à créer le fichier du bloc de serveur de nginx. En voici un exemple :
Code : Tout sélectionner
sudo micro /etc/nginx/sites-available/blog.conf
Code : Tout sélectionner
server {
listen 80;
root /var/www/html/wordpress;
index index.php index.html index.htm;
server_name blog.local ;
error_log /var/log/nginx/blog.local_error.log;
access_log /var/log/nginx/blog.local_access.log;
client_max_body_size 100M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Code : Tout sélectionner
sudo nginx -t
sudo ln -s /etc/nginx/sites-available/blog.conf /etc/nginx/sites-enabled/
sudo service nginx reload
Code : Tout sélectionner
sudo micro /etc/hosts
Code : Tout sélectionner
127.0.0.1 blog.local
Faire tourner plusieurs versions de PHP
Installer les paquets suivants
Code : Tout sélectionner
sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2
Code : Tout sélectionner
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
Code : Tout sélectionner
cat /etc/apt/sources.list.d/sury-php.list
deb https://packages.sury.org/php/ bullseye main
Code : Tout sélectionner
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
Code : Tout sélectionner
sudo apt update
Code : Tout sélectionner
apt search php
Code : Tout sélectionner
apt search php8 | grep fpm
Code : Tout sélectionner
sudo apt install php8.0-{mysql,cli,common,imap,ldap,xml,fpm,curl,mbstring,zip}
Code : Tout sélectionner
ls /run/php/
php7.4-fpm.pid php7.4-fpm.sock php8.1-fpm.pid php8.1-fpm.sock php-fpm.sock
Code : Tout sélectionner
sudo micro /etc/nginx/sites-available/site2.conf
Code : Tout sélectionner
micro /etc/nginx/sites-available/site2.conf
Code : Tout sélectionner
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
Code : Tout sélectionner
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
Vérifier la syntaxe de nginx et recharger sa configuration
Code : Tout sélectionner
sudo nginx -t
service nginx reload
Dès lors vous avez donc
site1 –> interprète du php 7.4
site2 –> interprète du php 8.1
Conclusions
Voilà donc un premier aperçu de la prise en main de nginx afin d’un serveur web dynamique, pluri-sites et gérant différentes versions de php.
(2) Nginx Server Blocks : https://www.nginx.com/resources/wiki/st ... er_blocks/