Aller au contenu principal

Lab 5.6 - Installation de WordPress et GLPI sur un Serveur Linux (Ubuntu 24.04)

Objectifs​

À la fin de ce lab, vous serez capable de:

  • Installer et configurer Apache avec plusieurs VirtualHosts
  • Installer et configurer MariaDB avec plusieurs bases de données
  • Installer WordPress et GLPI sur des ports distincts
  • Configurer les permissions et la sécurité
  • Utiliser des scripts shell pour automatiser l'installation
  • Gérer les services web et bases de données

Prérequis​

  • Ubuntu 24.04 installé
  • Accès sudo/root
  • Au moins 2 GB de RAM disponible
  • Au moins 5 GB d'espace disque libre
  • Connexion Internet

Vue d'Ensemble​

Ce guide fournit les instructions et les scripts shell pour installer WordPress et GLPI sur un serveur Linux Ubuntu 24.04. Les deux applications utiliseront des ports et des utilisateurs distincts pour éviter tout conflit.

Architecture:

  • WordPress: Port 8080, base de données wordpressdb, utilisateur wordpressuser
  • GLPI: Port 8081, base de données glpidb, utilisateur glpiuser

Partie 1: Installation de WordPress​

Étape 1: Créer le script d'installation​

Créez un fichier script pour WordPress :

nano install_wordpress.sh

Étape 2: Contenu du script​

Copiez le contenu suivant dans le fichier :

#!/bin/bash

# Mise à jour des paquets et installation des composants nécessaires
sudo apt update
sudo apt install -y apache2 php php-{mysql,xml,mbstring,curl,zip,gd} libapache2-mod-php mariadb-server wget

# Sécurisation de l'installation de MariaDB
sudo mysql_secure_installation

# Connexion à MariaDB et création de la base de données WordPress et de l'utilisateur
sudo mysql -u root <<EOF
CREATE DATABASE wordpressdb;
CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'securepassword1';
GRANT ALL PRIVILEGES ON wordpressdb.* TO 'wordpressuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF

# Téléchargement et extraction de WordPress
cd /tmp
wget https://wordpress.org/latest.tar.gz
sudo tar xzvf latest.tar.gz -C /var/www/html/

# Configuration des permissions
sudo chown -R www-data:www-data /var/www/html/wordpress
sudo chmod -R 775 /var/www/html/wordpress

# Création du fichier de configuration pour WordPress dans Apache
sudo bash -c 'cat <<EOT > /etc/apache2/sites-available/wordpress.conf
<VirtualHost *:8080>
ServerName localhost
DocumentRoot /var/www/html/wordpress

<Directory /var/www/html/wordpress>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/wordpress_error.log
CustomLog ${APACHE_LOG_DIR}/wordpress_access.log combined
</VirtualHost>
EOT'

# Configuration du port 8080
echo "Listen 8080" | sudo tee -a /etc/apache2/ports.conf

# Activation de la configuration et redémarrage d'Apache
sudo a2ensite wordpress.conf
sudo a2enmod rewrite
sudo systemctl restart apache2

# Instructions pour l'installation via l'interface web
echo "Installation via l'interface web :"
echo "Ouvrez un navigateur et accédez à http://127.0.0.1:8080/wordpress"
echo "Suivez l'assistant d'installation en fournissant les informations de la base de données :"
echo "Nom de la base de données : wordpressdb"
echo "Nom d'utilisateur : wordpressuser"
echo "Mot de passe : securepassword1"
echo "Hôte de la base de données : localhost"

Étape 3: Rendre le script exécutable et l'exécuter​

chmod +x install_wordpress.sh
./install_wordpress.sh

Étape 4: Réponses à mysql_secure_installation​

Pendant l'exécution du script, vous serez invité à répondre aux questions pour sécuriser MariaDB. Voici les réponses recommandées :

