semaine 1 - serveur web
Le serveur rend son premier service
La semaine passée, votre serveur était une maison vide et blindée. Cette semaine, on y ouvre un commerce : un vrai site web servi par Apache, PHP et MySQL.
- Installer le serveur web Apache et le module PHP.
- Installer la base de données MySQL et son panneau phpMyAdmin.
- Explorer les modules d'Apache et de PHP.
les nouvelles commandes
apt : l'installateur de paquets
prenom@serveur:~$ sudo apt-get update
prenom@serveur:~$ sudo apt-cache search ufw
prenom@serveur:~$ sudo apt-cache search ufw | grep ufw
prenom@serveur:~$ sudo apt-get install ufw
prenom@serveur:~$ sudo apt-get remove ufw
Avec adduser, usermod et deluser (semaine 0), voilà votre trousse de base d'administrateur.
installation - etape 1
Installer Apache
prenom@serveur:~$ sudo apt update
prenom@serveur:~$ sudo apt install apache2
Si la page « Apache2 Default Page » s'affiche : votre serveur web est vivant !
Rien ne s'affiche ? Le firewall bloque peut-être : voir la diapositive suivante.
installation - etape 2
Ouvrir le firewall pour Apache
prenom@serveur:~$ sudo ufw app list
prenom@serveur:~$ sudo ufw app info "Apache Full"
prenom@serveur:~$ sudo ufw allow in "Apache Full"
Le profil Apache Full ouvre les ports 80 (HTTP) et 443 (HTTPS) d'un seul geste.
installation - etape 3
Installer le module PHP
prenom@serveur:~$ sudo apt install php libapache2-mod-php
prenom@serveur:~$ sudo a2enmod php8.3
Le 8.3 doit correspondre à VOTRE version de PHP. Pour la connaître : php -v
prenom@serveur:~$ php -v | grep --only-matching --perl-regexp "(PHP )\d+\.\d+" | cut -c 5-7
installation - etape 4
/var/www : la maison des sites
prenom@serveur:~$ cd /var/www
prenom@serveur:/var/www$ ls -l
prenom@serveur:/var/www$ sudo chown prenom:www-data -R html
prenom@serveur:/var/www$ cd html
prenom@serveur:/var/www/html$ mv index.html ubuntu.html
Votre usager devient propriétaire, le groupe www-data (Apache) garde l'accès : chacun son rôle.
base de donnees - etape 1
Installer MySQL
prenom@serveur:~$ sudo apt install mysql-server
prenom@serveur:~$ sudo mysql -u root
mysql> ALTER USER 'root'@'localhost'
-> IDENTIFIED WITH mysql_native_password
-> BY 'unmotdepassecomplique';
mysql> flush privileges;
mysql> exit;
On donne d'abord un vrai mot de passe à root, ensuite seulement on lance la sécurisation.
base de donnees - etape 2
mysql_secure_installation : le champ de mines
prenom@serveur:~$ sudo mysql_secure_installation
Réponses critiques
- VALIDATE_PASSWORD_COMPONENT ? N (IRRÉCUPÉRABLE si on se trompe ici !)
- Change the password for root ? N
Le reste : oui au ménage
- Remove anonymous users ? Y
- Disallow root login remotely ? Y
- Remove test database ? Y
- Reload privileges table ? Y
base de donnees - etape 3
Créer un superadmin
Root ne peut plus se connecter à distance : on lui donne un remplaçant.
prenom@serveur:~$ sudo mysql -u root -p
mysql> CREATE USER 'superadmin'@'localhost'
-> IDENTIFIED WITH mysql_native_password BY 'motdepassefort';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'superadmin'@'localhost';
mysql> GRANT GRANT OPTION ON *.* TO 'superadmin'@'localhost';
mysql> flush privileges;
php et les donnees
Brancher PHP sur MySQL
prenom@serveur:~$ sudo apt install php-mysql
prenom@serveur:~$ cd /etc/php/8.3/apache2
prenom@serveur:...$ sudo jed php.ini
extension=mysqli
extension=pdo_mysql
prenom@serveur:~$ sudo systemctl restart apache2 && sudo systemctl restart mysql
Serveur de dev seulement Dans php.ini : display_errors = On, log_errors = On, opcache.enable = 0 pour voir ses erreurs.
phpmyadmin
phpMyAdmin : le panneau des données
prenom@serveur:~$ sudo apt install phpmyadmin
- Tab pour naviguer, Espace pour sélectionner, Enter pour accepter.
- Cocher apache2 dans la liste (l'étoile doit apparaître !).
- Configure with dbconfig-common ? Yes
- Password of the database's administrative user : le mot de passe de root.
- MySQL application password for phpmyadmin : laisser VIDE (important !).
modules apache
Explorer les modules d'Apache
prenom@serveur:~$ cd /etc/apache2/
prenom@serveur:/etc/apache2$ ls mods-available
prenom@serveur:/etc/apache2$ ls -l mods-enabled
prenom@serveur:~$ sudo a2enmod info
prenom@serveur:~$ sudo systemctl restart apache2
prenom@serveur:~$ sudo a2dismod info
a2enmod active, a2dismod désactive : Apache se configure par liens symboliques.
modules php
Explorer les modules de PHP
prenom@serveur:~$ php -m | more
prenom@serveur:~$ sudo phpdismod curl
prenom@serveur:~$ ls /etc/php/8.3/apache2/conf.d/*curl*
prenom@serveur:~$ sudo phpenmod curl
prenom@serveur:~$ sudo systemctl restart apache2
phpenmod / phpdismod : les cousins PHP de a2enmod / a2dismod.
reecriture des url
mod_rewrite : réécrire ses URL
prenom@serveur:~$ sudo a2enmod rewrite
prenom@serveur:~$ sudo systemctl restart apache2
<Directory /var/www/html>
AllowOverride FileInfo
</Directory>
RewriteEngine On
Ne pas oublier d'ajuster les liens du site : balises <a> et actions des <form>.
resume
La pile LAMP est montée !
L comme Linux
Votre VPS sécurisé de la semaine 0.
A comme Apache
Le serveur web qui répond sur le port 80.
M comme MySQL
La base de données, avec phpMyAdmin en façade.
P comme PHP
Le langage qui relie tout ce beau monde.
Direction le laboratoire de la semaine 1 pour monter votre pile à vous !