260 lines
10 KiB
Markdown
260 lines
10 KiB
Markdown
---
|
|
categories: web
|
|
title: Howto Aegir
|
|
...
|
|
|
|
* Documentation : <https://docs.aegirproject.org/>
|
|
|
|
[Aegir](https://www.aegirproject.org/) est un système de gestion et de déploiement de sites web [Drupal](HowtoDrupal) en mode [multisites](https://www.drupal.org/docs/multisite-drupal).
|
|
On peut par exemple déployer du Drupal 8 ou 9 en local ou sur des serveurs distants.
|
|
|
|
Code source : <https://github.com/aegir-project>
|
|
|
|
Aegir est composé des éléménts suivants :
|
|
|
|
* [hostmaster](https://www.drupal.org/project/hostmaster) : interface web en Drupal 7 : <https://www.drupal.org/project/hostmaster>
|
|
* [provision](https://www.drupal.org/project/Provision) : suite de commandes [drush](HowtoDrupal#drush) pour installer des sites Drupal (cf `/usr/share/drush/commands/provision/`
|
|
* [hosting](https://www.drupal.org/project/hosting) : modules Drupal pour permettre l'UI de l'interface web d'Aegir
|
|
* [eldir](https://www.drupal.org/project/eldir) : thème Drupal pour Aegir
|
|
|
|
## Installation
|
|
|
|
Pré-requis : Debian 10 avec PHP 7.3 (par défaut sous Debian 10)
|
|
|
|
Préparer un service [MySQL](HowtoMySQL) local avec un identifiant "admin" afin de permettre au paquet Debian `aegir3` de créer une base et un utilisateur.
|
|
|
|
~~~
|
|
# echo "deb https://debian.aegirproject.org stable main" > /etc/apt/sources.list.d/aegir.list
|
|
# wget http://debian.aegirproject.org/key.asc -O /etc/apt/trusted.gpg.d/aegir.asc
|
|
|
|
# apt update && apt install aegir3 composer
|
|
|
|
# ls -d /var/aegir/hostmaster-*
|
|
/var/aegir/hostmaster-7.x-3.192
|
|
|
|
# /usr/local/bin/drush version
|
|
Drush Version : 8.1.16
|
|
~~~
|
|
|
|
On peut ensuite activer différents modules via l'interface web d'Aegir : options pour Git, Let's Encrypt, etc.
|
|
|
|
## Utilisation
|
|
|
|
Le principe d'Aegir est de définir des plateformes associés à un serveur web (ou plusieurs, cf plus bas le [mode multi-serveurs](HowtoAegir#multi-serveurs)).
|
|
Un usage typique est de définir une plateforme de "PROD" et une plateforme de "PREPROD" associés à des serveurs web différents.
|
|
Une plateforme déploie le code Drupal sur le serveur associé, cela peut par exemple être un Drupal 8.8.5 ou en Drupal 9.4.5.
|
|
On peut ensuite créer des sites associé à une plateforme, cela s'appuye sur la fonctionnalité [multisites](https://www.drupal.org/docs/multisite-drupal) de Drupal.
|
|
|
|
### Servers
|
|
|
|
Par défaut il y a le serveur web local (type `Apache`) et un serveur de base de données local (type `MySQL`).
|
|
|
|
### Platforms
|
|
|
|
Ajouter une plateforme est l'étape la plus critique, car c'est là qu'Aegir va déployer le code source de Drupal.
|
|
Plusieurs [stratégies de déploiement](https://docs.aegirproject.org/usage/advanced/deployment/) sont possibles : récupérer le code de Drupal via Git, déploiement via Drush, etc.
|
|
Attention, à cette étape Aegir va scanner la présence d'un fichier `composer.lock` et lancera un `composer install` si il est présent… et ne se déploiera pas en cas d'erreur !
|
|
|
|
### Sites
|
|
|
|
Il faut définir un nom de domaine et l'associer à une plateforme.
|
|
On peut aussi : choisir un language pour le site, un profil (minimal, standard, personnalisé, etc.) et serveur de base de données.
|
|
|
|
|
|
## Plomberie
|
|
|
|
Lorsque que l'on définit des serveurs, plateformes, sites, cela va créer des fichiers de configuration stockés dans `/var/aegir/.drush/` :
|
|
|
|
~~~
|
|
# ls /var/aegir/.drush/
|
|
|
|
hm.alias.drushrc.php
|
|
hostmaster.alias.drushrc.php
|
|
server_localhost.alias.drushrc.php
|
|
server_master.alias.drushrc.php
|
|
platform_hostmaster.alias.drushrc.php
|
|
platform_PROD.alias.drushrc.php
|
|
platform_PREPROD.alias.drushrc.php
|
|
FQDN1.alias.drushrc.php
|
|
FQDN2.alias.drushrc.php
|
|
FQDN3.alias.drushrc.php
|
|
...
|
|
~~~
|
|
|
|
Cela va également écrire dans la base de données MySQL propre à Aegir.
|
|
|
|
Par exemple pour lister les serveurs :
|
|
|
|
~~~
|
|
MariaDB> select title,service,hosting_service.type,restart_cmd,port,uid,hosting_server.status,created,changed from hosting_server,hosting_service,node where hosting_server.vid=hosting_service.vid and hosting_server.nid=node.nid;
|
|
+-------------+---------+---------+------------------------------------+------+-----+--------+------------+------------+
|
|
| title | service | type | restart_cmd | port | uid | status | created | changed |
|
|
+-------------+---------+---------+------------------------------------+------+-----+--------+------------+------------+
|
|
| foo1 | http | apache | sudo /usr/sbin/apache2ctl graceful | 80 | 1 | 1 | 1663071992 | 1663072005 |
|
|
| foo2 | http | apache | sudo /usr/sbin/apache2ctl graceful | 80 | 1 | 1 | 1663175297 | 1663175299 |
|
|
| foo3 | http | apache | sudo /usr/sbin/apache2ctl graceful | 80 | 1 | 1 | 1663175326 | 1663175327 |
|
|
| 127.0.0.1 | db | mysql | | 3306 | 1 | 1 | 1663071992 | 1663230576 |
|
|
| webcluster | http | cluster | | 0 | 1 | 1 | 1663175362 | 1663230664 |
|
|
~~~
|
|
|
|
## Ligne de commande
|
|
|
|
Grâce aux fichiers de configuration stockés dans `/var/aegir/.drush/` on peut ainsi lancer plein de commandes Drush du type :
|
|
|
|
~~~
|
|
# su - aegir
|
|
|
|
$ drush @hostmaster provision-verify
|
|
$ drush @platform_PREPROD provision-verify --debug
|
|
$ drush @platform_PREPROD provision-delete --debug --force
|
|
$ drush @FQDN1 --backend=2 provision-install
|
|
$ drush @FQDN1 provision-verify --debug
|
|
~~~
|
|
|
|
|
|
## Gestion des Tasks
|
|
|
|
Aegir lance des Tasks pour toutes les actions : installation, suppression, vérification, etc.
|
|
|
|
Pour cela, Aegir s'appuie sur un service `hosting-queued` :
|
|
|
|
~~~
|
|
systemctl status hosting-queued.service
|
|
● hosting-queued.service - Hosting queue daemon
|
|
Loaded: loaded (/lib/systemd/system/hosting-queued.service; enabled; vendor preset: enabled)
|
|
Active: active (running) since Tue 2022-09-13 14:28:45 CEST; 5s ago
|
|
Main PID: 1704 (php)
|
|
Tasks: 3 (limit: 4701)
|
|
Memory: 67.6M
|
|
CGroup: /system.slice/hosting-queued.service
|
|
├─1704 php /usr/local/bin/drush --quiet @hostmaster hosting-queued
|
|
├─1815 sh -c /usr/local/bin/drush --strict= --uri=aegir.example.com --root=/var/aegir/hostmaster-7.x-3.192 hosting-task 13 2>&1
|
|
└─1816 php /usr/local/bin/drush --strict= --uri=aegir.example.com --root=/var/aegir/hostmaster-7.x-3.192 hosting-task 13
|
|
~~~
|
|
|
|
et un cron lancé chaque minute :
|
|
|
|
~~~
|
|
# crontab -u aegir -l
|
|
* * * * * /usr/bin/env php /usr/local/bin/drush '@hostmaster' hosting-dispatch
|
|
~~~
|
|
|
|
qui lancera ensuite des commandes du type `drush --php=/usr/bin/php --php-options= --quiet @hostmaster hosting-queued`
|
|
|
|
En cas de soucis, blocage des Tasks par exemple, on peut déboguer la tâche en récupérant son n° (visible sur l'interface web) :
|
|
|
|
~~~
|
|
# su - aegir
|
|
$ drush @hostmaster hosting-task 42 --debug
|
|
~~~
|
|
|
|
Parfois, lancer une vérification en ligne de commande peut débloquer :
|
|
|
|
~~~
|
|
# su - aegir
|
|
$ drush @FQDN1 provision-verify --debug
|
|
~~~
|
|
|
|
On peut aussi modifier le Cron et ajouter l'option `--debug`.
|
|
|
|
Ou alors vider le cache Drush :
|
|
|
|
~~~
|
|
# su - aegir
|
|
$ drush cache-clear drush
|
|
~~~
|
|
|
|
Par l'interface web on peut accéder à la liste des Tasks via <http://aegir.example.com/admin/content/node/overview> et supprimer une Task (à utiliser avec précaution).
|
|
|
|
Pour d'autres infos, voir <https://community.aegirproject.org/content/administrator/troubleshooting-aegir/>
|
|
|
|
## Multi-serveurs
|
|
|
|
<https://docs.aegirproject.org/usage/servers/clustering/>
|
|
|
|
Nous préconisons d'utiliser la méthode "Web Cluster".
|
|
|
|
Il faut activer le module Aegir "Web Cluster" :
|
|
|
|
~~~
|
|
Enabling Web clusters feature.
|
|
The configuration options have been saved.
|
|
~~~
|
|
|
|
Sur les « noeuds » web :
|
|
|
|
Pré-requis :
|
|
* Debian 11 avec PHP 7.4 (par défaut sous Debian 11)
|
|
* créer un utilisateur "aegir" ainsi : `adduser --home /var/aegir --uid 113 --gid 120 --disabled-password aegir` (même UID/GID que sur le serveur Aegir)
|
|
*
|
|
|
|
Puis il faut installer le paquet `aegir3-cluster-slave` :
|
|
|
|
~~~
|
|
# echo "deb https://debian.aegirproject.org stable main" > /etc/apt/sources.list.d/aegir.list
|
|
# wget http://debian.aegirproject.org/key.asc -O /etc/apt/trusted.gpg.d/aegir.asc
|
|
|
|
# wget http://pub.evolix.net/bullseye/mysql-client_8.0.30-1_all.deb
|
|
# dpkg -i mysql-client_8.0.30-1_all.deb
|
|
|
|
# apt update && apt install aegir3-cluster-slave
|
|
~~~
|
|
|
|
L'installation du paquet `aegir3-cluster-slave` va :
|
|
|
|
* valider la connexion SSH entre l'utilisateur "aegir" depuis le serveur Aegir vers l'utilisateur "aegir" du noeud (avec une clé SSH sans mot de passe)
|
|
* /etc/sudoers.d/aegir
|
|
* Installer Apache / PHP
|
|
|
|
On peut ensuite ajouter des "serveurs" pour chacun des noeuds, puis ajouter un serveur "Web cluster" qui rassemble les noeuds.
|
|
Il faut ensuite ajouter une plateforme associée à ce noeud. Puis l'on devrait pouvoir créer des sites sur cette plateforme « clusterisée ».
|
|
|
|
|
|
## FAQ
|
|
|
|
### Troubleshooting
|
|
|
|
En cas de soucis, on peut tester différentes astuces.
|
|
|
|
Vider le cache Drush :
|
|
|
|
~~~
|
|
# su - aegir
|
|
$ drush cache-clear drush
|
|
~~~
|
|
|
|
Vérifier que les configurations dans `/var/aegir/.drush/` sont conformes à ce que l'on a mis via l'interface web (cela semble parfois boguer).
|
|
|
|
Lancer des commandes à la main, cf [Ligne de commande](HowtoAegir#ligne-de-commande)
|
|
|
|
Voir <https://community.aegirproject.org/content/administrator/troubleshooting-aegir/>
|
|
|
|
|
|
### Skipping unset context property: git_repository_path
|
|
|
|
Cela signifie qu'il manque cette option dans le fichier associé `/var/aegir/.drush/XXX.drushrc.php`.
|
|
Un contournement est d'ajouter cette option à la main :
|
|
|
|
~~~
|
|
./platform_PREPROD42.alias.drushrc.php: 'git_repository_path' => NULL,
|
|
./platform_PREPROD43.alias.drushrc.php: 'git_repository_path' => '/var/aegir/platforms/platform_PREPROD43',
|
|
~~~
|
|
|
|
Si cette option est manquante, vous aurez peut-être l'erreur :
|
|
|
|
~~~
|
|
Cloning `GIT_REPO:REPO.git` to ``
|
|
Running `git clone --recursive --depth 1 --no-progress --quiet --branch 'dev' 'GIT_REPO:REPO.git' ''`
|
|
Command failed. The specific errors follow:
|
|
fatal: could not create work tree dir '': No such file or directory
|
|
~~~
|
|
|
|
### Données non présentes dans `/var/aegir/plateforms/PREPROD/`
|
|
|
|
Vérifier que les chemins sont corrects dans le fichier associé `/var/aegir/.drush/XXX.drushrc.php`
|
|
|
|
### Erreurs composer
|
|
|
|
Supprimer les fichiers `composer.lock` et `composer.json` dans `/var/aegir/plateforms/PREPROD/`
|
|
|