Enter current password for root : [Appuyez sur Entrée]
Switch to unix_socket authentication [Y/n] Y
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Étape 5: Installation via l'interface web​

  1. Ouvrez un navigateur et accédez à http://127.0.0.1:8080/wordpress

  2. Suivez l'assistant d'installation en fournissant les informations de la base de données :

    • Nom de la base de données : wordpressdb
    • Nom d'utilisateur : wordpressuser
    • Mot de passe : securepassword1
    • Hôte de la base de données : localhost
  3. Complétez l'installation en créant un compte administrateur WordPress

Étape 6: Vérification​

# Vérifier que Apache écoute sur le port 8080
sudo netstat -tulnp | grep :8080

# Vérifier le statut d'Apache
sudo systemctl status apache2

# Vérifier les logs
sudo tail -f /var/log/apache2/wordpress_access.log

Partie 2: Installation de GLPI​

Étape 1: Créer le script d'installation​

Créez un fichier script pour GLPI :

nano install_glpi.sh

Étape 2: Contenu du script​

Copiez le contenu suivant dans le fichier :

#!/bin/bash

# Mise à jour des paquets et installation des composants nécessaires
sudo apt update
sudo apt install -y apache2 php php-{apcu,cli,common,curl,gd,imap,ldap,mysql,xmlrpc,xml,mbstring,bcmath,intl,zip,bz2} libapache2-mod-php mariadb-server wget

# Sécurisation de l'installation de MariaDB (si pas déjà fait)
# sudo mysql_secure_installation

# Connexion à MariaDB et création de la base de données GLPI et de l'utilisateur
sudo mysql -u root <<EOF
CREATE DATABASE glpidb;
CREATE USER 'glpiuser'@'localhost' IDENTIFIED BY 'securepassword2';
GRANT ALL PRIVILEGES ON glpidb.* TO 'glpiuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF

# Téléchargement et extraction de GLPI
cd /tmp
wget https://github.com/glpi-project/glpi/releases/download/10.0.7/glpi-10.0.7.tgz
sudo tar xvf glpi-10.0.7.tgz -C /var/www/html/

# Configuration des permissions
sudo chown -R www-data:www-data /var/www/html/glpi
sudo chmod -R 775 /var/www/html/glpi

# Création du fichier de configuration pour GLPI dans Apache
sudo bash -c 'cat <<EOT > /etc/apache2/sites-available/glpi.conf
<VirtualHost *:8081>
ServerName localhost
DocumentRoot /var/www/html/glpi/public

<Directory /var/www/html/glpi/public>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/glpi_error.log
CustomLog ${APACHE_LOG_DIR}/glpi_access.log combined
</VirtualHost>
EOT'

# Configuration du port 8081
echo "Listen 8081" | sudo tee -a /etc/apache2/ports.conf

# Activation de la configuration et redémarrage d'Apache
sudo a2ensite glpi.conf
sudo a2enmod rewrite
sudo systemctl restart apache2

# Instructions pour l'installation via l'interface web
echo "Installation via l'interface web :"
echo "Ouvrez un navigateur et accédez à http://127.0.0.1:8081/glpi"
echo "Suivez l'assistant d'installation en fournissant les informations de la base de données :"
echo "Nom de la base de données : glpidb"
echo "Nom d'utilisateur : glpiuser"
echo "Mot de passe : securepassword2"
echo "Hôte de la base de données : localhost"

Étape 3: Rendre le script exécutable et l'exécuter​

chmod +x install_glpi.sh
./install_glpi.sh

Étape 4: Installation via l'interface web​

  1. Ouvrez un navigateur et accédez à http://127.0.0.1:8081/glpi

  2. Suivez l'assistant d'installation en fournissant les informations de la base de données :

    • Nom de la base de données : glpidb
    • Nom d'utilisateur : glpiuser
    • Mot de passe : securepassword2
    • Hôte de la base de données : localhost
  3. Connectez-vous avec les identifiants par défaut :

    • Utilisateur : glpi
    • Mot de passe : glpi
  4. Important : Changez immédiatement les mots de passe par défaut

  5. Supprimez le fichier d'installation pour des raisons de sécurité :

sudo rm /var/www/html/glpi/install/install.php

Partie 3: Commandes Avancées et Sécurisation​

Gestion des permissions​

