Installer Semaphore avec Docker Compose en 2 minutes
Vous cherchez une alternative légère à AWX ou encore Ansible Tower afin d'utiliser Ansible avec une interface web ? Semaphore est fait pour vous !
Nous allons voir dans cet article comment installer Semaphore avec Docker Compose en 2 minutes.
Présentation
Semaphore est un outil Open Source codé en GO.
Voici le lien du repository Github contenant son code source :
Il est développé et maintenu par la communauté et permet l'utilisation d'Ansible via une interface web simple et épurée.
Son interface permet de gérer et de visualiser les projets, les inventaires, les tâches, les playbooks Ansible etc..
Les projets peuvent être récupérés avec Git, les inventaires peuvent être dynamiques et il est aussi possible d'orchestrer l'exécution des playbooks.
Semaphore dispose d'une API, ce qui est parfait pour l'exécution de playbooks, l'ajout d'hôtes dans l'inventaire depuis n'importe quelle source etc...
Quasiment toutes les fonctionnalités d'AWX ou encore Ansible Tower sont disponible avec Semaphore, la majeure différence réside dans la légereté de Semaphore et sa facilité de déploiement. C'est d'ailleurs ce que nous allons voir !
Déploiement
Semaphore est compatible avec deux SGBD : MySQL et PostgreSQL. Pour l'exemple, nous allons opter pour PostgreSQL par préférence personnelle.
Commençons justement par le déploiement de notre service de base de données PostgreSQL. Pour ce faire, nous allons créer le fameux fichier docker-compose.yml
et ajoutons ceci :
---
version: '3.9'
services:
postgres:
restart: unless-stopped
image: postgres:14
hostname: postgres
volumes:
- semaphore-postgres:/var/lib/postgresql/data
env_file: .env
Jusqu'ici c'est classique. Nous déclarons un volume Docker managé nommé semaphore-postgres
. Si vous souhaitez vous connecter à la base de données en local, il est possible d'ajouter l'exposition du port 5432 en local uniquement en ajoutant ceci :
ports:
- 127.0.0.1:5432:5432
Passons au déploiement du service Semaphore !
Toujours dans notre docker-compose.yml
, déclarons notre deuxième service comme ceci :
semaphore:
restart: unless-stopped
ports:
- 3000:3000
image: semaphoreui/semaphore:latest
depends_on:
- postgres
env_file: .env
volumes:
semaphore-postgres:
On peut voir que le service Semaphore dépend de la base de données PostgreSQL et que le port 3000 est exposé sur l'hôte.
Les variables d'environnement
Comme vous avez pu le remarquer dans le déploiement des deux conteneurs, j'ai mentionné le fichier .env
. Passons à sa création et ajoutons cela :
# PostgreSQL
POSTGRES_USER=semaphore
POSTGRES_PASSWORD=semaphore
POSTGRES_DB=semaphore
# Semaphore
SEMAPHORE_DB_USER=semaphore
SEMAPHORE_DB_PASS=semaphore
SEMAPHORE_DB_HOST=postgres
SEMAPHORE_DB_PORT=5432
SEMAPHORE_DB_DIALECT=postgres
SEMAPHORE_DB=semaphore
SEMAPHORE_PLAYBOOK_PATH=/tmp/semaphore/
SEMAPHORE_ADMIN_PASSWORD=changeme
SEMAPHORE_ADMIN_NAME=admin
SEMAPHORE_ADMIN_EMAIL=admin@localhost
SEMAPHORE_ADMIN=admin
SEMAPHORE_ACCESS_KEY_ENCRYPTION="psF6Nqh9JeLpXjG93V0rFz4iV51lx+3CsO1a4Ogab6A="
SEMAPHORE_LDAP_ACTIVATED='no' # if you wish to use ldap, set to='yes'
SEMAPHORE_LDAP_HOST=dc01.local.example.com
SEMAPHORE_LDAP_PORT='636'
SEMAPHORE_LDAP_NEEDTLS='yes'
SEMAPHORE_LDAP_DN_BIND='uid=bind_user,cn=users,cn=accounts,dc=local,dc=shiftsystems,dc=net'
SEMAPHORE_LDAP_PASSWORD='ldap_bind_account_password'
SEMAPHORE_LDAP_DN_SEARCH='dc=local,dc=example,dc=com'
SEMAPHORE_LDAP_SEARCH_FILTER="(\u0026(uid=%s)(memberOf=cn=ipausers,cn=groups,cn=accounts,dc=local,dc=example,dc=com))"
Ce sont toutes les variables d'environnement possible avec Semaphore, certaines ne vous seront pas utile si vous n'utilisez pas de LDAP par exemple.
Intéressons-nous à la variable d'environnement SEMAPHORE_ACCESS_KEY_ENCRYPTION
. Celle-ci stocke une clé encodée en base64 permettant le chiffrement en base de données. Pour la générer, il suffit d'exécuter la commande suivante, puis de modifier la valeur de la variable :
head -c32 /dev/urandom | base64
Votre docker-compose.yml
dans sa version finale devrait ressembler à ça :
---
version: '3.9'
services:
postgres:
restart: unless-stopped
ports:
- 127.0.0.1:5432:5432
image: postgres:14
hostname: postgres
volumes:
- semaphore-postgres:/var/lib/postgresql/data
env_file: .env
semaphore:
restart: unless-stopped
ports:
- 3000:3000
image: semaphoreui/semaphore:latest
depends_on:
- postgres
env_file: .env
volumes:
semaphore-postgres:
Il ne reste plus qu'à déployer tout cela avec la commande suivante :
docker-compose up -d
Et accédez ensuite à votre navigateur sur l'URL http://votre-domaine:3000
Les identifiants par défaut sont admin et changeme.
Vous êtes maintenant prêts pour orchestrer vos playbooks Ansible avec Semaphore !