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


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: "gs72mPntFATGJs9qK0pQ0rKtfidlexiMjYCH9gWKhTU="
      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 : la variable SEMAPHORE_ACCESS_KEY_ENCRYPTION sécurise les clés stockées. Pour en générer une nouvelle :

head -c 32 /dev/urandom | base64
* 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.