← Semaine 1
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.
les nouvelles commandes

apt : l'installateur de paquets

# Mettre a jour la liste des paquets prenom@serveur:~$ sudo apt-get update # Chercher un paquet prenom@serveur:~$ sudo apt-cache search ufw prenom@serveur:~$ sudo apt-cache search ufw | grep ufw # Installer ou desinstaller 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 # Tester dans le navigateur : # http://ip.du.serveur
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

# Si sudo ufw status affiche 'active' : 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
# Version en une ligne : 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 # Prendre possession du repertoire html prenom@serveur:/var/www$ sudo chown prenom:www-data -R html prenom@serveur:/var/www$ cd html # Garder la page par defaut sous un autre nom 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 # Enlever le ; devant ces lignes : 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
# Tester : # http://ip.du.serveur/phpmyadmin
modules apache

Explorer les modules d'Apache

prenom@serveur:~$ cd /etc/apache2/ prenom@serveur:/etc/apache2$ ls mods-available # disponibles prenom@serveur:/etc/apache2$ ls -l mods-enabled # actives # Exercice : activer le module d'information prenom@serveur:~$ sudo a2enmod info prenom@serveur:~$ sudo systemctl restart apache2 # Voir http://ton.adresse.ip/server-info puis... 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 # modules charges # Exercice : desactiver puis reactiver curl prenom@serveur:~$ sudo phpdismod curl prenom@serveur:~$ ls /etc/php/8.3/apache2/conf.d/*curl* # ls: cannot access... le module a disparu ! 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

# 1. Activer le module prenom@serveur:~$ sudo a2enmod rewrite prenom@serveur:~$ sudo systemctl restart apache2 # 2. Permettre les .htaccess (dans la config du site) <Directory /var/www/html> AllowOverride FileInfo </Directory> # 3. Regles dans le .htaccess du site RewriteEngine On # Ecrire ses regles de reecriture ici

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 !