services: semaphore: image: {{ semaphore_image }} container_name: semaphore restart: unless-stopped environment: SEMAPHORE_DB_DIALECT: bolt SEMAPHORE_ADMIN_PASSWORD: "{{ vault_semaphore_admin_password | default('changeme') }}" SEMAPHORE_ADMIN_NAME: admin SEMAPHORE_ADMIN_EMAIL: admin@{{ domain }} SEMAPHORE_ADMIN: admin SEMAPHORE_ACCESS_KEY_ENCRYPTION: "{{ vault_semaphore_encryption_key | default('generate-a-key') }}" volumes: - {{ semaphore_data_dir }}:/tmp/semaphore labels: traefik.enable: "true" traefik.http.routers.semaphore.rule: "Host(`{{ semaphore_host }}`)" traefik.http.routers.semaphore.entrypoints: websecure traefik.http.routers.semaphore.tls.certresolver: cloudflare traefik.http.services.semaphore.loadbalancer.server.port: "3000" networks: - {{ docker_network_name }} networks: {{ docker_network_name }}: external: true