Skip to content

Déploiement de Semaphore avec Docker Compose

Semaphore est une interface web légère qui permet de gérer et exécuter vos Ansible playbooks facilement.


Prérequis

  • Docker et Docker Compose installés — voir Installation Docker
  • Connexion internet pour récupérer les images Docker
  • Le port 3000 doit être disponible sur votre machine

1⃣ Configuration

Le fichier docker-compose.yml déploie deux services principaux :

Service Description
PostgreSQL Base de données stockant projets, tâches et utilisateurs de Semaphore
Semaphore Interface web pour Ansible accessible via le port 3000

Volumes de persistance

  • semaphore-postgres : volume Docker pour les données PostgreSQL afin d’assurer la persistance.

2⃣ Variables d’environnement

Stockez les paramètres sensibles et personnalisables dans un fichier .env :

SEMAPHORE_USER=ukakiko
SEMAPHORE_PASS=PASSWORD
SEMAPHORE_ADMIN_EMAIL=admin@example.com
SEMAPHORE_DB=semaphore

Ces variables sont injectées dans le fichier docker-compose.yml pour séparer configuration et déploiement.


3⃣ Exemple de fichier docker-compose.yml

version: '3'

services:
  postgres:
    container_name: semaphore_db
    image: postgres:14
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${SEMAPHORE_USER}
      POSTGRES_PASSWORD: ${SEMAPHORE_PASS}
      POSTGRES_DB: ${SEMAPHORE_DB}
    volumes:
      - semaphore-postgres:/var/lib/postgresql/data

  semaphore:
    container_name: semaphore
    image: semaphoreui/semaphore:latest
    restart: unless-stopped
    depends_on:
      - postgres
    ports:
      - "3000:3000"
    environment:
      SEMAPHORE_DB_USER: ${SEMAPHORE_USER}
      SEMAPHORE_DB_PASS: ${SEMAPHORE_PASS}
      SEMAPHORE_DB_HOST: postgres
      SEMAPHORE_DB_PORT: 5432
      SEMAPHORE_DB_DIALECT: postgres
      SEMAPHORE_DB: ${SEMAPHORE_DB}
      SEMAPHORE_ADMIN: ${SEMAPHORE_USER}
      SEMAPHORE_ADMIN_NAME: ${SEMAPHORE_USER}
      SEMAPHORE_ADMIN_PASSWORD: ${SEMAPHORE_PASS}
      SEMAPHORE_ADMIN_EMAIL: ${SEMAPHORE_ADMIN_EMAIL}
      SEMAPHORE_ACCESS_KEY_ENCRYPTION: "<générer avec : head -c 32 /dev/urandom | base64>"
      TZ: UTC

volumes:
  semaphore-postgres:

4⃣ Lancement du projet

docker-compose up -d
  • Cette commande télécharge les images, crée les volumes et démarre les services en arrière-plan.

5⃣ Accès à l’interface web

Ouvrez votre navigateur à :

http://localhost:3000

Connectez-vous avec les identifiants définis dans le fichier .env.


6⃣ Gestion des services

Action Commande
Vérifier l’état docker-compose ps
Afficher les logs docker-compose logs -f
Redémarrer les services docker-compose restart
Arrêter et supprimer docker-compose down

7⃣ Sécurité

Clé de chiffrement obligatoire

La variable SEMAPHORE_ACCESS_KEY_ENCRYPTION doit être unique par installation. Ne jamais utiliser une valeur copiée depuis une documentation ou un exemple — elle chiffre les secrets stockés dans Semaphore (clés SSH, tokens, mots de passe). Générer une clé spécifique avant le premier démarrage :

head -c 32 /dev/urandom | base64

Conserver cette valeur en lieu sûr : si elle change après le démarrage, les secrets existants ne pourront plus être déchiffrés.

  • Changez le mot de passe admin à la première connexion.
  • Exposez le port 3000 uniquement localement si Semaphore ne doit pas être accessible depuis l’extérieur.

8⃣ Notes complémentaires

  • Pour utiliser MySQL au lieu de PostgreSQL, adaptez la configuration.
  • Vous pouvez monter un fichier ansible.cfg pour personnaliser Ansible.
  • Semaphore n’a pas de support natif pour SSO, mais propose une intégration LDAP.

9⃣ Exemple d’arborescence du projet

/opt/docker-compose/Semaphore/
├── docker-compose.yml
├── .env
├── README.md

Conclusion

Cette configuration vous permet de déployer rapidement Semaphore, un outil simple et efficace pour orchestrer vos déploiements Ansible avec persistance des données et configuration claire.