Installer Semaphore avec Docker Compose en 2 minutes

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 :

GitHub - ansible-semaphore/semaphore: Modern UI for Ansible
Modern UI for Ansible. Contribute to ansible-semaphore/semaphore development by creating an account on GitHub.

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 !