Déployer des serveurs base de données et web avec Rex
TL;DR
Rex permet d’automatiser l’installation et la configuration de serveurs (MySQL, Apache) via des Rexfiles et des externals Subversion. Ce guide montre comment créer les tâches pour la base de données et pour le site web, comment utiliser svn:externals pour partager des modules communs, et fournit des checklists, critères de validation et conseils pratiques pour production.
Important : adaptez les identifiants, chemins et paramètres (mot de passe, hôtes) à votre infrastructure avant d’exécuter les commandes.
Intentions de cet article
- Montrer la structure de Rexfile pour un serveur de base de données et un serveur web.
- Expliquer l’utilisation de svn:externals pour réutiliser des bibliothèques communes.
- Fournir des checklists et critères d’acceptation pour valider le déploiement.
Préparer le dépôt et ajouter des externals (base de données)
Changez de répertoire vers le dépôt database puis créez un Rexfile :
wks01 Service# cd ../database
wks01 database# touch RexfileAjoutez ensuite les deux dépôts communs comme externals Subversion :
wks01 database# svn propedit svn:externals .Dans l’éditeur, ajoutez ces lignes, enregistrez et fermez :
lib/Common http://svn01/svn/common
lib/Service http://svn01/svn/service
Après avoir défini les externals, lancez une mise à jour et validez les modifications :
wks01 database# svn up
wks01 database# svn ci -m "added external repositories"Le command svn up vérifie désormais aussi les deux dépôts externes. Si quelqu’un ajoute de nouveaux services dans ces dépôts, vous les récupérerez après un svn up.
Exemple de Rexfile pour le serveur de base de données
Créez un Rexfile qui installe et configure MySQL. Les commentaires sont en français pour faciliter la lecture :
set user => "root";
set password => "f00b4r";
include qw/
Common::NTP
Service::MySQL
/;
set group => srvdb => "db01";
task "prepare", group => "srvdb", sub {
# exécute la tâche commune NTP "prepare"
Common::NTP::prepare();
# installe mysql
Service::MySQL::prepare();
# configure mysql
Service::MySQL::configure({
key_buffer => "32M",
max_allowed_packet => "32M",
});
# redémarre mysql
service mysql => "restart";
};
Explications clés :
- Lignes 1–2 : authentification vers l’hôte cible (ici root + mot de passe). Vous pouvez aussi utiliser l’authentification par clé publique. Voir http://rexify.org/howtos/start.html pour plus d’informations.
- include qw/ … / : inclut les modules Common::NTP et Service::MySQL. Chaque tâche définie dans ces modules est aussi exposée comme fonction Perl, utilisable depuis le Rexfile.
- set group => srvdb => “db01” : définit le groupe de serveurs srvdb contenant l’hôte db01. Vous pouvez ajouter plusieurs hôtes :
set group => srvdb => "db01", "db02", "db03";
set group => srvdb => "db[01..03]";- task “prepare” : s’exécute sur tous les serveurs du groupe srvdb. Elle installe, configure et redémarre MySQL.
Après création du Rexfile, ajoutez-le et validez-le dans le dépôt :
wks01 database# svn add Rexfile
wks01 database# svn ci -m "inital commit of Rexfile"Pour lancer la préparation du serveur :
wks01 database# rex preparePour lister les tâches disponibles dans un Rexfile :
wks01 database# rex -TPréparer le dépôt et ajouter des externals (site web)
Changez vers le répertoire du projet website et créez un Rexfile :
wks01 database# cd ../website
wks01 website# touch RexfileDéfinissez également les externals :
wks01 website# svn propedit svn:externals .Ajoutez les mêmes lignes que pour la base de données :
lib/Common http://svn01/svn/common
lib/Service http://svn01/svn/service
Puis mettez à jour et validez :
wks01 database# svn up
wks01 database# svn ci -m "added external repositories"Exemple de Rexfile pour le serveur web
# Rexfile
set user => "root";
set password => "test";
include qw/
Common::NTP
Service::Apache
/;
set group => srvweb => "web01";
task "prepare", group => "srvweb", sub {
# exécute la tâche commune NTP "prepare"
Common::NTP::prepare();
# installe apache
Service::Apache::prepare();
# configure apache
Service::Apache::configure({
timeout => 60,
});
# redémarre apache
service apache2 => "restart";
};
Ajoutez et validez le Rexfile dans le dépôt :
wks01 website# svn add Rexfile
wks01 website# svn ci -m "initial Rexfile"Pour préparer le serveur web :
wks01 website# rex prepareTâche de déploiement d’une application web
Après avoir configuré la base de données et le serveur web, ajoutez une tâche “deploy” pour transférer et extraire un archive fournie par l’équipe de développement :
task "deploy", group => "srvweb", sub {
upload "your-web-application.tar.gz", "/tmp";
extract "/tmp/your-web-application.tar.gz",
owner => "www-data",
group => "www-data",
to => "/var/www";
rm "/tmp/your-web-application.tar.gz";
};
Cette tâche illustre un flux simple : upload → extraction → nettoyage. Adaptez les chemins, propriétaires et permissions selon vos besoins.
Checklists par rôle
Administrateur base de données (avant rex prepare) :
- Vérifier accès SSH/credentiels root ou clé.
- Vérifier espace disque /var/lib/mysql.
- Sauvegarder bases existantes si migration.
- Valider paramètres de pare-feu (ports 3306 si nécessaire).
Administrateur système web (avant rex prepare) :
- Vérifier nom d’hôte et résolution DNS.
- Préparer certificats TLS si HTTPS requis.
- Vérifier utilisateur www-data et permissions sur /var/www.
- Vérifier modules Apache requis.
Déploiement applicatif :
- Valider archive fournie (checksum / signature).
- Déterminer stratégie de versioning / déploiement atomique.
- Plan de rollback disponible.
Critères de validation (Критерии приёмки)
- La tâche “rex prepare” s’exécute sans erreur sur chaque groupe.
- Le service MySQL ou Apache est actif et écoute sur le port attendu.
- Les fichiers de configuration attendus ont été écrits et possèdent les bonnes permissions.
- L’application est accessible (HTTP 200) après la tâche “deploy” si applicable.
Tests rapides :
- Vérifier service : systemctl status mysql / systemctl status apache2
- Tester connexion MySQL local : mysql -u root -p -e “SHOW DATABASES;”
- Tester HTTP : curl -I http://web01/ | head -n 1
Mini-méthodologie de déploiement
- Préparer les Rexfiles et stocker les modules réutilisables dans svn:externals.
- Exécuter rex prepare en environnement de staging.
- Valider les critères de validation automatiques et manuels.
- Déployer l’application via la tâche “deploy”.
- Monitorer et exécuter rollback si nécessaire.
Alternatives et extensions
- Utiliser Git au lieu de Subversion pour les externals (git submodule/git subtree) si votre organisation migre vers Git.
- Remplacer les tâches d’installation par des conteneurs (Docker) et orchestrer avec Kubernetes si vous préférez une approche conteneurisée.
- Ajouter vérifications idempotentes et tests intégrés (unitaires d’infrastructure) pour renforcer la fiabilité.
Rollback et bonnes pratiques
- Toujours conserver une sauvegarde récente des données (dump MySQL) avant modification majeure.
- Versionner la configuration et taguer les commits associés aux déploiements.
- Exécuter les tâches sur un environnement de test similaire à la production avant tout déploiement en prod.
Mini-cheat sheet (rappels utiles)
- Lister les tâches : rex -T
- Exécuter une tâche : rex
- Mettre à jour externals SVN : svn up
- Valider changements : svn ci -m “message”
Glossaire (1 ligne par terme)
- Rexfile : script Perl utilisé par Rex pour définir des tâches d’automatisation.
- svn:externals : propriété Subversion permettant d’inclure d’autres dépôts/dossiers.
- Task : fonction ou action définie dans un Rexfile exécutée sur les hôtes cibles.
Résumé
Ce guide montre comment préparer des Rexfiles pour installer et configurer MySQL et Apache, comment partager du code via svn:externals et comment définir des tâches de préparation et de déploiement. Utilisez les checklists, critères et la mini-méthodologie pour exécuter des déploiements reproductibles.
Notes finales : adaptez toujours les paramètres (utilisateurs, mots de passe, hôtes) et testez dans un environnement isolé avant d’appliquer en production.
Matériaux similaires
Installer et utiliser Podman sur Debian 11
Guide pratique : apt-pinning sur Debian
OptiScaler : activer FSR 4 dans n'importe quel jeu
Dansguardian + Squid NTLM sur Debian Etch
Corriger l'erreur d'installation Android sur SD