A. Installation d’un serveur rocky
‘image d’installation de rocky’
B Installation d’un service WEB (nginx)
1. Installation des paquets
Nous aurons besoins sur la machine des packages suivants :
- Nginx
- Php-fpm
- Mariadb-server
- Php
- Php-mysqlnd
dnf install nginx php-fpm mariadb-server php php-mysqlnd -y
‘image du resultat de la commande’
tips :
- Le fichier de configuration se trouve dans : /etc/nginx/
- On retrouvera les logs dans le répertoire : /var/log/nginx/error.log
- Par défaut, les fichiers pour le site web sont dans le répertoire : /usr/share/nginx/html
- Si cela ne marche, regarde si le service http estautorisé : firewall-cmd –listservice
2. Ouverture du port http sur notre serveur web
pour ouvrir les port http de notre serveur web on utilise les commqnde suivante :
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
‘image résultat de la commande’
3. Démarrage du service nginx et accès a l’interface web
pour démarrer nginx au démarrage de la vm on utilise la commande suivante :
systemctl enable nginx
pour démarrer le service nginx on utiliserq cette commande :
systemctl start nginx
Pour vérifier le status du service nginx on utilisera alors cette commande :
systemctl status nginx
‘resultat des 3 commande’
On peut voir la page http par défaut (index.html) :
‘Image page par defauts nginx’
C. Installation et configuration moteur BDD
1. Démarrage de mariadb et démarrage automatique
pour démarrer mariadb et le démarrer automatiquement au démarrage on utilise cette commande :
systemctl enable --now mariadb.service
‘image du resultat de la commande’
2. configuration du moteur de base
on va maitenant faire la configuration d’installation de mariadb :
myslq_secure_installation
‘image de la config de mariadb’
3. configurqtion de notre bqse de données
On se retrouve ensuite dqns notre BDD, on peut ici créer une BDD :
tips :
les commande sont des commande SQL donc on oublie pas le point virgule a la fin de chaque commande.
Les mots clé telle que ‘select’ ou encore ‘create’ en language SQL ne sont pas sensible a la casse. Ce qui veut dire que peut importe si ma commande soit ecrite comme ça ‘CREATE DATABASE SRV_WEB;’ ou comme ça ‘create database SRV_WEB;’ cela fonctionnera.
Mais attention les nom de base de données, colonnes et tables sont eux sensible a la casse !
create database SRV_WEB;
On créé l’utilisateur :
create user 'riwan_adm'@'localhost' identified by 'jXf/#4U8';
On donne tout les droit a cette utilisateur :
grant all privileges on bdd.* to 'riwan_adm@'localhost';
On recharge les privilèges sans redémarrer mariadb en utilisant cette commande :
flush privileges;
On vérifie que la BDD est bien existante :
show databases;
‘image des resultat des commande’
D. Déploiment du site ecommerce.fr
1. Création du répertoire du site web
tips : Le parametre -p de la commande mkdir permet de créer toute l’arborescence de répertoires. Si les dossier parents n’existe pas, ils seronts créer automatiquement.
exemple :
mkdir -p /home/mere/fille
Si le répertoire home et le répertoire mere n’existe pas lors de la creation alors home et mere seront créer.
pour créer un répertoire on utilise la commande ‘mkdir’
mkdir -p /var/WWW/ecommerce.fr
‘resultat de la commande’
2. déplacement du site vers la vm (serveur web)
Pour cela, nous utiliserons WinSCP et nous nous connecterons au serveur web
‘image de la connexion a WinSCP’
une fois connecté on retrouve notre site web sur le PC
‘image de WinSCP avant le déplacement du fichier’
un simple drag and drop de la partie gauche vers la droite est c’est fait.
on déplace le fichier via le ssh directement a la racine de la session
‘image de WinSCP après le déplacement du fichier’
maintenant que le serveur web est dans notre vm on va pouvoir la déplacer de la racine de la session vers notre répertoire ecommerce.fr
on utilisera donc cette commande :
tips : Le paramètre -r permet de deplacé recursivement le repertoire et sont contenu.
En d’autres termes la commande cp ne permet que de déplacer des fichier simple. avec -r on peut copier l’entièreté du répertoire.
cp -r /home/root/PricingSubscription/ /var/www/ecommerce.fr/
‘resultat de la commande’
3. Modification du fichier de configuration du site
Il faut maintenant modifier le fichier de configuration !
pour modifier de fichier on utilisera cette commande :
nano /etc/php-fpm.d/www.conf
tips : Nano n’est pas installer nativement sur les machine Rocky pour l’installer il suffira d’utiliser ette commande :
dnf install -y nano
on modifiera ainsi c’est deux lignes :
RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
RPM: Keep a group allowed to write in log dir.
user = nginx
On peut maintenant activer le démarrage automatique du service nginx :
systemctl enanble --now nginx
4. Création du fichier de configuration nginx
On modifie le fichier avec cette commande :
nano /etc/nginx/conf.d/
on y copie la configuration suivant :
server {
listen 80;
listen [::]:80;
rout /var/www/ecommerce.fr;
index index.html index.htm index.nginx-debian.html sign-up.php
server_name ecommerce.fr ;
location ~* \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
access_log /var/lo/ngnix/acces_ecommerce.fr.log;
error_log /var/log/nginx/error_ecommerce.fr.log;
location / {
try_files $uri $uri/ =404;
}
}
‘image dans nano de la conf’
On enregistrera le fichier de configuration avec ce nom :
site_commerce.fr.conf
‘image du nom du fichier’
5. Modification du fichier de conf PHP du site ecommerce.fr
toujours avec nano on va modifier ce fichier
nano /var/www/ecomerce.fr/config.php
et on viendra y coller ceci :
<?php
$SETTINGS["mysql_user"]='riwan_adm';
$SETTINGS["mysql_pass"]='jXf/#4U8';
$SETTINGS["hostname"]='localhost';
$SETTINGS["mysql_database"]='SRV_WEB';
$SETTINGS["data_table"]='registrations';
$SETTINGS["paypal_address"]='email@domain.com';
?>
6.Exécution d’un script SQL dans la BDD
On affiche les bases de données puis on sélectionne celle de notre site web
show databases;
use SRV_WEB;
‘image resultat de commande’
puis on execute le script de création de la base de données
source /var/www/ecommerce.fr/database.sql;
‘image resultat commande’
on redémarre ensuite le service nginx :
systemctl restart nginx.service
Dépannage en cas de problème :
- il faudra surement stoppé le service httpd pour ça on utilisera la commande suivante :
systemctl disable --now httpd
puis :systemctl start nginx
7. Changement du dns du PC pour pointer vers le site ecommerce.fr
il faudra ouvrir le fichier C:\\Windows\System32\drivers\etc\hosts
avec un IDE puis ajouter cette ligne en bas du fichier [inseré ici l'ip du serveur web] ecommerce.fr
‘fichier hosts’
on peut maintenant avoir acces au site avec le navigateur internet
‘site internet’
E. Déploiment du site ecommerce.uk
1. création de la version UK du site
on copie le fichier de configuration puis on créer un fichier de configuration pour ecommerce.uk
on utilisera ces commande :
nano /etc/nginx/conf.d/site_commerce.fr.conf
nano /etc/nginx/conf.d/site_commerce.uk.conf
On modifie le server_name dans ce nouveau fichier de conf site_commerce.uk.conf pour pointer vers ecommerce.uk
server_name ecommerce.uk
ne pas oublié de redémarré nginx !
on modifie aussi le fichier hosts du PC en ajoutant cette ligne pour rediriger ecommerce.uk vers l’adresse IP de la VM
[inserez ici l'@Ip de la vm ecommerce.uk]
normalement le site ecommerce.uk est egalement accessible
’navigateur avec en url ecommerce.uk’
on fait une snapshot de la vm pour bien sauvegarder l’avancé du serveur
’lien tuto snapshot’
2. Séparation du site fr et du site uk
On créé un dossier pour le site UK
mkdir /var/www/eccomerce.uk/
puis on copier le contenu du dossier du site fr vers le site uk
cp -r /var/www/ecommerce.fr/* /var/www/ecommerce.uk
ici “*” signifie en bash que tout le contenue du dossier doit etre copié.
on créé un fichier de configuration pour le site UK dans nginx
nano /etc/nginx/conf.d/site_commerce.uk.conf
puis on modifie le fichier sign-up.php
nano /var/www/ecommerce.uk/sign-up.php
<h1>Subscription Sign up Form UK</h1>
ainsi que le fichier de configuration nginx
root /var/www/ecommerce.uk
on redémarre ensuite nginx
F. Restriction accès IP
1. Création d’un fichier de configuration Blacklist IP
on créer le fichier de blacklist
nano /etc/nginx/blockip.conf
On ajoute L’ip du PC
Attention ! Si vous etes sur une VM attention a bien mettre L’adresse IP de la carte VMnet8
deny 192.168.219.1; # Mon poste
on modifie le fichier de configuration du site ecommerce
nano /etc/nginx/conf.d/site_commerce.fr.conf
et on ajoute :
include /etc/nginx/blockip.conf;
on test L’accès :
‘image du navigateur’
on peut commenter la ligne avec notre adresse ip dans le fichier blockip.conf
G. Analyse des logs
Pour simplifier la lecture des logs , nous pouvons utiliser GoAccess.
1. Activation du dépot EPEL
on installe EPEL
dnf install epel-release -y
2. Installation de GoAcces
dnf install goaccess -y
systemctl enable --now
3. Utilisation de Go Access
Goacces -f /var/log/nginx/acces_ecommerce.fr.log
‘image de la conf’
Vous aurez ensuite accès à une interface lisible afin d’analyser vos logs !
‘image de L’interface’
H. Mise en place du protocole HTTPS
Pour sécuriser la communication entre notre serveur et nos clients, il est impératif de mettre en place du HTTPS qui permettra de chiffrer la communication.
1. Sécurisation d’un service WEB
D’abord, on créé un répertoire
mkdir /etc/ssl/private
Sur lequel on limite les accès
chmod 700 /etc/ssl/private
Cette commande génère un certificat SSL auto-signé et une clé privée pour sécuriser un serveur Nginx avec HTTPS. Elle crée une clé RSA de 2048 bits et un certificat valable un an, stockés respectivement dans /etc/ssl/private/nginx-selfsigned.key et /etc/ssl/certs/nginx-selfsigned.crt. Ce certificat n’est pas validé par une autorité de certification, mais il permet de chiffrer les connexions.
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
Et l’on remplit ces informations :
‘screen des info’
Cette commande génère des paramètres Diffie-Hellman de 2048 bits pour renforcer la sécurité des connexions SSL/TLS. Le fichier généré (/etc/ssl/certs/dhparam.pem) est utilisé par les serveurs web comme Nginx ou Apache pour sécuriser l’échange de clés lors des connexions chiffrées.
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
2. B. Intégration du HTTPS dans le fichier de configuration
nano /etc/nginx/conf.d/site_commerce.fr.conf
Et on ajoute cette conf :
server {
listen 443 http2 ssl;
listen [::]:443 http2 ssl;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
root /var/www/ecommerce.fr/;
index index.html index.htm index.nginx-debian.html sign-up.php;
server_name ecommerce.fr ;
location ~* \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
access_log /var/log/nginx/access_ecommerce.fr.log;
error_log /var/log/nginx/error_ecommerce.fr.log;
location / {
try_files $uri $uri/ =404;
}
}
Pour la version UK :
nano /etc/nginx/conf.d/site_commerce.uk.conf
server {
listen 443 http2 ssl;
listen [::]:443 http2 ssl;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
root /var/www/ecommerce.uk/;
index index.html index.htm index.nginx-debian.html sign-up.php;
server_name ecommerce.uk ;
location ~* \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
access_log /var/log/nginx/access_ecommerce.fr.log;
error_log /var/log/nginx/error_ecommerce.fr.log;
location / {
try_files $uri $uri/ =404;
}
}
Puis on test les fichiers de configuration nginx et on redémarre
nginx -t
systemctl restart nginx.service
Avant d’accéder au site, ne surtout pas oublier d’autoriser le port https dans le firewall de votre machine !
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
Notre site est enfin bien accessible en https pour la version FR et UK !
‘preuve image’
J’observe bien avec Wireshark que la communication est chiffrée !
‘preuve wireshark’
3. Redirection auto http vers https
Pour cela, on ajoute dans les fichiers de conf FR et UK la ligne suivante dans la section du serveur http
juste en dessous de la ligne server_name
Ne pas oublier de le faire dans le FR
return 301 https://$host$request_uri;
On enregistre et quitte, puis on redémarre nginx pour que les modifications soient prises en compte.
I. Mise en place de la haute disponibilité (HAproxy)
Nous allons mettre en place une haute disponibilité de notre service afin qu’il soit accessible en cas d’indisponibilité de notre unique serveur web actuel.
Pour cela, il va nous falloir deux nouvelles machines sous rockylinux :
La première sera un deuxième serveur web : srvweb02
La deuxième sera un serveur HA Proxy : HA-PROXY01
Pour gagner du temps, on peut cloner srvweb01 pour créer srvweb02. Il faudra désactiver la base de données sur srvweb02 pour se connecter à celle de srvweb01. J’accède à mes trois machines en SSH.
1. Configuration de la BDD du srvweb02 cloné
Je me rends sur MariaDB sur mon srvweb02
mysql -u root -p
Puis on supprime la BDD locale qui a également été clonée
show databases;
DROP DATABASE SRV_WEB
‘image de la suppresion de la bdd’
2. Accès de la BDD du srvweb01 au srvweb02
NB : on réalise ces opérations sur srvweb01
D’abord, il va falloir autoriser les connexions extérieures du moteur BDD.
nano /etc/my.cnf.d/mariadb-server.cnf
Et on décommente la ligne bind-address
‘image de la ligne bind-adress’
On quitte puis on sauvegarde.
Et on ouvre le port 3306 sur firewalld
sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
Et on autorise dans notre base de données la connexion à distance de srvweb02 sur notre bdd de srvweb01
show databases;
grant all on SRV_WEB.* to root@192.168.219.141 identified by 'root'
flush privileges;
On peut alors bien vérifier sur notre srvweb02 l’existence de la BDD appartenant à srvweb01.
‘image de la posibilité de se connecter a la bdd’
3. C. Mise en place d’un serveur HA
On retourne sur notre machine haproxy et on installe les packets suivants :
dnf install haproxy -y
On effectue une copie du fichier de configuration de haproxy avant modification
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.sample
Puis on modifie notre fichier !
nano /etc/haproxy/haproxy.cfg
Et on ajoute les lignes suivantes au début du fichier
‘image des lignes '
On enregistre puis on quitte le fichier.
Et on active rsyslog en décommentant les lignes dans le fichier suivant
nano /etc/rsyslog.conf
‘image de provides UDP '
On enregistre puis on quitte
On donne ensuite une policy à SElinux
[root@ha-proxy01 ~]# setsebool -P haproxy_connect_any 1
Et on démarre les services haproxy puis rsyslog
systemctl start haproxy
systemctl start rsyslog
NB : ne pas oublier d’ouvrir le port 8080 sur le serv haproxy
Ensuite, on se connecte à l’interface d’administration de haproxy depuis notre navigateur web
Identifiants : haproxy
mot de passe : haproxy
‘image de la connection a l’ha '
On voit alors que notre accès est bien fonctionnel !
‘image apres la connexion '
4. Sécurisation de notre HAproxy
On va mettre en place un certificat auto-signé pour HAproxy
Pour cela on se rend dans le dossier comportant nos certificats
[root@ha-proxy01 ~]# cd /etc/pki/tls/certs
Et on génère notre certificat
openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/pki/tls/certs/haproxy.pem -out /etc/pki/tls/certs/haproxy.pem -days 365
Une fois le certificat généré, on retourne dans notre fichier de configuration HAproxy pour ajouter les lignes suivantes
Dans la section global : ‘image de la section global’
Puis dans la section frontend:
image section frontend
On enregistre et on quitte, puis on redémarre le service HAproxy
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
image resultat de commande
image du certificat dans le navigateur
On peut alors bien accéder à notre site web en utilisant l’adresse IP de notre HAproxy !
5. Exercices
Pour mettre à l’épreuve notre HAproxy, nous allons faire plusieurs test.
D’abord on teste l’arrêt d’un des serveurs (srvweb01 en l’occurrence)
Image VMWARE image site
On constate après l’arrêt de la machine et le rechargement de la page que le site est toujours bien accessible !
Il existe plusieurs modes de répartition des requêtes :
· Round-robin : Distribue les requêtes de manière alternée entre les serveurs disponibles. (balance roundrobin)
· Least connections : Oriente les requêtes vers le serveur ayant le moins de connexions actives. (balance leastconn)
· Weighted least connections : Similaire à “least connections”, mais permet d’ajuster la charge en fonction des capacités des serveurs. (balance weighted_least_connections)
Par exemple, un serveur peut être configuré avec un poids de 100 et un autre avec 50, influençant ainsi la distribution des requêtes.
J. Mise en place d’un HAproxy BIS
1. Installation d’un deuxième HAproxy
Pour gagner du temps, j’ai cloné mon premier HA et j’ai ensuite renommé son hostname.
On commence par mettre dans le fichier host de notre HAproxy02 l’adresse de chaque machines ainsi que leur nom.
192.168.219.128 srvweb01
192.168.219.141 srvweb02
192.168.219.140 ha-proxy01
192.168.219.143 ha-proxy02
Le curl fonctionne alors bien sur chaque machine (ici web01)
2. Redondance HAproxy
Ouverture du port 80
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
Installation de pacemaker sur les 2 HA proxy
dnf --enablerepo=highavailability -y install pacemaker pcs
Et on active le service au démarrage sur les deux machines
systemctl enable --now pcsd
Puis on réalise des ouvertures dans le firewall (sur les deux HA)
sudo firewall-cmd --add-service=high-availability --permanent
firewall-cmd --reload
On créé ensuite un cluster en créant un utilisateur dédié à cet effet sur les deux machines
user : hacluster
mdp : tphaproxy
passwrd hacluster
Ensuite on réalise l’authentification des noeuds sur les deux machines
pcs host auth ha-proxy01 ha-proxy02
Puis on déploie notre cluster, à faire sur HA01
pcs cluster setup ha_cluster ha-proxy01 ha-proxy02
On démarrage le cluster puis on active le démarrage automatique
PCS cluster start --all
pcs cluster enable --all
On check ensuite l’état de notre cluster
pcs cluster status
image
pcs status corosync
image
pcs status nodes
On peut ensuite vérifier les éventuels erreurs grâce à la commande
crm_verify -L -V
Pour corriger les erreurs, il suffit ici d’entrer la commande suivante
pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore
On peut ensuite vérifier le résultat de nos actions avec cette commande
pcs property
3. Création d’une adresse IP virutel (VIP)
Une VIP nous servira à rediriger le trafic sur les deux noeuds
pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=192.168.219.150 cidr_netmask=24 op monitor interval=30s
Et on vérifie l’existence de notre nouvelle adresse
pcs status resources
4. Création d’un cluster de ressource maintenance
Sur les deux serveurs, nous allons d’abord devoir récupérer des ressources pour créer l’agent.
On se déplace alors dans le dossier de Heartbeat
cd /usr/lib/ocf/resource.d/heartbeat sudo
Puis on installe l’agent en cherchant la ressource sur ce lien github
curl -O https://raw.githubusercontent.com/thisismitch/clusteragents/master/haproxy
curl -O https://raw.githubusercontent.com/thisismitch/clusteragents/master/haproxy
Puis le rendre exécutable
chmod +X haproxy
Et nous pouvons savoir les agents actuellement disponibles sur le serveur grâce à la commande
pcs resource agents ocf:heartbeat
image
Pour créer notre cluster, on exécute la commande suivante
pcs resource create haproxy systemd:haproxy op monitor interval=10s
On ajoute ensuite une contrainte pour que la VIP et le HAproxy soit opérationnel sur le même noeud en même temps
pcs constraint order virtual_ip then haproxy
image
On peut alors afficher les informations de notre cluster :
pcs status
image
Il devient alors possible d’accéder à notre site web en rentrant l’adresse de notre VIP !
image
image
5. Exercice test de redondance du HAproxy
Ici, on voit que malgré l’arrêt du HA maître (HA01), le site web est toujours bien accessible via la VIP.