Skip to content

Ansible Semaphore is a self-hosted GUI for App iconAnsible. You can manage various ansible playbooks and even run them based on cron schedule.

services:
postgres:
restart: unless-stopped
image: postgres:17.4-alpine
container_name: semaphore_postgres
volumes:
- /data/apps/semaphore/db:/var/lib/postgresql/data
environment:
POSTGRES_USER: semaphore
POSTGRES_PASSWORD: semaphore
POSTGRES_DB: semaphore
networks:
- homelab
semaphore:
restart: unless-stopped
image: semaphoreui/semaphore:v2.13.14
container_name: semaphore_app
environment:
TZ: Europe/Paris
SEMAPHORE_DB_USER: semaphore
SEMAPHORE_DB_PASS: semaphore
SEMAPHORE_DB_HOST: semaphore_postgres
SEMAPHORE_DB_PORT: 5432
SEMAPHORE_DB_DIALECT: postgres
SEMAPHORE_DB: semaphore
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_NAME}
SEMAPHORE_ACCESS_KEY_ENCRYPTION: ${SEMAPHORE_ACCESS_KEY_ENCRYPTION}
ANSIBLE_HOST_KEY_CHECKING: 'false'
depends_on:
- postgres
ports:
- 3007:3000
networks:
- homelab
labels:
- traefik.enable=true
- traefik.http.routers.semaphore.rule=Host(`semaphore.zrx.sh`)
- traefik.http.services.semaphore.loadbalancer.server.port=3007
- traefik.http.routers.semaphore.middlewares=homelab-whitelist@file
- traefik.http.routers.semaphore.tls=true
- traefik.http.routers.semaphore.tls.certresolver=production
- traefik.http.routers.semaphore.tls.domains[0].main=zrx.sh
- traefik.http.routers.semaphore.tls.domains[0].sans=*.zrx.sh
networks:
homelab:
external: true

You can find some playbooks I run on my homelab github repo but basically I have :

  • Update playbook (runned every day) : update devices running on my homelab (apt packages, dotfiles, etc..)
  • Update crowdsec playbook (runned every week) : run App iconCrowdsec hub update and hub upgrade
  • Deploy LXC playbook (manually) : deploy a preconfigured LXC on Proxmox and notify me when ready to use