Docker Compose

Installer AnsibleForms, son RTE et MySQL ensemble avec docker-compose ou podman-compose

  1. Prérequis
  2. Choisir un emplacement d’installation
  3. Cloner le projet docker-compose
  4. Définir les bonnes permissions
  5. Installer un moteur de conteneurs
  6. Personnaliser
  7. Démarrer le projet docker-compose
  8. Tester l’application
  9. Structure des fichiers

Le projet docker-compose fait tourner trois conteneurs : MySQL, l’application AnsibleForms et le RTE (runtime environment) qui exécute les playbooks. Il contient leurs paramètres, des formulaires et des playbooks d’exemple, la seule autre exigence est donc Docker ou Podman avec son outil compose.

L’installateur télécharge ce projet, remplit ses paramètres et ses secrets, et le démarre en une seule commande. Cette page le met en place à la main.


Prérequis

Avant de commencer, il vous faut :

  • Une machine Linux : n’importe quelle distribution, avec un CPU et une mémoire modestes
  • Un accès à GitHub : pour télécharger ou cloner le projet docker-compose depuis GitHub
  • Docker ou Podman : un moteur de conteneurs, installé plus bas
  • Un outil compose : Docker Compose ou podman-compose, pour démarrer les trois conteneurs à partir de quelques fichiers de configuration

VIDÉO : Comment installer AnsibleForms


Choisir un emplacement d’installation

Créez un dossier pour le projet ; les exemples utilisent /srv/apps :

sudo mkdir /srv/apps
cd /srv/apps

Cloner le projet docker-compose

Installez Git :

sudo apt-get install -y git

Clonez ensuite le projet docker-compose dans ce dossier :

sudo git clone https://github.com/ansibleforms/docker.git ansibleforms-docker
cd ansibleforms-docker

Définir les bonnes permissions

L’application et le RTE tournent sous l’utilisateur node (uid 1000), donnez donc le dossier data à cet utilisateur :

sudo chown -R 1000:1000 ./data

Si vous venez de la 6, dont le conteneur tournait en root, lancez le même chown une fois avant de démarrer la 7. MySQL reprend son propre dossier à son démarrage.


Installer un moteur de conteneurs

Installez Docker ou Podman, chacun avec son outil compose :

Installez Docker Engine avec le plugin Compose depuis le dépôt de Docker (voir les manuels d’installation de Docker) :

# Docker's own apt repository
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
  https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Faites ensuite en sorte que les noms se résolvent dans les conteneurs, et démarrez Docker comme service :

sudo mkdir -p /etc/docker
echo "{\"dns-opts\":[\"ndots:15\"]}" | sudo tee /etc/docker/daemon.json
sudo systemctl enable --now docker

Personnaliser

Passez en revue les variables des fichiers .env et docker-compose.yml, et changez tous les mots de passe : MYSQLDB_ROOT_PASSWORD, MYSQLDB_PASSWORD, ADMIN_PASSWORD et RTE_TOKEN. En savoir plus sur les variables d’environnement

L’application se connecte à MySQL en tant que ansibleforms (MYSQLDB_USER), avec tous les droits sur le schéma AnsibleForms et aucun ailleurs ; root ne sert qu’à MySQL lui-même. MySQL ne crée cet utilisateur qu’à son premier démarrage : une installation qui se connectait jusqu’ici en root le crée une fois, comme le montre le README du projet.

Le RTE n’est pas publié sur l’hôte. Depuis la 7.3.0, l’application l’appelle sur http://rte:8000 avec RTE_TOKEN et garde un WebSocket ouvert (RTE_MODE=inbound, voir Modes) : le RTE ne reçoit aucun paramètre de base de données ni le .env, seulement son jeton et quelques paramètres à lui dans docker-compose.yml. Le seed de configuration data/seed.yaml déclare un identifiant RTE avec le jeton et cette adresse, et le runner par défaut rte, en mode entrant, qui s’authentifie avec. Le RTE exécute les playbooks depuis le même dossier data (RTE_FILES=local). Quand vos playbooks ont besoin de plus de collections ou de bibliothèques Python, construisez votre propre RTE et faites pointer le service rte dessus (voir Construire votre propre RTE).


Démarrer le projet docker-compose

Démarrez les trois conteneurs en arrière-plan. L’application attend que MySQL soit en bonne santé, puis appelle le RTE :

sudo docker compose up -d
# with the older standalone tool : sudo docker-compose up -d

Tester l’application

Une fois les conteneurs démarrés, ouvrez AnsibleForms dans un navigateur :

  • Ouvrez https://your_ip (port 443, voir WEBAPP_LOCAL_PORT dans le fichier .env)
  • Connectez-vous en tant que admin avec le ADMIN_PASSWORD du fichier .env ; tant que c’est encore la valeur par défaut AnsibleForms!123, choisissez un nouveau mot de passe
  • Vérifiez sous Connexions > Runners que le RTE est listé comme rte, le runner par défaut, et que sa page affiche sa Connexion comme Connecté
  • Étapes suivantes :
    • Créez des formulaires en ajoutant des fichiers YAML au dossier data/forms/ ou en utilisant le concepteur intégré
    • Ajoutez vos playbooks au dossier data/playbooks/
    • Ajoutez une connexion LDAP
    • Ajoutez des utilisateurs et des groupes
    • Ajoutez des runners pour les formulaires de modèle : AWX, AAP ou Ascender, Semaphore, Rundeck ou Jenkins
    • Ajoutez des identifiants pour les connexions externes, comme d’autres serveurs MySQL ou des API REST, ou à transmettre aux playbooks Ansible
    • Connectez des dépôts Git et choisissez si vos formulaires et/ou vos playbooks se synchronisent avec un dépôt

Structure des fichiers

Le projet docker-compose a la structure de dossiers suivante :

.
├── docker-compose.yml # the mysqldb, app and rte containers
├── .env # the settings, see the variables below
└── data # everything that must survive an upgrade, mounted in the app and the rte
    ├── ansible # mounted in the rte only
    │   ├── ansible.cfg # ansible settings
    │   ├── roles # roles you install
    │   └── collections # collections you install
    ├── forms # 1 or more yaml files with forms
    ├── functions # custom javascript functions and jq definitions
    ├── git # .gitconfig for repository connections
    ├── mysql
    │   ├── my.cnf # MySQL settings
    │   └── db # the database files (created at first start)
    ├── playbooks # your ansible playbooks, with sample maintenance playbooks
    ├── repositories # local clones of your git repositories
    ├── ssh # the client sshkey (created at first start)
    ├── config.yaml # categories, roles and constants
    ├── seed.yaml # the config seed: registers the rte as the default runner
    ├── certificates # self-signed certificates (created at first start) - replace with your own
    ├── logs # the logfiles (created at first start)
    ├── backups # database backups (created when needed)
    └── forms_backups # form backups (created when needed)