
Description de la formation
Optimisez votre Environnement LAMP Techniques Avancées
Comme l’indique Wikipedia, « LAMP est un acronyme désignant un ensemble de logiciels libres permettant de construire des serveurs de sites web ».
L'acronyme original se réfère aux logiciels suivants :
« Linux », le système d'exploitation ( GNU/Linux ) ;
« Apache », le serveur Web ;
« MySQL ou MariaDB », le serveur de base de données ;
À l'origine, « PHP », « Perl » ou « Python », les langages de script.
Même si les auteurs de chacun de ces programmes ne se sont pas coordonnés pour construire des plates-formes LAMP, cette combinaison de logiciels s'est popularisée du fait du faible coût de l'ensemble et de la présence de tous ces composants dans la plupart des distributions GNU/Linux.
J’utilise cette technologie depuis des années et son appartenance aux logiciels libres n’est pas étrangère à mon enthousiasme à son égard, ainsi qu’à son succès ininterrompu auprès d’une grande partie de la profession et cela depuis maintenant des décennies.
Objectifs de la formation
Savoir optimiser, gérer et sanctuariser l’environnement LAMP
Utiliser des Techniques avancées applicables à l’environnement dans son intégralité
Offrir une solution de développement agile au stade de la production
Connaissances requises
Avoir des connaissances de base en Système GNU/Linux
Avoir une connaissance pratique avec les réseaux TCP/IP
Être familier avec les concepts de virtualisation et de sécurité informatique
Être familier avec les concepts Agile, partage, intégration et déploiement
Public concerné
Cet enseignement concerne un profile ayant déjà une certaine compréhension générale de l’informatique, une expérience tangible de la programmation et une compréhension partielle de l’architecture d’une application web et/ou d’un site internet.
Utilisation de l’environnement LAMP au jour le jour
Chapitre 1
Fichier Configuration - Voici une vue d'ensemble des principaux fichiers de configuration dans une architecture LAMP
Chapitre 2
Configuration Réseau - La configuration réseau dans une pile LAMP est principalement gérée au niveau du système d'exploitation Linux
Chapitre 3
Shell Script - Voici quelques exemples de shell scripts utiles dans une pile LAMP
Chapitre 4
Docker - Utiliser Docker pour déployer une pile LAMP permet de simplifier la gestion et l'isolation des composants
Chapitre 5
GLPI - C’est une application open-source de gestion des actifs IT et de helpdesk
Chapitre 6
Sauvegarde - Mettre en place une solution de sauvegarde planifiée avec `cron` dans une pile LAMP
Chapitre 7
Chiffrement - Le chiffrement est essentiel pour protéger les données sensibles dans une pile LAMP
Chapitre 8
Git(Bitbucket) avec Scrum - Pour intégrer Git (Bitbucket) dans une pile LAMP et utiliser SCRUM pour la gestion de projet
Chapitre 9
CI/CD(Jira Pipeline) - Utiliser Bitbucket Pipelines pour automatiser les tests et les déploiements
Chapitre 10
Linux dans LAMP - Voici une explication détaillée de chacun de ces composants, en mettant l'accent sur le rôle de Linux dans cette pile
Chapitre 11
Apache dans LAMP - Apache HTTP Server, communément appelé Apache, est un composant essentiel de la pile LAMP
Chapitre 12
MySQL dans LAMP - MySQL est un système de gestion de bases de données relationnelles (SGBDR) open source, et il constitue une composante essentielle de la pile LAMP
Chapitre 13
PHP dans LAMP - PHP est un langage de script côté serveur utilisé pour le développement web, et il constitue une composante essentielle de la pile LAMP
Fichiers de Configuration
Dans une pile LAMP (Linux, Apache, MySQL, PHP), les fichiers de configuration jouent un rôle crucial pour définir le comportement et les paramètres de chaque composant. Voici une vue d'ensemble des principaux fichiers de configuration dans une architecture LAMP :
1. Apache
apache2.conf
Le fichier de configuration principal d'Apache. Il définit les paramètres globaux du serveur Apache, tels que les directives pour le fonctionnement du serveur et les fichiers de configuration supplémentaires à inclure.
sites-available/ et sites-enabled/
Dans ces répertoires, vous trouverez les fichiers de configuration des sites virtuels (virtual hosts) d'Apache. Chaque site web peut avoir son propre fichier de configuration, ce qui permet une configuration individuelle pour chaque site.
httpd.conf (sur certaines distributions)
Dans certaines distributions, comme CentOS/RHEL, `httpd.conf` est utilisé à la place de `apache2.conf` pour le fichier de configuration principal d'Apache.
2. MySQL
my.cnf
Le fichier de configuration principal de MySQL. Il définit les paramètres globaux du serveur MySQL, tels que les emplacements des fichiers de données, les tailles de mémoire tampon, les chemins d'accès aux journaux, etc.
Modifier les Fichiers de Configuration
Pour modifier les fichiers de configuration dans une pile LAMP, vous pouvez utiliser un éditeur de texte comme `nano`, `vim` ou `gedit`. Assurez-vous de disposer des permissions appropriées pour modifier ces fichiers (généralement nécessitant des privilèges de superutilisateur).
Exemple avec `sudo nano` :
sudo nano /etc/apache2/apache2.conf
Reload ou Redémarrage des Services
Après avoir modifié les fichiers de configuration, vous devrez généralement recharger ou redémarrer les services appropriés pour appliquer les changements. Par exemple :
Pour Apache :
sudo systemctl reload apache2 # Debian/Ubuntu
sudo systemctl reload httpd # CentOS/RHEL
Pour MySQL :
sudo systemctl reload mysql # Debian/Ubuntu
sudo systemctl reload mysqld # CentOS/RHEL
Pour PHP (si nécessaire) :
sudo systemctl reload php-fpm # Si vous utilisez PHP-FPM
Sécurité
Assurez-vous de sécuriser vos fichiers de configuration en limitant les accès aux utilisateurs autorisés uniquement. Gardez également une sauvegarde des fichiers de configuration avant toute modification importante.
Conclusion
En résumé, les fichiers de configuration dans une pile LAMP permettent de définir les paramètres et les options de chaque composant pour personnaliser le comportement du serveur web, de la base de données et de l'interpréteur PHP selon vos besoins spécifiques.
Configurer l’Interface Réseau
La configuration réseau dans une pile LAMP (Linux, Apache, MySQL, PHP) est principalement gérée au niveau du système d'exploitation Linux. Voici les principaux aspects de la configuration réseau dans une architecture LAMP :
Configuration d'Interface Réseau (Linux)
La configuration des interfaces réseau sur Linux se fait généralement via des fichiers de configuration spécifiques dans le répertoire `/etc/network/interfaces` (pour les distributions Debian/Ubuntu) ou `/etc/sysconfig/network-scripts/` (pour les distributions CentOS/RHEL).
Exemple (Debian/Ubuntu) :
# /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
Exemple (CentOS/RHEL) :
# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
Configuration du DNS
La résolution DNS peut être configurée en ajoutant des entrées au fichier `/etc/resolv.conf`. Vous pouvez spécifier les serveurs DNS à utiliser ainsi que le domaine de recherche.
Exemple :
# /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
search example.com
Configuration du Pare-feu
Les règles de pare-feu peuvent être configurées avec des outils comme `iptables` (pour les distributions Debian/Ubuntu) ou `firewalld` (pour les distributions CentOS/RHEL) pour contrôler le trafic réseau entrant et sortant.
Exemple (iptables) :
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # Autoriser le trafic HTTP
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Autoriser le trafic HTTPS
sudo iptables -A INPUT -j DROP # Rejeter tout autre trafic
Configuration Apache
Dans la configuration d'Apache, vous pouvez spécifier les interfaces sur lesquelles Apache écoute, les noms de domaine virtuels (virtual hosts), les directives de sécurité, etc. Ces configurations sont généralement définies dans les fichiers comme `apache2.conf` et les fichiers de configuration des sites virtuels (`sites-available/`).
Configuration MySQL
La configuration réseau de MySQL se fait principalement via le fichier `my.cnf`, où vous pouvez spécifier l'adresse IP à laquelle MySQL écoute les connexions entrantes, les restrictions d'accès, etc.
Exemple :
[mysqld]
bind-address = 127.0.0.1 # Adresse IP à laquelle MySQL écoute les connexions
Tests et Vérifications
Après avoir effectué des modifications de configuration réseau, assurez-vous de tester la connectivité et de vérifier que les services fonctionnent comme prévu. Vous pouvez utiliser des outils comme `ping`, `netstat`, `telnet`, `curl`, etc., pour tester la connectivité et les ports ouverts.
Sécurité
Assurez-vous de sécuriser votre configuration réseau en limitant l'accès aux services nécessaires uniquement, en appliquant des règles de pare-feu appropriées et en utilisant des méthodes de cryptage et d'authentification appropriées pour les services exposés sur le réseau.
Conclusion
En résumé, la configuration réseau dans une pile LAMP se fait principalement au niveau du système d'exploitation Linux, avec des ajustements supplémentaires dans la configuration d'Apache et de MySQL pour spécifier les interfaces réseau et les paramètres de sécurité.
Dans une pile LAMP, un shell script peut être utilisé pour automatiser des tâches administratives, des opérations de déploiement, des sauvegardes de base de données, ou d'autres tâches liées à la gestion du serveur web, de la base de données et de l'environnement PHP. Voici quelques exemples de shell scripts utiles dans une pile LAMP :
Sauvegarde de Base de Données MySQL
Ce script peut être utilisé pour sauvegarder une base de données MySQL sur une base régulière :
#!/bin/bash
# Configuration
DB_USER="your_username"
DB_PASS="your_password"
DB_NAME="your_database"
BACKUP_DIR="/path/to/backup"
# Date format for the backup file
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
# Backup command
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/$DB_NAME_$DATE.sql
Archivage de Fichiers de Logs Apache
Ce script peut être utilisé pour archiver les fichiers de logs Apache :
#!/bin/bash
# Configuration
LOG_DIR="/var/log/apache2"
ARCHIVE_DIR="/path/to/archive"
# Date format for the archive file
DATE=$(date +"%Y-%m-%d")
# Archive command
tar -czvf $ARCHIVE_DIR/apache_logs_$DATE.tar.gz $LOG_DIR/*.log
Déploiement Automatisé de Code PHP
Ce script peut être utilisé pour déployer automatiquement du code PHP sur le serveur web :
#!/bin/bash
# Configuration
WEB_DIR="/var/www/html"
BACKUP_DIR="/path/to/backup"
# Backup current code
cp -r $WEB_DIR $BACKUP_DIR/backup_$(date +"%Y-%m-%d")
# Deploy new code
cp -r /path/to/new_code/* $WEB_DIR
Surveillance de l'Espace Disque
Ce script peut être utilisé pour surveiller l'espace disque et envoyer une alerte si l'espace disponible est faible :
#!/bin/bash
# Configuration
THRESHOLD=90 # Pourcentage d'utilisation de l'espace disque à partir duquel déclencher l'alerte
ALERT_EMAIL="admin@example.com"
# Get disk usage percentage
DISK_USAGE=$(df -h | grep '/dev/sda1' | awk '{print $5}' | sed 's/%//')
# Check if usage is above threshold
if [ $DISK_USAGE -gt $THRESHOLD ]; then
echo "ALERT: Disk usage is above $THRESHOLD% on $(hostname)" | mail -s "Disk Usage Alert" $ALERT_EMAIL
fi
Rotation des Fichiers de Logs
Ce script peut être utilisé pour effectuer la rotation des fichiers de logs Apache de manière régulière :
#!/bin/bash
# Configuration
LOG_DIR="/var/log/apache2"
MAX_LOGS=5
# Rotate logs
cd $LOG_DIR
for ((i=$MAX_LOGS-1; i>=0; i--)); do
if [ -f access.log.$i ]; then
mv access.log.$i access.log.$((i+1))
fi
done
mv access.log access.log.0
Conclusion
Ces exemples illustrent comment les scripts shell peuvent être utilisés dans une pile LAMP pour automatiser des tâches administratives, des opérations de maintenance et des processus de déploiement.
Veillez à les adapter en fonction de vos besoins spécifiques et à les exécuter avec les permissions appropriées.
Utiliser Docker pour déployer une pile LAMP permet de simplifier la gestion et l'isolation des composants. Voici comment créer une pile LAMP complète dans Docker.
Préparer l'environnement
Assurez-vous que Docker et Docker Compose sont installés sur votre machine.
Installer Docker
Sur Ubuntu, vous pouvez installer Docker avec les commandes suivantes :
sudo apt update
sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker
Installer Docker Compose
Téléchargez et installez Docker Compose :
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
Créer un fichier `docker-compose.yml`
Créez un nouveau répertoire pour votre projet et un fichier `docker-compose.yml` dedans :
mkdir lamp
cd lamp
nano docker-compose.yml
Ajoutez le contenu suivant au fichier `docker-compose.yml` :
version: '3.8'
services:
apache:
image: httpd:latest
container_name: apache
working_dir: /usr/local/apache2/htdocs
restart: always
ports:
- "8080:80"
volumes:
- ./:/usr/local/apache2/htdocs
mysql:
container_name: mysql
image: mysql:8.0
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD:
MYSQL_DATABASE: laravel
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
Les commandes usuelles de controle des services/containers
docker-compose down
docker-compose up -d
sudo docker ps
sudo docker system prune
sudo docker exec -it <nom_container> /bin/bash
sudo docker stop <id_container>
Accédez à `http://localhost:8080`
Préparer les fichiers de votre application
Ajouter l'environnement php dans une image apache:
version: '3.8'
services:
mysql:
container_name: mysql
image: mysql:8.0
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD:
MYSQL_DATABASE: laravel
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
php:
image: php:8.3.3-apache
container_name: php
ports:
- "8080:80"
volumes:
- ./html:/var/www/html
depends_on:
- mysql
Créez un répertoire `html` pour contenir vos fichiers PHP :
mkdir html
Ajoutez un fichier `index.php` dans le répertoire `html` pour tester votre configuration :
<?php
phpinfo();
?>
Démarrer la pile LAMP
Dans le répertoire contenant votre fichier `docker-compose.yml`, lancez les services Docker :
docker-compose up -d
Vérifier l'installation
Ouvrez votre navigateur et accédez à `http://localhost`. Vous devriez voir la page de configuration PHP générée par `phpinfo()`.
Interagir avec la base de données
Pour interagir avec la base de données MariaDB, vous pouvez utiliser des outils comme phpMyAdmin ou MySQL Workbench, ou utiliser le client MySQL en ligne de commande. Par exemple, pour accéder à la base de données depuis le conteneur PHP :
docker exec -it php bash
apt-get update && apt-get install mysql-client -y
mysql -h mysql -u exampleuser -pexamplepass exampledb
Étape 7 : Ajouter phpMyAdmin (Optionnel)
Si vous souhaitez ajouter phpMyAdmin pour une gestion plus facile de votre base de données, modifiez votre fichier `docker-compose.yml` :
version: '3.8'
services:
web:
image: apache:latest
container_name: apache
ports:
- "80:80"
volumes:
- ./html:/var/www/html
depends_on:
- db
db:
image: mariadb:latest
container_name: mariadb
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
php:
image: php:7.4-apache
container_name: php
volumes:
- ./html:/var/www/html
depends_on:
- db
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: example
ports:
- "8080:80"
depends_on:
- db
volumes:
db_data:
Redémarrez les services :
docker-compose down
docker-compose up -d
Accédez à `http://localhost:8080` pour ouvrir phpMyAdmin et gérer votre base de données.
Conclusion
Avec Docker et Docker Compose, vous pouvez rapidement déployer et gérer une pile LAMP. Cette méthode offre une flexibilité et une isolation accrues, ce qui est particulièrement utile pour le développement et les tests.
Pour aller plus loin, vous pouvez ajouter des configurations supplémentaires, comme des volumes pour persister les données de la base de données, des réseaux personnalisés pour une meilleure isolation, et des environnements de mise en scène pour le développement et la production.
Installer les Dépendances PHP et Télécharger et Décompresser GLPI
GLPI (Gestionnaire Libre de Parc Informatique) est une application open-source de gestion des actifs IT et de helpdesk.
Prérequis
Assurez-vous que vous avez une pile LAMP fonctionnelle. Si vous ne l'avez pas encore configurée, vous pouvez suivre les étapes de l'installation de LAMP mentionnées précédemment.
Préparer l'environnement
Assurez-vous que votre système est à jour .
Installer les dépendances PHP
GLPI nécessite quelques modules PHP supplémentaires.
Télécharger et décompresser GLPI
Téléchargez la dernière version stable de GLPI depuis le site officiel.
Déplacez les fichiers décompressés vers le répertoire web d'Apache.
Créer une base de données pour GLPI
Connectez-vous à MariaDB/MySQL :
sudo mysql -u root -p
Créez une base de données et un utilisateur pour GLPI :
CREATE DATABASE glpidb;
CREATE USER 'glpiuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON glpidb.* TO 'glpiuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Configurer Apache pour GLPI
Créez un fichier de configuration Apache pour GLPI :
sudo nano /etc/apache2/sites-available/glpi.conf
Ajoutez-y le contenu suivant :
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/html/glpi
ServerName example.com
<Directory /var/www/html/glpi>
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/glpi_error.log
CustomLog ${APACHE_LOG_DIR}/glpi_access.log combined
</VirtualHost>
Activez le site et redémarrez Apache :
sudo a2ensite glpi.conf
sudo a2enmod rewrite
sudo systemctl restart apache2
Installer GLPI
Ouvrez votre navigateur et accédez à `http://votre_adresse_ip` ou `http://example.com` si vous avez configuré un DNS. Vous serez dirigé vers l'interface d'installation de GLPI.
Suivez les étapes d'installation :
1. Choisissez la langue.
2. Acceptez les termes de la licence.
3. GLPI vérifiera que toutes les prérequis sont remplis.
4. Fournissez les informations de connexion à la base de données (nom de la base de données, utilisateur, mot de passe).
5. GLPI installera les tables nécessaires et configurera la base de données.
6. Après l'installation, notez les identifiants par défaut (glpi/glpi pour l'utilisateur principal).
Finaliser la configuration
Après l'installation :
1. Connectez-vous avec l'utilisateur `glpi` et changez immédiatement le mot de passe.
2. Supprimez le répertoire `install` pour des raisons de sécurité :
sudo rm -rf /var/www/html/glpi/install
3. Configurez les paramètres additionnels comme la gestion des utilisateurs, l'intégration LDAP/AD, les plugins, etc.
Conclusion
Vous avez maintenant installé GLPI sur une pile LAMP. GLPI offre de nombreuses fonctionnalités pour la gestion des actifs IT et du support, et il peut être étendu grâce à divers plugins disponibles.
Assurez-vous de garder votre serveur à jour et de suivre les meilleures pratiques en matière de sécurité pour protéger vos données.
Pour mettre en place une solution de sauvegarde planifiée avec `cron` dans une pile LAMP, vous devez automatiser la sauvegarde de vos bases de données MySQL/MariaDB et de vos fichiers web. Voici comment procéder :
Créer des scripts de sauvegarde
Sauvegarde de la base de données MySQL/MariaDB
Créez un script pour sauvegarder votre base de données. Par exemple, créez un fichier nommé `backup_db.sh` :
#!/bin/bash
# Variables
DB_USER="glpiuser"
DB_PASSWORD="password"
DB_NAME="glpidb"
BACKUP_DIR="/path/to/backup/directory"
DATE=$(date +\%Y-\%m-\%d)
# Créer le répertoire de sauvegarde s'il n'existe pas
mkdir -p $BACKUP_DIR
# Effectuer la sauvegarde
mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_DIR/$DB_NAME-$DATE.sql
# Supprimer les sauvegardes de plus de 7 jours
find $BACKUP_DIR/* -mtime +7 -exec rm {} \;
Rendez ce script exécutable :
chmod +x backup_db.sh
Sauvegarde des fichiers web
Créez un script pour sauvegarder vos fichiers web. Par exemple, créez un fichier nommé `backup_files.sh` :
#!/bin/bash
# Variables
WEB_DIR="/var/www/html"
BACKUP_DIR="/path/to/backup/directory"
DATE=$(date +\%Y-\%m-\%d)
# Créer le répertoire de sauvegarde s'il n'existe pas
mkdir -p $BACKUP_DIR
# Effectuer la sauvegarde
tar -czf $BACKUP_DIR/html-backup-$DATE.tar.gz $WEB_DIR
# Supprimer les sauvegardes de plus de 7 jours
find $BACKUP_DIR/* -mtime +7 -exec rm {} \;
Rendez ce script exécutable :
chmod +x backup_files.sh
Planifier les sauvegardes avec cron
Ouvrir le fichier cron
Éditez la crontab de l'utilisateur root ou d'un utilisateur ayant les permissions nécessaires :
sudo crontab -e
Ajouter des tâches cron
Ajoutez les lignes suivantes à la crontab pour exécuter les scripts de sauvegarde tous les jours à 2h du matin :
0 2 * * * /path/to/backup_db.sh
0 2 * * * /path/to/backup_files.sh
Tester les scripts
Il est important de tester vos scripts pour s'assurer qu'ils fonctionnent correctement. Vous pouvez exécuter manuellement les scripts de sauvegarde pour vérifier leur bon fonctionnement :
./backup_db.sh
./backup_files.sh
Stockage des sauvegardes
Vous pouvez envisager de copier vos sauvegardes vers un emplacement distant pour une redondance supplémentaire, comme un serveur de stockage, un service cloud, ou un disque externe.
Exemple de copie vers un serveur distant via SCP
Ajoutez une ligne à la fin de vos scripts de sauvegarde pour copier les fichiers vers un serveur distant :
# Copier la sauvegarde vers un serveur distant
scp $BACKUP_DIR/$DB_NAME-$DATE.sql user@remote_server:/path/to/remote/backup/directory
scp $BACKUP_DIR/html-backup-$DATE.tar.gz user@remote_server:/path/to/remote/backup/directory
Assurez-vous que vous pouvez vous connecter au serveur distant sans mot de passe en configurant les clés SSH.
Conclusion
Vous avez maintenant une solution de sauvegarde automatisée pour votre pile LAMP en utilisant des scripts Bash et cron. Cette solution sauvegarde votre base de données MySQL/MariaDB et vos fichiers web, et elle peut être étendue pour inclure des copies vers des emplacements distants pour une sécurité accrue. Assurez-vous de tester régulièrement vos sauvegardes pour garantir leur fiabilité.
Le chiffrement est essentiel pour protéger les données sensibles dans une pile LAMP. Voici une solution complète pour mettre en place le chiffrement dans une pile LAMP, couvrant les aspects suivants : chiffrement des sauvegardes, chiffrement des fichiers sensibles, et chiffrement des communications (HTTPS).
Chiffrement des sauvegardes
Pour chiffrer les sauvegardes de bases de données et des fichiers, nous utiliserons GPG (GNU Privacy Guard).
Installer GPG
sudo apt update
sudo apt install gnupg -y
Générer une paire de clés GPG
gpg --full-generate-key
Suivez les instructions pour créer une clé RSA de 2048 bits (ou plus).
Exporter la clé publique
gpg --export -a "email@example.com" > server-public-key.asc
Importer la clef côté client:
sftp puis...
Modifier les scripts de sauvegarde pour inclure le chiffrement
Script de sauvegarde de la base de données (`backup_db.sh`) :
#!/bin/bash
# Variables
DB_USER="glpiuser"
DB_PASSWORD="password"
DB_NAME="glpidb"
BACKUP_DIR="/path/to/backup/directory"
DATE=$(date +\%Y-\%m-\%d)
GPG_KEY="email@example.com"
# Créer le répertoire de sauvegarde s'il n'existe pas
mkdir -p $BACKUP_DIR
# Effectuer la sauvegarde
mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_DIR/$DB_NAME-$DATE.sql
# Chiffrer la sauvegarde
gpg --output $BACKUP_DIR/$DB_NAME-$DATE.sql.gpg --encrypt --recipient $GPG_KEY $BACKUP_DIR/$DB_NAME-$DATE.sql
# Supprimer le fichier non chiffré
rm $BACKUP_DIR/$DB_NAME-$DATE.sql
# Supprimer les sauvegardes chiffrées de plus de 7 jours
find $BACKUP_DIR/* -mtime +7 -exec rm {} \;
Script de sauvegarde des fichiers web (`backup_files.sh`) :
#!/bin/bash
# Variables
WEB_DIR="/var/www/html"
BACKUP_DIR="/path/to/backup/directory"
DATE=$(date +\%Y-\%m-\%d)
GPG_KEY="email@example.com"
# Créer le répertoire de sauvegarde s'il n'existe pas
mkdir -p $BACKUP_DIR
# Effectuer la sauvegarde
tar -czf $BACKUP_DIR/html-backup-$DATE.tar.gz $WEB_DIR
# Chiffrer la sauvegarde
gpg --output $BACKUP_DIR/html-backup-$DATE.tar.gz.gpg --encrypt --recipient $GPG_KEY $BACKUP_DIR/html-backup-$DATE.tar.gz
# Supprimer le fichier non chiffré
rm $BACKUP_DIR/html-backup-$DATE.tar.gz
# Supprimer les sauvegardes chiffrées de plus de 7 jours
find $BACKUP_DIR/* -mtime +7 -exec rm {} \;
Chiffrement des fichiers sensibles
Pour chiffrer des fichiers sensibles sur le serveur, vous pouvez utiliser GPG de manière similaire. Voici un exemple pour chiffrer un fichier de configuration sensible :
Chez le client:
gpg --import server-public-key.asc
gpg --output <nom_fichier>.gpg --encrypt --recipient "email@example.com" <nom_fichier>
On pousse le fichier en sftp.
On execute le script
Pour déchiffrer ce fichier sur le serveur:
gpg --output <nom_fichier> --decrypt <nom_fichier>.gpg
Chiffrement des communications (HTTPS)
Pour chiffrer les communications entre le client et le serveur, vous devez installer un certificat SSL. Vous pouvez utiliser Let's Encrypt, qui fournit des certificats SSL gratuits.
Installer Certbot
sudo apt update
sudo apt install certbot python3-certbot-apache -y
Obtenir un certificat SSL
sudo certbot --apache
Suivez les instructions pour obtenir et installer le certificat. Certbot configurera automatiquement Apache pour utiliser le certificat SSL.
Renouvellement automatique
Let's Encrypt les certificats SSL sont valables 90 jours. Certbot crée une tâche cron pour renouveler automatiquement les certificats. Vous pouvez vérifier cette tâche :
sudo systemctl list-timers
Conclusion
Avec ces étapes, vous avez mis en place une solution de chiffrement complète pour protéger les sauvegardes, les fichiers sensibles et les communications dans votre pile LAMP.
Assurez-vous de tester régulièrement vos sauvegardes chiffrées et de renouveler vos certificats SSL pour maintenir la sécurité de votre environnement.
Pour intégrer Git (Bitbucket) dans une pile LAMP et utiliser SCRUM pour la gestion de projet, vous pouvez suivre ces étapes :
Configurer Git et Bitbucket
Installer Git
Sur votre serveur LAMP, installez Git :
sudo apt update
sudo apt install git -y
Créer un dépôt Bitbucket
1. Connectez-vous à [Bitbucket](https://bitbucket.org/).
2. Créez un nouveau dépôt en suivant les instructions sur le site.
3. Notez l'URL du dépôt.
Configurer Git sur le serveur
Configurez Git avec votre nom et votre email :
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
Cloner le dépôt
Clonez le dépôt Bitbucket dans le répertoire où vous souhaitez gérer votre projet LAMP. Par exemple :
cd /var/www/html
git clone https://your_bitbucket_repository_url.git
Mettre en place un flux de travail Git
Initialiser le dépôt
Si vous n'avez pas encore de dépôt local, initialisez-en un :
cd /var/www/html/your_project
git init
Ajoutez tous les fichiers et effectuez le premier commit :
git add .
git commit -m "Initial commit"
Ajouter le dépôt distant
Ajoutez le dépôt distant Bitbucket :
git remote add origin https://your_bitbucket_repository_url.git
git push -u origin master
Intégrer Bitbucket avec SCRUM
Créer un projet SCRUM
1. Connectez-vous à [Jira](https://www.atlassian.com/software/jira) (Atlassian fournit Jira, qui s'intègre bien avec Bitbucket).
2. Créez un nouveau projet en sélectionnant le modèle SCRUM.
Lier Bitbucket à Jira
1. Dans votre projet Jira, allez dans Project Settings > Integrations.
2. Liez votre projet Jira à votre dépôt Bitbucket en suivant les instructions.
Utiliser les branches Git pour les sprints SCRUM
Adoptez une convention de branches Git pour correspondre à votre flux de travail SCRUM. Par exemple :
- `master`: Branche principale contenant la version stable du code.
- `develop`: Branche de développement intégrant les nouvelles fonctionnalités.
- `feature/*`: Branches pour les nouvelles fonctionnalités.
- `bugfix/*`: Branches pour les corrections de bugs.
- `release/*`: Branches pour les versions prêtes à être déployées.
Pour créer une nouvelle branche pour une fonctionnalité :
git checkout -b feature/your-feature-name
Effectuez vos modifications, puis committez et poussez la branche :
git add .
git commit -m "Add new feature"
git push origin feature/your-feature-name
Automatiser les déploiements
Utiliser des hooks Git pour automatiser les tâches
Vous pouvez utiliser des hooks Git pour automatiser les tâches, comme le déploiement. Par exemple, créez un hook `post-receive` pour déployer automatiquement le code sur le serveur :
nano /var/www/html/your_project/.git/hooks/post-receive
Ajoutez le contenu suivant :
#!/bin/bash
GIT_WORK_TREE=/var/www/html/your_project git checkout -f
Rendez le hook exécutable :
chmod +x /var/www/html/your_project/.git/hooks/post-receive
Suivi et gestion de projet avec Jira
Utilisez Jira pour suivre les tâches, les sprints et les versions :
1. Créez des user stories, des tâches et des bugs dans Jira.
2. Organisez-les en sprints.
3. Associez les commits Git aux tickets Jira en mentionnant les ID de tickets dans les messages de commit. Par exemple :
git commit -m "PROJ-123: Add new feature implementation"
4. Utilisez les tableaux SCRUM dans Jira pour suivre l'avancement du sprint et des versions.
Conclusion
En intégrant Git (Bitbucket) avec une pile LAMP et en utilisant SCRUM via Jira, vous créez un environnement de développement et de gestion de projet robuste. Cette configuration permet une gestion efficace du code source, une collaboration d'équipe améliorée, et un suivi précis des tâches et des sprints, ce qui est essentiel pour le développement agile.
Configurer Bitbucket Pipelines
Pour configurer un pipeline CI/CD avec Jira, Bitbucket, et une pile LAMP, nous allons utiliser Bitbucket Pipelines pour automatiser les tests et les déploiements. Voici comment mettre cela en place :
Prérequis
- Un compte Bitbucket.
- Un projet LAMP sur Bitbucket.
- Un serveur LAMP.
- Accès à Jira pour la gestion de projet.
Configurer Bitbucket Pipelines
Créer un fichier `bitbucket-pipelines.yml`
Dans votre dépôt Bitbucket, créez un fichier nommé `bitbucket-pipelines.yml` à la racine du projet
image: php:7.4
pipelines:
default:
- step:
name: Install dependencies
caches:
- composer
script:
- apt-get update && apt-get install -y unzip git
- curl -sS https://getcomposer.org/installer | php
- php composer.phar install
branches:
master:
- step:
name: Deploy to Production
deployment: production
script:
- echo "Deploying to production server..."
- scp -r * user@production-server:/path/to/production
Définir des variables d'environnement
Dans Bitbucket, allez dans **Repository settings** > **Pipelines** > **Environment variables** et ajoutez les variables suivantes :
- `PRODUCTION_USER`: L'utilisateur SSH pour le serveur de production.
- `PRODUCTION_HOST`: L'adresse du serveur de production.
- `PRODUCTION_PATH`: Le chemin où déployer l'application sur le serveur de production.
Configurer le serveur de production
Configurer SSH
Sur le serveur de production, assurez-vous que SSH est configuré et que votre clé publique est ajoutée au fichier `~/.ssh/authorized_keys`.
Installer les dépendances nécessaires
Assurez-vous que votre serveur de production a les logiciels nécessaires pour exécuter votre application LAMP (Apache, MySQL, PHP, etc.).
Lier Jira et Bitbucket
Connecter Jira et Bitbucket
1. Dans Jira, allez dans **Settings** > **Products** > **Application Links**.
2. Ajoutez un lien vers votre dépôt Bitbucket.
3. Suivez les instructions pour authentifier et lier les deux services.
Utiliser des Smart Commits
Assurez-vous que les messages de commit incluent des références aux tickets Jira. Par exemple :
git commit -m "PROJ-123: Implement new feature"
Mettre en place le pipeline CI/CD
Pipeline de test
Ajoutez des tests automatisés à votre pipeline pour garantir que les changements n'introduisent pas de régressions. Vous pouvez utiliser PHPUnit pour tester votre application PHP. Voici un exemple de pipeline de test :
image: php:7.4
pipelines:
default:
- step:
name: Install dependencies
caches:
- composer
script:
- apt-get update && apt-get install -y unzip git
- curl -sS https://getcomposer.org/installer | php
- php composer.phar install
- step:
name: Run tests
caches:
- composer
script:
- php composer.phar install
- ./vendor/bin/phpunit --configuration phpunit.xml
Pipeline de déploiement
Déployez les changements sur votre serveur de production après avoir validé les tests :
image: php:7.4
pipelines:
branches:
master:
- step:
name: Deploy to Production
deployment: production
script:
- echo "Deploying to production server..."
- scp -r * $PRODUCTION_USER@$PRODUCTION_HOST:$PRODUCTION_PATH
Conclusion
En intégrant Bitbucket Pipelines pour CI/CD et Jira pour la gestion de projet, vous pouvez automatiser les tests et les déploiements pour votre application LAMP, tout en utilisant SCRUM pour gérer efficacement vos projets. Cette approche améliore la qualité du code, réduit les erreurs de déploiement et facilite la collaboration au sein de l'équipe.
Cette formation arrive en complément avec la précédente ("Devenez Expert en LAMP Installation et Configuration") et se focalise sur l'optimisation de son fonctionnement avec l'ajout de nombreuses technologies pour y parvenir.
Ces technologies ont des objectifs variés qui vont de la performance à la sécurité en passant par une facilité d'utilisation ou une mise en oeuvre simplifiée.
Les Chapitres abordés dans cette formation sont les suivants:
Fichier de Configuration
Voici une vue d'ensemble des principaux fichiers de configuration dans une architecture LAMP
Configuration Réseau
La configuration réseau dans une pile LAMP est principalement gérée au niveau du système d'exploitation Linux
Shell Script
Voici quelques exemples de shell scripts utiles dans une pile LAMP
Docker
Utiliser Docker pour déployer une pile LAMP permet de simplifier la gestion et l'isolation des composants
GLPI
C’est une application open-source de gestion des actifs IT et de helpdesk
Sauvegarde
Mettre en place une solution de sauvegarde planifiée avec `cron` dans une pile LAMP
Chiffrement
Le chiffrement est essentiel pour protéger les données sensibles dans une pile LAMP
Git(Bitbucket) avec Scrum
Pour intégrer Git (Bitbucket) dans une pile LAMP et utiliser SCRUM pour la gestion de projet
CI/CD(Jira Pipeline)
Utiliser Bitbucket Pipelines pour automatiser les tests et les déploiements
J'espère que vous passerez un moment agréable et constructif en y prennant part!