Auto-update blog content from Obsidian: 2026-02-04 15:22:28
All checks were successful
Blog Deployment / Check-Rebuild (push) Successful in 6s
Blog Deployment / Build (push) Has been skipped
Blog Deployment / Deploy-Staging (push) Successful in 9s
Blog Deployment / Test-Staging (push) Successful in 2s
Blog Deployment / Merge (push) Successful in 6s
Blog Deployment / Deploy-Production (push) Successful in 8s
Blog Deployment / Test-Production (push) Successful in 1s
Blog Deployment / Clean (push) Has been skipped
Blog Deployment / Notify (push) Successful in 2s
All checks were successful
Blog Deployment / Check-Rebuild (push) Successful in 6s
Blog Deployment / Build (push) Has been skipped
Blog Deployment / Deploy-Staging (push) Successful in 9s
Blog Deployment / Test-Staging (push) Successful in 2s
Blog Deployment / Merge (push) Successful in 6s
Blog Deployment / Deploy-Production (push) Successful in 8s
Blog Deployment / Test-Production (push) Successful in 1s
Blog Deployment / Clean (push) Has been skipped
Blog Deployment / Notify (push) Successful in 2s
This commit is contained in:
@@ -18,10 +18,86 @@ In my work environment, I'm using the Red Hat Ansible Automation Platform, which
|
||||
---
|
||||
## What is Semaphore UI
|
||||
|
||||
Semaphore UI is a sleek web interface designed to manage and run tasks using tools like Ansible and Terraform, but also Bash, Powershell or even Python scripts.
|
||||
[Semaphore UI](https://semaphoreui.com/docs/) is a sleek web interface designed to manage and run tasks using tools like Ansible and Terraform, but also Bash, Powershell or even Python scripts.
|
||||
|
||||
Initially began as Ansible Semaphore, a web interface created to provide a simple front-end for running solely Ansible playbooks. Over time the community evolved the project into a multi-tool automation control plane.
|
||||
|
||||
It is a self-contained Go application with minimal dependencies capable of using different database backend, such as PostgreSQL, MySQL, or BoltDB.
|
||||
|
||||
## Installation
|
||||
|
||||
Semaphore UI supports many ways to [install](https://semaphoreui.com/docs/category/installation) it: Docker, Kubernetes, package manager or simple binary file.
|
||||
|
||||
I'll use Docker for my installation, you can see how I deploy application currently in this [post]({{< ref "post/16-how-I-deploy-application" >}})
|
||||
|
||||
Here my `docker-compose.yml` file I've configured using PostgreSQL:
|
||||
```yml
|
||||
services:
|
||||
semaphore:
|
||||
image: semaphoreui/semaphore:v2.16.45
|
||||
container_name: semaphore_ui
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
- SEMAPHORE_DB_USER=${POSTGRES_USER}
|
||||
- SEMAPHORE_DB_PASS=${POSTGRES_PASSWORD}
|
||||
- SEMAPHORE_DB_HOST=postgres
|
||||
- SEMAPHORE_DB_PORT=5432
|
||||
- SEMAPHORE_DB_DIALECT=postgres
|
||||
- SEMAPHORE_DB=${POSTGRES_DB}
|
||||
- SEMAPHORE_PLAYBOOK_PATH=/tmp/semaphore/
|
||||
- SEMAPHORE_ADMIN_PASSWORD=${SEMAPHORE_ADMIN_PASSWORD}
|
||||
- SEMAPHORE_ADMIN_NAME=${SEMAPHORE_ADMIN_NAME}
|
||||
- SEMAPHORE_ADMIN_EMAIL=${SEMAPHORE_ADMIN_EMAIL}
|
||||
- SEMAPHORE_ADMIN=${SEMAPHORE_ADMIN}
|
||||
- SEMAPHORE_ACCESS_KEY_ENCRYPTION=${SEMAPHORE_ACCESS_KEY_ENCRYPTION}
|
||||
- SEMAPHORE_LDAP_ACTIVATED='no'
|
||||
# - SEMAPHORE_LDAP_HOST=dc01.local.example.com
|
||||
# - SEMAPHORE_LDAP_PORT='636'
|
||||
# - SEMAPHORE_LDAP_NEEDTLS='yes'
|
||||
# - SEMAPHORE_LDAP_DN_BIND='uid=bind_user,cn=users,cn=accounts,dc=local,dc=shiftsystems,dc=net'
|
||||
# - SEMAPHORE_LDAP_PASSWORD='ldap_bind_account_password'
|
||||
# - SEMAPHORE_LDAP_DN_SEARCH='dc=local,dc=example,dc=com'
|
||||
# - SEMAPHORE_LDAP_SEARCH_FILTER="(\u0026(uid=%s)(memberOf=cn=ipausers,cn=groups,cn=accounts,dc=local,dc=example,dc=com))"
|
||||
depends_on:
|
||||
- postgres
|
||||
networks:
|
||||
- backend
|
||||
- web
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.semaphore.rule=Host(`semaphore.vezpi.com`)
|
||||
- traefik.http.routers.semaphore.entrypoints=https
|
||||
- traefik.http.routers.semaphore.tls.certresolver=letsencrypt
|
||||
- traefik.http.services.semaphore.loadbalancer.server.port=3000
|
||||
restart: unless-stopped
|
||||
|
||||
postgres:
|
||||
image: postgres:14
|
||||
hostname: postgres
|
||||
container_name: semaphore_postgres
|
||||
volumes:
|
||||
- /appli/data/semaphore/db:/var/lib/postgresql/data
|
||||
environment:
|
||||
- POSTGRES_USER=${POSTGRES_USER}
|
||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
||||
- POSTGRES_DB=${POSTGRES_DB}
|
||||
networks:
|
||||
- backend
|
||||
restart: unless-stopped
|
||||
|
||||
networks:
|
||||
backend:
|
||||
web:
|
||||
external: true
|
||||
```
|
||||
|
||||
To generate the encrypting access keys, I use this command:
|
||||
```bash
|
||||
head -c32 /dev/urandom | base64
|
||||
```
|
||||
|
||||
Now I'm able to reach to the login page using the URL configured
|
||||
|
||||
## Discovery
|
||||
|
||||
## Launching an Ansible playbook
|
||||
|
||||
Reference in New Issue
Block a user