Dans ce tutoriel, nous allons voir comment installer et configurer un serveur sous Ubuntu avec les composants suivants :
- Nginx
- PHP
- MariaDB
Je vais aussi vous expliquer comment mettre phpmyadmin pour administrer le serveur MariaDB et comment configurer des vhosts.
Dans ce tuto, nous n’allons pas utiliser les dépôts officiels de la distribution, mais les dépôts des différents composants afin d’installer les dernières versions.
Prérequis
Avoir un serveur Ubuntu fraichement installer et à jour avec un accès en root ou sudo et un accès à Internet.
Installation des différents composants
Dans cette partie, nous allons installer les différents composants du serveur Web et vérifier leur bon fonctionnement
Installer Nginx
Avant de faire l’installer, nous allons ajouter le dépôt office Nginx.
Entrer la commande suivante pour créer un fichier list où l’on va renseigner les url.
sudo nano /etc/apt/sources.list.d/nginx.list
Dans l’éditeur nano, entrer les lignes ci-dessous qui sont la configuration du depot :
deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ bionic nginx deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx
Appuyer sur les touches du clavier Crtl+X
et enregistrer les modifications.
Il faut adapter les sources du dépôt à la version d’Ubuntu, dans le tutoriel je suis sur la version 18.04.X , j’utilise donc bionic.
Ajouter les signatures du depot à l’aide des commandes ci-après :
wget http://nginx.org/keys/nginx_signing.key sudo apt-key add nginx_signing.key
Actualiser les paquets avec la commande :
sudo apt update
Sur la capture ci-dessous, on peut voir que le dépôt nginx a été interrogé :
Installer nginx avec la commande suivante :
sudo apt install nginx -y
L’option
-y
permet de ne pas avoir de demande de confirmation pour l’installation
Nginx est maintenant installé, nous allons maintenant faire quelques vérifications, configuration et voir quelques commandes avant de passer à l’installation de PHP.
Vérifier la configuration de nginx :
sudo nginx -t
Cette commande est très utile, notamment quand on fait un changement de configuration, elle permet de vérifier que celui-ci est bonne avant de la recharger.
Démarrer le service nginx :
sudo systemctl start nginx
Si tout se passe bien la commande retourne rien
Configurer le démarrage automatique du service :
sudo systemctl enable nginx
Vérifier le service nginx :
systemctl status nginx
Cette commande permet de vérifier l’état du service et depuis quand celui-ci est en fonctionnement.
Afficher la version de nginx
nginx -v
Configurer l’utilisateur nginx
Cette étape de la configuration est importante, surtout si vous souhaitez utiliser php (php-fpm) sur le serveur web.
Lors de l’installation de nginx par le dépôt officiel, le service est configuré pour être exécuté avec l’utilisateur nginx et php l’utilisateur www-data. Il est nécessaire de modifier la configuration nginx pour utiliser le même utilisateur que php.
Éditer le fichier /etc/nginx/nginx.conf
:
sudo nano /etc/nginx/nginx.conf
Rechercher :
user nginx;
Remplacer par :
user www-data;
Sauvegarder le fichier de config.
Recharger la configuration :
sudo systemctl reload nginx
Tester le serveur Nginx
Depuis un ordinateur, ouvrir un navigateur Internet et entrer l’adresse IP ou le nom de la machine et vérifier que la page Welcome to nginx ! s’affiche.
Installer PHP
Maintenant que le serveur Web est en place, nous allons passer à l’installation de PHP, comme pour nginx, nous allons ajouter le dépôt ppa:ondrej/php
qui permet d’avoir les dernières versions de PHP et d’avoir plusieurs versions simultanément.
Dans ce tutoriel, nous allons installer la version 7.3 et 7.4 de PHP et nous verrons comment par la suite configurer un vhost pour utiliser une version précise de PHP.
Ajouter le dépôt
Entrer les commandes suivantes :
sudo apt install software-properties-common
-ysudo add-apt-repository ppa:ondrej/php
Une confirmation est nécessaire lors de l’exécution de la commande :
sudo add-apt-repository ppa:ondrej/php
Actualiser les paquets à l’aide de la commande :
sudo apt update
Afficher les versions de PHP disponible
Entrer la commande apt install php7
. et faire une tabulation.
On peut voir l’ensemble des paquets PHP disponibles sur le dépôt.
Installer une version de PHP
Pour une installation sur nginx, il ne faut surtout pas entrer la commande sudo apt install php7.X
car cette commande va installer des dépendances dont apache2.
Pour utiliser PHP avec NGINX, il faut installer PHP en mode FPM.
Pour installer PHP entrer la commande suivante (adapter en fonction de la version souhaitée) :
sudo apt install php7.x-fpm php7.x-mysql php7.x-opcache -y
Une fois l’installation terminée entrer la commande ci-après pour tester le bon fonctionnement :
php -v
PHP en mode FPM, fonctionne comme un service, il est possible de vérifier son état à l’aide de la commande ci-dessous en adaptant la version de php installée :
systemctl status php7.x-fpm
Pour installer une autre version de PHP simultanément, il suffit de répéter l ‘opération en changement la commande avec la version souhaitée.
Configurer NGINX et PHP
Maintenant nous allons configurer nginx pour utiliser PHP et tester le bon fonctionnement.
Éditer le fichier vhost par défaut :
sudo nano /etc/nginx/conf.d/default.conf
Ajouter avant } final les lignes suivantes en adaptant à la version de PHP de disponible :
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_index index.php;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Vérifier la config à l’aide de la commande : sudo nginx -t
Recharger la config : sudo systemctl reload nginx
Pour tester le fonctionnement de php, on va créer un fichier phpinfo.php :
sudo nano /usr/share/nginx/html/phpinfo.php
Entrer le code PHP ci-dessous :
<?php phpinfo(); ?>
Enregistrer le fichier.
Depuis un navigateur Internet, appeler la page http://ip_server/phpinfo.php
Si la page phpinfo.php c’est tout est bon.
Installer MariaDB
Notre serveur Web est presque complet, il reste maintenant l’installation de MariaDB pour avoir une base de données.
Ajouter le dépot
Une fois de plus, il faut ajouter le dépôt afin d’avoir la dernière version. Aller sur l’url suivante : Download MariaDB Server – MariaDB.org et sélectionner la distribution et la version de MariaDB afin d’avoir l’url des sources.
Entrer les commandes ci-après pour ajouter le dépôt :
sudo apt-get install software-properties-common sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc' sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://ftp.igh.cnrs.fr/pub/mariadb/repo/10.5/ubuntu bionic main'
Mettre à jour la liste des paquets avec la commande :
sudo apt update
Installation MariaDB
Comme pour PHP entrer la commande apt install mariadb
– + tabulation pour afficher les paquets disponibles.
Pour l’exemple, nous allons installer la version 10.5, entrer la commande ci-dessous pour effectuer l’installation :
sudo apt install mariadb-server-10.5 -y
Une fois l’installation terminée, entrer la commande ci-après pour vérifier le bon fonctionnement du serveur MariaDB :
sudo systemctl status mariadb
Création d’un compte d’administration
Par défaut, le compte root n’a pas de mot de passe et n’est accessible que par la console, pour éviter de modifier ce compte, on va créer un compte d’administration que l’on pourra utiliser avec d’autre outil comme phpmyadmin.
Entrer la commande suivante pour passer en mode mysql
sudo mysql
Entrer les lignes (requêtes) ci-après pour créer un compte adminsql, changer le mot de passe avant de passer les commandes.
CREATE USER 'adminsql'@'%' IDENTIFIED BY 'azerty'; GRANT ALL PRIVILEGES ON *.* TO 'adminsql'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; exit;
Installer PHPMYADMIN
Cette étape est facultative, l’installation phpmyadmin permet d’administrer MariaDB.
Afin de ma facilité le travail, j’ai utilisé WinSCP pour le transfert sur le serveur en SSH.
Télécharger la dernière version de phpmyadmin.
Décompresser l’archive.
Sur le serveur Web créer un dossier pma à l’emplacement du vhost par défaut : /usr/share/nginx/html
Envoyer le contenu de l’archive dans le dossier pma :
Depuis un navigateur aller à l’adresse : http://ip_server/pma/index.php
Entrer les informations du compte créé précédemment (adminsql / le mot de passe) et cliquer sur Exécuter pour vous connectez.
Vous pouvez administrer le serveur MariaDB avec une interface Web.
Configurer des vhosts
Maintenant que le serveur Web est prêt, nous allons voir comment configurer des vhost également appelé virtual host qui permet d’héberger plusieurs sites sur un même serveur.
Pour le tutoriel, je vais créer deux vhost (site-a.lab.priv et site-b.lab.priv) qui vont tous les deux utiliser une version de php différente, le site-a sera sous php7.3 et le site-b sera avec php7.4
Au préalable j’ai créé les deux enregistrements DNS et il pointe sur le serveur
Avant de commencer, il faut créer les différents dossiers, dans le dossier /home je vais créer un dossier www-data et ensuite dans ce dossier je vais créer les sous dossiers des sites, site-a et site-b qui auront chacun deux sous-dossiers log et public_html.
sudo mkdir /home/www-data sudo mkdir /home/www-data/site-a sudo mkdir /home/www-data/site-a/log sudo mkdir /home/www-data/site-a/public_html sudo mkdir /home/www-data/site-b sudo mkdir /home/www-data/site-b/log sudo mkdir /home/www-data/site-b/public_html sudo chown www-data /home/www-data -R
Maintenant que les dossiers sont prêts, nous allons passer au fichiers de configuration. Afin d’avoir un fonctionnement similaire à Apache, nous allons créer deux dossiers dans le dossier /etc/nginx.
- sites-available : qui va contenir les fichiers de config des virtual host
- sites-enabled : qui va contenir des liens symboliques vers les fichiers de configuration des virtual host qui seront actif.
Créer les dossiers avec les commandes suivantes :
sudo mkdir /etc/nginx/sites-available sudo mkdir /etc/nginx/sites-enabled
Il faut maintenant modifier le fichier de configuration nginx pour lui indiquer de charger les fichiers de configuration qui seront dans le dossier site-enabled.
sudo nano /etc/nginx/nginx.conf
Rechercher :
include /etc/nginx/conf.d/*.conf;
Ajouter après :
include /etc/nginx/sites-enabled/*;
Sauvegarde le fichier de configuration.
Tester la config nginx :
sudo nginx -t
Recharger la configuration :
sudo systemctl reload nginx
On passe à la configuration du virtual host pour le site-a, on va utiliser le fichier par défaut comme base, on va copier le fichier default.conf dans le dossier site-available en le renommant site-a.conf
sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/sites-available/site-a.conf
Il faut maintenant modifier le fichier pour le faire correspondre à la configuration du site.
nano /etc/nginx/sites-available/site-a.conf
Ci-après le fichier de config :
server { listen 80; server_name site-a.lab.priv; #charset koi8-r; access_log /home/www-data/site-a/log/access.log main; location / { root /home/www-data/site-a/public_html; index index.php index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} location ~ \.php$ { root /home/www-data/site-a/public_html; #try_files $uri =404; fastcgi_index index.php; fastcgi_pass unix:/run/php/php7.3-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Lignes modifiées :
Ligne 3 (server_name) : indiquer l’url
Ligne 6 : emplacement des logs
Ligne 9 : répertoire racine du site
Ligne 10 : ajout de index.php
Ligne 46 : répertoire racine du site
Il faut maintenant activer le site avec lien symbolique :
sudo ln -s /etc/nginx/sites-available/site-a.conf /etc/nginx/sites-enabled/
Tester la config nginx
sudo nginx -t
Recharger la config
sudo systemctl reload nginx
Pour tester le bon fonctionnement j’ai ajouté un fichier index.php dans le dossier public_html du site avec le code suivant :
<?php echo "site a"; phpinfo(); ?>
Depuis un navigateur entrer l’url du site :
Pour le site-b, j’ai reproduit la même configuration en modifiant le server_name, les emplacements et la configuration de php pour utiliser php7.4.
le fichier de config :
server { listen 80; server_name site-b.lab.priv; #charset koi8-r; access_log /home/www-data/site-b/log/access.log main; location / { root /home/www-data/site-b/public_html; index index.php index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} location ~ \.php$ { root /home/www-data/site-b/public_html; #try_files $uri =404; fastcgi_index index.php; fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Voici le résultat :
Automatiser le déploiement avec Ansible
Vous souhaitez gagner du temps et automatiser le déploiement de votre serveur Web (Nginx, PHP, Mariadb) avec Ansible.
Un playbook reprenant l’installation des différents service est disponible ici :
Conclusion
Le tutoriel s’arrête ici, vous savez maintenant comment installer et configurer un serveur Web avec Nginx / PHP / MariaDB avec Ubuntu en utilisant des versions de PHP différentes et des virtuals hosts.
D’autre tutoriel vont arriver comme l’installation de WordPress et GLPI sur un serveur Web NGINX.