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
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=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.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
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.