# Définir les permissions de fichiers de manière récursive
sudo find /var/www/html/wordpress -type f -exec chmod 644 {} \;
sudo find /var/www/html/glpi -type f -exec chmod 644 {} \;

# Définir les permissions de répertoires
sudo find /var/www/html/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/html/glpi -type d -exec chmod 755 {} \;

Configuration du pare-feu (UFW)​

# Autoriser les ports nécessaires
sudo ufw allow 8080/tcp
sudo ufw allow 8081/tcp

# Vérifier le statut
sudo ufw status

Surveillance en temps réel​

# Surveiller les logs Apache
sudo tail -f /var/log/apache2/access.log
sudo tail -f /var/log/apache2/wordpress_access.log
sudo tail -f /var/log/apache2/glpi_access.log

# Surveiller les processus système
htop

# Surveiller l'état de MySQL/MariaDB
sudo mysqladmin -u root -p status

Partie 4: Résolution de Problèmes​

Erreur de configuration Apache​

Si vous rencontrez une erreur de configuration Apache :

# Vérifier la syntaxe de la configuration
sudo apache2ctl configtest

# Voir les logs détaillés
sudo journalctl -xeu apache2.service

# Vérifier les fichiers de configuration
sudo nano /etc/apache2/sites-available/wordpress.conf
sudo nano /etc/apache2/sites-available/glpi.conf

Vérifier que les ports sont libres​

# Vérifier les ports en écoute
sudo netstat -tulnp | grep :8080
sudo netstat -tulnp | grep :8081

# Alternative avec ss
sudo ss -tulnp | grep :8080
sudo ss -tulnp | grep :8081

Vérifier les permissions​

# Vérifier les permissions des répertoires
ls -ld /var/www/html/wordpress
ls -ld /var/www/html/glpi

# Vérifier le propriétaire
ls -la /var/www/html/

Partie 5: Exercices Pratiques​

