---
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é
