[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).
* [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
Pré-requis : Debian 10 ou Debian 11 avec PHP par défaut, on passera en PHP 8.2 dans un second temps (pour Debian 12 voir [installation sous Debian 12](#installation-sous-debian-12))
Préparer un service [MySQL](HowtoMySQL) permettant ainsi au package Debian `aegir3-hostmaster` va notamment créer un utilisateur MySQL `aegir_root`.
Si MySQL n'est pas utilisable sans mot de passe via l'utilisateur Unix `root`, le package `aegir3-hostmaster` va vous demander un identifiant MySQL "admin".
> Note 1 : le dépôt APT Aegir n'existant plus, nous hébergeons les vieux paquets Aegir récupérés via [Koumbit (merci!!)](http://debian.koumbit.net/debian/pool/main/a/aegir3-provision/)
> Note 2 : sur certaines installations, il faut relancer une 2e fois l'installation ou lancer un hack en parallèle de l'installation du type `screen -S aegir-dpkg-workaround -dm bash -c "while true; do systemctl daemon-reload; done"` puis `pkill -9 screen && screen -wipe` à la fin
On peut ensuite activer différents modules via l'interface web d'Aegir : options pour Git, Let's Encrypt, etc.
Si l'on utilise pas "Composer" pour déployer, nous conseillons de désactiver le module "Aegir Platform Composer" (sans cela on constate que le code Drupal n'était pas déployé sur les infra multi-serveurs).
Il est intéressant d'installer Aegir sous Debian 12 afin d'avoir un système qui soit [supporté au moins jusqu'en 2026](https://docs.evolix.org/ServeurDedie/versionsOS#debian-12-bookworm).
La procédure d'installation est similaire à ce qui est expliqué au-dessus, sauf que l'installation va échouer ainsi :
~~~
Enabling hosting-queued daemon
Could not find the alias @hostmaster [error]
~~~
En effet, Drush 8.4.8 ne fonctionne pas bien avec PHP 8.2, il faut donc [installer Drush 8.4.12](#installation-drush-8.4.12) et relancer :
~~~
# apt install aegir3
~~~
puis appliquer [les patchs pour PHP 8](#patches-pour-php-8).
### Passer en PHP 8.2 pour Drupal 9.5 / 10
Pour la compatibilité avec Drupal 9.5 / 10, nous passons PHP 8.2 via Sury (PHP 8.1 fonctionne également) :
Commençons par appliquer le patch de l'[issue Provision 3374479](https://www.drupal.org/project/provision/issues/3374479) pour éviter l'affichage d'erreurs *Deprecated* :
Sinon au moment de la création d'une nouvelle plateforme vous obtiendrez :
~~~
'PDOException', '!message' => 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens: SELECT n.title AS name FROM {hosting_platform} AS h INNER JOIN {node} AS n ON n.nid = h.nid WHERE publish_path = !publish_path AND h.status >= !h.status; Array ( [!publish_path] => /var/aegir/platforms/PLATFORM [!h.status] => 0 ) ', '%function' => 'hosting_platform_path_exists()', '%file' => '/var/aegir/hostmaster-7.x-3.192+nmu1/profiles/hostmaster/modules/aegir/hosting/platform/hosting_platform.module', '%line' => 669, 'severity_level' => 3, )
Il faut aussi appliquer ce patch [drush-8-symfony-console-compat.patch](https://www.drupal.org/files/issues/2023-11-28/drush-8-symfony-console-compat.patch) et en partie ce patch [3353492-symfony-console-4-update_1.patch](https://www.drupal.org/files/issues/2023-12-11/3353492-symfony-console-4-update_1.patch) sur tous les fichiers Symfony (TODO: à relister) de l'[issue Provision 3353492](https://www.drupal.org/project/provision/issues/3353492) :
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.
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;
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).
* WIP : Debian 11 avec PHP 8.2 via Sury ou Debian 12
* créer un utilisateur "aegir" avec les mêmes UID/GID que sur le serveur Aegir, par exemple `addgroup --gid 513 aegir && adduser --home /var/aegir --uid 513 --gid 513 --disabled-password aegir`
* 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)
### PROVISION_DB_CONNECT_FAIL : Dummy connection failed to fail...Can't connect to MySQL server...(115)
Si vous utilisez un proxy pour accéder à MySQL, vous pouvez avoir une erreur de ce type lors de l'installation d'un site :
~~~
PROVISION_DB_CONNECT_FAIL : Dummy connection failed to fail. Either your MySQL permissions are too lax, or the response was not understood. See http://is.gd/Y6i4FO for more information. ERROR 2002 (HY000): Can't connect to MySQL server on 'proxy-mysql' (115)
~~~
Il s'agit d'un code de retour système 115 `Operation now in progress` (cf commande `perror 115`) qui devrait être ignoré par Aegir.
Nous [proposons le patch](https://github.com/aegir-project/provision/issues/41) suivant à intégrer au fichier `/usr/share/drush/commands/provision/db/Provision/Service/db/mysql.php` :
Si vous utilisez une branche Git pour récupérer le code de votre Plateforme, Aegir plante si il y un `/` dans le nom de la branche, par exemple `foo/bar`.
### ERROR 1133 (28000) at line 1: Can't find any matching row in the user table
Lors de l'installation d'Aegir, si vous obtenez cette erreur, c'est probablement que l'utilisateur SQL `aegir_root` est mal désinstallé :
~~~
mysql> DELETE FROM mysql.user where User='aegir_root';
mysql> FLUSH PRIVILEGES;
~~~
### Could not find the alias @hostmaster
Cela veut dire que l'installation du *Drupal hostmaster* n'a pas été au bout, et notamment que le fichier `/var/aegir/.drush/hostmaster.alias.drushrc.php` n'existe pas.
Pour comprendre où l'installation bloque, relancer l'installation en ligne de commande en mode *debug* :
[BOA (Barracuda, Octopus and Aegir)](https://github.com/omega8cc/boa) est un système d'installation et de gestion de sites Drupal.
Il inclut notamment Aegir, et il est intéressant de voir les particularités de son installation.
BOA installe les modules Drush suivants :
* clean_missing_modules
* drupalgeddon
* drush_ecl
* registry_rebuild
* safe_cache_form_clear
* utf8mb4_convert
* provision_boost
* security_review
BOA fournit les fichiers suivants pour Drupal 10 que l'on peut mettre dans `/usr/share/drush/commands/core/dupal/` :
* batch_10.inc
* cache_10.inc
* environment_10.inc
* site_install_10.inc
* update_10.inc
### Drush 12 pour Drupal 10
Cette [issue du projet drush-ops](https://github.com/drush-ops/drush/issues/5741) semble indiquer qu'il est possible de faire tourner Drush 8 et Drush 12 en même temps, même si cela ne semble pas nécessaire.
Si vous n'utilisez pas du tout Composer à l'installation d'un site sur le serveur, vous éviterez un warning en créant le fichier `/var/aegir/.drush/local.drushrc.php` ainsi :