Initial vault setup

This commit is contained in:
2026-06-09 18:40:21 +02:00
commit bda02d587f
3692 changed files with 402457 additions and 0 deletions
@@ -0,0 +1,158 @@
---
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é