Ansible Semaphore is a self-hosted GUI for Ansible. 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.shnetworks: homelab: external: true
Playbooks
Section titled “Playbooks”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
Crowdsec hub update and hub upgrade
- Deploy LXC playbook (manually) : deploy a preconfigured LXC on Proxmox and notify me when ready to use