--- title: Semaphore UI created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, automation, ansible, ci-cd, devops, ui, go] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Automation, https://github.com/semaphoreui/semaphore] --- # 🖥️ Semaphore UI > **L'interface web moderne pour Ansible** — exécutez, planifiez et supervisez vos playbooks depuis une UI claire, sans exposer la CLI à toute l'équipe. L'**anti-AWX** : un binaire Go unique qui démarre en 5 secondes. ## 📋 Informations Générales | Champ | Valeur | | :--- | :--- | | **Site web** | [semaphoreui.com](https://semaphoreui.com/) | | **GitHub** | [semaphoreui/semaphore](https://github.com/semaphoreui/semaphore) | | **License** | MIT | | **Langage** | Go (backend) + Vue.js (UI) | | **Étoiles GitHub** | 1 267 ⭐ (cette org) / 11k+ sur l'écosystème | | **Dernière MAJ** | 2026-06-06 | | **Catégorie** | [[cat-automation\|Automation]] | ## 📝 Description **Semaphore UI** (aussi appelé *Ansible Semaphore*) répond à une frustration classique des équipes qui adoptent [[app-ansible|Ansible]] : « comment permettre à l'équipe de lancer un playbook de prod depuis une interface, **avec logs en temps réel, secrets chiffrés, audit et RBAC**, sans donner un accès SSH au serveur de production ? ». Réponse historique : **Ansible Tower** (propriétaire Red Hat, ~3 000 $/an) ou **AWX** (la version open source, mais qui pèse 5 Go de RAM, 6 conteneurs Kubernetes, PostGreSQL, Redis…). Réponse légère : **Semaphore UI**. Le projet est né en 2015 en Python, puis **réécrit en Go en 2022** par la communauté et adopté dans l'écosystème Red Hat comme alternative crédible à AWX pour les petites équipes (2-50 personnes). Côté technique, c'est un **binaire Go unique** qui embarque : le serveur HTTP, l'UI Vue.js, l'ORM, le scheduler cron et l'intégration Ansible. Résultat : **~150 Mo de RAM** au repos, démarrage en moins de 5 secondes, configuration via un TOML/YAML unique. **Fonctionnalités principales** : - ✅ **Inventaires statiques** (YAML/JSON) **et dynamiques** (AWS EC2, GCP, OpenStack, DigitalOcean) - ✅ **Credentials Vault** : clés SSH, mots de passe, tokens API, stockés **chiffrés en DB** (AES-256) - ✅ **Environnements multiples** : dev / staging / prod avec leurs propres variables - ✅ **Tâches planifiées** (cron) : lancer `backup.yml` tous les jours à 03h15 - ✅ **Tâches manuelles** : exécution à la demande avec **logs live** - ✅ **Templates de tâches** : pré-configurations réutilisables par toute l'équipe - ✅ **Notifications** : email, Slack, webhook sur succès/échec - ✅ **API REST** complète (intégrable avec GitLab CI, Gitea Actions, n8n…) - ✅ **RBAC** : rôles `admin` / `task runner` / `viewer` **Vs AWX** : AWX brille pour des équipes de 50+ admins avec des besoins complexes de conformité. Semaphore brille pour des équipes de 2-10 qui veulent juste **une UI simple qui marche**. Pour un homelab, Semaphore est largement suffisant. ## 🚀 Installation ### Prérequis - Un hôte Linux/macOS ou un conteneur Docker - Ansible accessible depuis l'hôte (binaire ou via conteneur dédié) - Une base de données : **SQLite** (par défaut, parfait pour démarrer), MySQL ou PostgreSQL ### Option 1 : Docker Compose (recommandé) ```yaml # docker-compose.yml services: semaphore-db: image: mysql:8.0 container_name: semaphore-db restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: change-me-root MYSQL_DATABASE: semaphore MYSQL_USER: semaphore MYSQL_PASSWORD: change-me-db volumes: - semaphore-db:/var/lib/mysql semaphore: image: semaphoreui/semaphore:latest container_name: semaphore restart: unless-stopped depends_on: - semaphore-db ports: - "3000:3000" environment: SEMAPHORE_DB_DIALECT: mysql SEMAPHORE_DB_HOST: semaphore-db SEMAPHORE_DB_PORT: 3306 SEMAPHORE_DB_USER: semaphore SEMAPHORE_DB_PASSWORD: change-me-db SEMAPHORE_DB_NAME: semaphore SEMAPHORE_LISTEN: 0.0.0.0:3000 SEMAPHORE_ADMIN_USERNAME: admin SEMAPHORE_ADMIN_PASSWORD: change-me-admin SEMAPHORE_ADMIN_EMAIL: admin@example.com SEMAPHORE_ACCESS_KEY_ENCRYPTION: "changez-cette-cle-32-chars-min" volumes: - semaphore-data:/data volumes: semaphore-db: semaphore-data: ``` ### Option 2 : Binaire natif (Linux) ```bash wget https://github.com/semaphoreui/semaphore/releases/latest/download/semaphore_linux_amd64 chmod +x semaphore_linux_amd64 sudo mv semaphore_linux_amd64 /usr/local/bin/semaphore semaphore setup # assistant interactif sudo systemctl enable --now semaphore ``` ## ⚙️ Configuration - **Premier login** : `admin` / mot de passe défini dans `SEMAPHORE_ADMIN_PASSWORD` (**à changer immédiatement**) - **Clés SSH** : menu *Key Store* → ajouter la clé privée qui sera utilisée pour se connecter aux cibles - **Inventaires** : créer un inventaire statique (YAML/JSON) ou pointer vers un script dynamique - **Repos de playbooks** : pointer vers un dépôt Git (HTTPS ou SSH), choisir la branche - **Credentials Vault** : chiffrés en base avec la **master key** `SEMAPHORE_ACCESS_KEY_ENCRYPTION` — **sauvegarder impérativement** - **Schedules** : cron avec timezone explicite (ex. `TZ=Europe/Paris`) - **Notifications** : configurer Slack / email / webhook pour les résultats d'exécution ## 🔗 Alternatives ### Open Source - **AWX** — version officielle Red Hat, puissante mais lourde (K8s requis, 5 Go RAM) - **Rundeck** — [[app-rundeck|plus généraliste]], gère aussi des jobs non-Ansible - **Jenkins + Ansible plugin** — l'ancienne école, orienté pipelines - **n8n + Ansible CLI** — workflow no-code qui appelle Ansible via SSH - **StackStorm** — orienté "event-driven automation" (plus complexe) ### Propriétaires (ce que Semaphore remplace) - **Red Hat Ansible Automation Platform** — 14 000 $/an/100 nœuds - **Ansible Tower (legacy)** — maintenant absorbé dans AAP - **Puppet Enterprise Console** — équivalent pour Puppet - **SaltStack Enterprise** — équivalent pour Salt - **CloudBees Flow** — orchestrateur de pipelines CI/CD ## 🔒 Sécurité - ⚠️ **Changer `SEMAPHORE_ADMIN_PASSWORD` et `SEMAPHORE_ACCESS_KEY_ENCRYPTION` immédiatement** après l'install - ⚠️ **Sauvegarder la master key** : si elle est perdue, **tous les credentials Vault sont irrécupérables** - **Mettre Semaphore derrière un reverse proxy** (Traefik, Caddy, Nginx) avec TLS obligatoire - Activer **2FA** (TOTP) sur tous les comptes utilisateurs - **Restriction IP** : Semaphore peut tout faire sur les cibles (root via `become: yes`) — ne pas exposer publiquement - **Audit** : exporter les logs vers un SIEM (Loki, Graylog) pour analyse - **Sauvegardes** : automatiser le dump MySQL + le `semaphore-data` (qui contient la master key) ## 📚 Ressources - [Site officiel](https://semaphoreui.com/) - [Dépôt GitHub](https://github.com/semaphoreui/semaphore) - [Documentation](https://docs.semaphoreui.com/) - [Démo en ligne](https://demo.semaphoreui.com/) (login: `demo` / `demo`) - [Communauté Reddit](https://www.reddit.com/r/ansible/) - [Awesome Ansible](https://github.com/awesome-ansible/awesome-ansible) ## 🔗 Pages Liées - [[cat-automation]] — Catégorie Automation - [[app-ansible]] — Le moteur que Semaphore pilote - [[app-rundeck]] — Orchestrateur de jobs (alternative généraliste) - [[cat-deployment]] — Catégorie Déploiement - [[recettes-docker-compose]] — Templates Docker - [[securisation-home-lab]] — Sécurité