Exercice 1: Ajouter des commentaires aux scripts​

  1. Ouvrez les scripts install_wordpress.sh et install_glpi.sh
  2. Ajoutez des commentaires (#) expliquant chaque section du script
  3. Expliquez ce que fait chaque commande importante

Exercice 2: Changer les ports​

Modifiez les ports pour utiliser 8080 et 8082 au lieu de 8080 et 8081 :

  1. Modifiez les fichiers de configuration Apache
  2. Modifiez le fichier ports.conf
  3. Redémarrez Apache
  4. Testez l'accès aux applications

Commandes à utiliser :

# Modifier le port dans la configuration GLPI
sudo nano /etc/apache2/sites-available/glpi.conf
# Changez *:8081 en *:8082

# Ajouter le port 8082
echo "Listen 8082" | sudo tee -a /etc/apache2/ports.conf

# Redémarrer Apache
sudo systemctl restart apache2

# Vérifier
sudo netstat -tulnp | grep :8082

Exercice 3: Surveillance et monitoring​

  1. Utilisez htop pour surveiller les ressources pendant l'installation
  2. Surveillez les logs Apache en temps réel
  3. Vérifiez l'état de MariaDB avec mysqladmin

Questions de Réflexion​

Répondez aux questions suivantes dans un document séparé :

  1. Quelle est l'importance de configurer des utilisateurs et des bases de données distincts pour WordPress et GLPI ?

    • Expliquez les risques de sécurité si les deux applications partageaient la même base de données
  2. Que se passerait-il si WordPress et GLPI utilisaient tous les deux le port 80 ?

    • Expliquez les implications techniques et les solutions possibles
  3. Pourquoi est-il nécessaire de sécuriser l'installation de MariaDB pendant la configuration initiale ?

    • Détaillez les risques si cette étape est ignorée
  4. Quel lien existe-t-il entre la base de données et les fichiers de WordPress/GLPI téléchargés sur le serveur ?

    • Expliquez comment les deux interagissent
  5. Expliquez ce qui se passe lorsque vous accédez à WordPress ou GLPI via un navigateur après l'installation.

    • Décrivez le flux de requête depuis le navigateur jusqu'à la base de données

Annexe 1: Méthodes de Configuration des Ports​

Méthode 1: Fichier de configuration séparé (Recommandé)​

# Créer un fichier de configuration pour le port
sudo bash -c 'echo "Listen 8080" > /etc/apache2/conf-available/port8080.conf'
sudo bash -c 'echo "Listen 8081" > /etc/apache2/conf-available/port8081.conf'

# Activer les configurations
sudo a2enconf port8080
sudo a2enconf port8081

# Redémarrer Apache
sudo systemctl restart apache2

Avantages :

  • Plus modulaire
  • Facilite la gestion des configurations
  • Ne modifie pas les fichiers principaux

Méthode 2: Ajout direct dans ports.conf​

# Ajouter directement dans ports.conf
echo "Listen 8080" | sudo tee -a /etc/apache2/ports.conf
echo "Listen 8081" | sudo tee -a /etc/apache2/ports.conf

# Redémarrer Apache
sudo systemctl restart apache2

Avantages :

  • Simple et rapide
  • Toutes les configurations de ports au même endroit

Inconvénients :

  • Modifie le fichier principal
  • Moins modulaire

Différence entre tee et bash -c​

echo "Listen 8081" | sudo tee -a /etc/apache2/ports.conf :

  • Modifie directement le fichier de configuration principal
  • Simple mais moins modulaire
  • Toutes les configurations au même endroit

sudo bash -c 'echo "Listen 8080" > /etc/apache2/conf-available/port8080.conf' :

  • Crée un fichier de configuration séparé
  • Plus modulaire et structuré
  • Permet d'activer/désactiver facilement
  • Ne modifie pas les fichiers principaux

Annexe 2: Sécurisation Avancée​

Supprimer les fichiers d'installation​

# WordPress (si présent)
sudo rm -rf /var/www/html/wordpress/wp-admin/install.php

# GLPI
sudo rm /var/www/html/glpi/install/install.php

Configurer les permissions strictes​

# Permissions pour WordPress
sudo chown -R www-data:www-data /var/www/html/wordpress
sudo find /var/www/html/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/html/wordpress -type f -exec chmod 644 {} \;

# Permissions pour GLPI
sudo chown -R www-data:www-data /var/www/html/glpi
sudo find /var/www/html/glpi -type d -exec chmod 755 {} \;
sudo find /var/www/html/glpi -type f -exec chmod 644 {} \;

Configurer les sauvegardes​

# Script de sauvegarde de base de données WordPress
sudo mysqldump -u wordpressuser -p wordpressdb > /backup/wordpress_$(date +%Y%m%d).sql

# Script de sauvegarde de base de données GLPI
sudo mysqldump -u glpiuser -p glpidb > /backup/glpi_$(date +%Y%m%d).sql

Résumé des Commandes Importantes​

CommandeDescription
sudo systemctl status apache2Vérifier le statut d'Apache
sudo systemctl restart apache2Redémarrer Apache
sudo apache2ctl configtestTester la configuration Apache
sudo netstat -tulnp | grep :8080Vérifier si le port est en écoute
sudo tail -f /var/log/apache2/access.logSurveiller les logs en temps réel
htopSurveiller les processus système
sudo mysqladmin -u root -p statusVérifier l'état de MariaDB
sudo ufw allow 8080/tcpAutoriser le port dans le pare-feu

Vérification Finale​

Vérifiez que vous avez réussi à :

  • Installer WordPress sur le port 8080
  • Installer GLPI sur le port 8081
  • Configurer les bases de données distinctes
  • Accéder aux deux applications via le navigateur
  • Configurer le pare-feu (UFW)
  • Comprendre la différence entre les méthodes de configuration des ports
  • Ajouter des commentaires aux scripts
  • Répondre aux questions de réflexion

Prochaines Étapes​

  • Module 7: Réseau et Configuration (pour approfondir la configuration réseau)
  • Module 8: Services et Démon (pour automatiser avec systemd)
  • Module 9: Sécurité Système (pour sécuriser davantage les installations)

Ressources Complémentaires​


Lab créé le: Décembre 2024