Ceci est une ancienne révision du document !
Installer serveur Web complet : Linux / Nginx / MariaDB / PHP (+ phpmyadmin)
Cas où on veut installer un serveur web complet à partir de Debian, avec PHP (plusieurs versions possibles), MySQL (mariaDB) et Phpmyadmin pour une administration simplifiée
Cette installation pourrait se faire dans un conteneur de Proxmox par exemple et héberger un ou des sites web comme Booked.
Doc : https://linuxhint.com/install_phpmyadmin_debian_10 (mais ici apache)
Conseils de RomainR : Installer Debian + Nginx + PHP-FPM pour pouvoir personnaliser plusieurs version de PHP
Cas de http://web.cemea.lan
1. Installation Debian 10
Installer Debian 10 à partir d'un template fourni.
- Créer un CT, template Debain-10-standard avec un compte root, 1Go de Ram, 512 Mo de swap, 10 Go de disque, firewall désactivé.
- Se connecter en mode console en root via Proxmox (xterm.js), editer le fichier /etc/ssh/sshd_config et changer le mode d'autorisation de connexion de root :
PermitRootLogin Yes
Quitter l'édition du fichier sshd_config et relancer le service ssh
systemctl restart sshd.service
- Identifier son IP (ip a) et se connecter en SSH dessus depuis un client externe. La connexion avec root devrait fonctionner.
ssh root@ip_CT
Mettre à jour le CT
apt-get update && apt-get dist-upgrade
2. Installer MysqL (mariadb)
Installation du paquet mariadb et vérification du service :
apt install mariadb-server mariadb-client systemctl status mariadb
doit renvoyer “enabled” (lancé au démarrage) et “active (running)”
Sécuration MysqL avec :
mysql_secure_installation
Par défaut le mot de passe root de mysql est vide, donc
Enter current password for root (enter for none): Enter
Puis définir le mot de passe “root” de Mysql (y) et entrer le mot de passe.
- On supprime le compte anonyme par défaut
Remove anonymous user (Y/n) : y
- On désactive les connexions distantes et donc on restreint les connexions root aux connexions locales
Disallow root login remotely (Y/n) : y
- Suppression de la base “test” :
Remove Test database an access (Y/n) : y
- Prise en compte immédiate des changements (Y/n) : y
Et c'est tout bon.
On peut tester l'accès à mysql avec
mysql -u root -p
+ mot de passe
Et on arrive sur la console mysql>
quit;
ou \q
pour quitter MySQL.
3. Installer Serveur Web (nginx) avec PHP
Install du serveur Web
apt install nginx
Le serveur doit déjà être fonctionnel sur http://ip_CT (“Welcome to nginx” , page présente dans /var/www/html/ )
Installation de PHP (ici PHP7.3 par défaut)
apt install php php-fpm php-mysql
Le service doit être actif :
systemctl status php7.3-fpm
Service Loaded : “enabled” et “active (running)”
On peut aussi rajouter des modules complémentaires utiles comme : php-gd, php-json, php-zip (à compléter…).
4. Définitions des Virtualhost
Création d'un virtualhost (pour héberger un site-espace web) (un fichier “default” existe pour modèle).
nano /etc/nginx/sites-available/monsite
On définir le port d'écoute, les fichiers lus, son nom, son emplacement (root) et le socket associé (.sock)
server { listen 80; root /var/www/dossiersite; index index.php index.html index.htm; server_name monsite.cemea.lan; # entree DNS du site location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.3-fpm.sock; } }
On active le virtualhost avec un lien symbolique vers sites-enabled
ln -s /etc/nginx/sites-available/monsite /etc/nginx/sites-enabled/monsite
Et on redémarre nginx par sécurité (on ne redémarre qu'en cas de plantage ou changement de version, sinon on reloade simplement)
systemctl restart nginx.service
On teste avec :
echo "<?php phpinfo(); ?>"> /var/www/dossiersite/info.php
On peut effacer le virtualhostpar défaut (ou le conserver)
rm /etc/nginx/sites-enabled/default
Et relancer nginx
systemctl restart nginx
Et on vérifie sur : https://ip_CT/info.php
on devrait voir un tableau d'infos sur la version de PHP et les modules activés.
5. Installation de Phpmyadmin
https://www.itzgeek.com/how-tos/linux/debian/how-to-install-phpmyadmin-with-nginx-on-debian-10.html
https://kifarunix.com/install-phpmyadmin-with-nginx-on-debian-10-buster/
https://www.digitalocean.com/community/tutorials/how-to-install-phpmyadmin-from-source-debian-10
- Installer les pré-requis :
apt install php-{mbstring,zip,gd,xml,pear,gettext,cgi}
On adapte le PHP-FPM
nano /etc/php/7.3/fpm/php.ini
et on modifie le cgi.fix_pathinfo ( A quoi ça sert ?)
cgi.fix_pathinfo=0
Puis on redémarre le service
systemctl restart php7.3-fpm.service
- Téléchargement de la dernière version depuis le site officiel : https://www.phpmyadmin.net/downloads/ et extraction dans /var/www/phpmyadmin
cd /root/ && wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.zip unzip phpMyAdmin-5.0.2-all-languages.zip # installer unzip si besoin mv phpMyAdmin-5.0.2-all-languages /var/www/phpmyadmin
- Copie du fichier de config par défaut
cp -pr /var/www/phpmyadmin/config.sample.inc.php /var/www/phpmyadmin/config.inc.php
Edition du fichier et modification du secret pour génération de cookies : nano /var/www/phpmyadmin/config.inc.php
$cfg['blowfish_secret'] = 'longuechaineagenererauhasard'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
Création des tables initiales :
mysql </var/www/phpmyadmin/sql/create_tables.sql -u root -p
+ Mot de passe SQL de root
Super-admin de Phpmyadmin
Le compte root n'étant plus autorisé à se connecter à phpmyadmin, il vaut mieux créer un autre compte “admin”
On se connecte ensuite sur mysql et on attribue tous les privilèges à un utilisateur “admin” :
mysql -u root -p
+ Mot de passe SQL de root
Pour créer un utilisateur avec son mot de passe (à personnaliser) et tous les privilèges sur toutes les bases :
TODO : changer le mot de passe d'accès 'motdepasse' !!!
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'motdepasse'; FLUSH PRIVILEGES;
pour la prise en compte immédiate des changements.
Virtualhost pour Phpmyadmin
On crée un virtualhost pour phpmyadmin
nano /etc/nginx/sites-available/phpmyadmin
et on complète son contenu (en utilisant la valeur du sock pour PHP-FPM trouvé dans /etc/php/7.3/fpm/pool.d/www.conf
qui est la pool par défaut). On peut choisir le port (ici 8080) pour garder un vhost spécifique.
server { listen 8080; server_name pma.cemea.lan; root /var/www/phpmyadmin; location / { index index.php; } ## Images and static content is treated different location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ { access_log off; expires 30d; } location ~ /\.ht { deny all; } location ~ /(libraries|setup/frames|setup/libs) { deny all; return 404; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/run/php/php7.3-fpm.sock; # fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/phpmyadmin$fastcgi_script_name; } }
Puis on active ce virtualhost :
ln -s /etc/nginx/sites-available/phpmyadmin /etc/nginx/sites-enable/
On crée un dossier temporaire avec les droits associés (!!! Bizarre comme méthode ???)
mkdir /var/www/phpmyadmin/tmp chmod 660 /var/www/phpmyadmin/tmp
On autorise www:data (utilisateur de nginx) à accéder au dossier :
chown -R www-data:www-data /var/www/phpmyadmin
Et on redémarre les services :
systemctl restart php7.3-fpm systemctl restart nginx
et on se connecte sur phpmyadmin sur http://IP_CT:8080
Et on peut se connecter à phpmyadmin avec l'utilisateur pma et le mot de passe choisi.
Cas de plusieurs virtualhosts
Cas de plusieurs versions de PHP
- Utiliser les dépot Sury de PHP à ajouter
https://packages.sury.org/php/
- Connecter les versions de PHP à différents sockets
- Personnaliser les virtualhosts à partir de ces sockets.
Cas des certificats Let's Encrypt pour SSL
Des certifcats autosignés suffiraient. Voir Let's encrypt (AC) et le client ACME Certbot
Installation du client certbort pour générer des certificats :
apt-get install certbot python-certbot-nginx