Déploiement de Semaphore avec Docker Compose¶
Ansible en ligne de commande, c'est parfait tant qu'on est seul aux commandes. Dès qu'on veut partager l'exécution d'un playbook, garder une trace de qui a lancé quoi, ou déclencher un déploiement sans donner un accès SSH à tout le monde, il faut une interface. Semaphore est cette interface — légère, sans la lourdeur d'AWX/Tower, mais avec l'essentiel : lancer vos playbooks depuis le navigateur, planifier, historiser, et cloisonner les accès.
Prérequis¶
- Docker et Docker Compose installés — voir Installation Docker
- Connexion internet pour récupérer les images Docker
- Le port
3000doit ê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=utilisateur
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.cfgpour 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
En résumé¶
Semaphore, c'est le juste milieu : plus qu'un simple ansible-playbook lancé à la main, mais sans la machinerie d'une plateforme d'entreprise. Pour un homelab ou une petite équipe, c'est souvent le point d'équilibre parfait. Le seul geste à ne jamais bâcler : la clé de chiffrement (voir l'encart plus haut) — c'est elle qui protège les secrets que Semaphore va garder pour vous.