#### NETWORKS networks: traefik_front_network: external: true back_network_semaphore: driver: bridge attachable: true #### SERVICES services: ### semaphore semaphore: container_name: semaphore-app hostname: semaphore-app image: docker.io/semaphoreui/semaphore:${SEMAPHORE_VERSION:-latest} restart: always environment: SEMAPHORE_DB_DIALECT: postgres SEMAPHORE_DB_HOST: semaphore-postgres SEMAPHORE_DB_NAME: ${POSTGRE_DB_NAME:-semaphore_db} SEMAPHORE_DB_USER: ${POSTGRE_DB_USER:-semaphore_user} SEMAPHORE_DB_PASS: ${POSTGRE_DB_PASS:-P@ssword!Here!123456} SEMAPHORE_ADMIN: ${SEMAPHORE_ADMIN:-administrateur} SEMAPHORE_ADMIN_PASSWORD: ${SEMAPHORE_ADMIN_PASSWORD:-P@ssword!Here!123456} SEMAPHORE_ADMIN_NAME: ${SEMAPHORE_ADMIN_NAME:-Administrateur} SEMAPHORE_ADMIN_EMAIL: ${SEMAPHORE_ADMIN_EMAIL:-admin@tips-of-mine.fr} SEMAPHORE_PORT: ${SEMAPHORE_PORT:-3000} SEMAPHORE_TMP_PATH: ${SEMAPHORE_TMP_PATH:-/tmp/semaphore} SEMAPHORE_WEB_ROOT: ${SEMAPHORE_WEB_ROOT:-https://semaphore.tips-of-mine.com} MAX_TASK_DURATION_SEC: ${MAX_TASK_DURATION_SEC:-60} SEMAPHORE_MAX_PARALLEL_TASKS: ${SEMAPHORE_MAX_PARALLEL_TASKS:-10} SEMAPHORE_PASSWORD_LOGIN_DISABLED: ${SEMAPHORE_PASSWORD_LOGIN_DISABLED:-False} SEMAPHORE_USE_REMOTE_RUNNER: ${SEMAPHORE_USE_REMOTE_RUNNER:-True} SEMAPHORE_RUNNER_REGISTRATION_TOKEN: ${SEMAPHORE_RUNNER_REGISTRATION_TOKEN:-H1wDyorbg6gTSwJlVwle2Fne} SEMAPHORE_NON_ADMIN_CAN_CREATE_PROJECT: ${SEMAPHORE_NON_ADMIN_CAN_CREATE_PROJECT:-False} SEMAPHORE_MAX_TASKS_PER_TEMPLATE: ${SEMAPHORE_MAX_TASKS_PER_TEMPLATE:-60} SEMAPHORE_EMAIL_ALERT: ${SEMAPHORE_EMAIL_ALERT:-True} SEMAPHORE_EMAIL_SENDER: $SEMAPHORE_EMAIL_SENDER:-hostinfo@tips-of-mine.fr} SEMAPHORE_EMAIL_HOST: ${SEMAPHORE_EMAIL_HOST:-semaphore-msmtpd} SEMAPHORE_EMAIL_PORT: ${SEMAPHORE_EMAIL_PORT:-2500} SEMAPHORE_EMAIL_SECURE: ${SEMAPHORE_EMAIL_SECURE:-False} SEMAPHORE_LDAP_ENABLE: ${:-False} SEMAPHORE_LDAP_BIND_DN: ${SEMAPHORE_LDAP_BIND_DN:-} SEMAPHORE_LDAP_BIND_PASSWORD: ${SEMAPHORE_LDAP_BIND_PASSWORD:-} SEMAPHORE_LDAP_SERVER: ${SEMAPHORE_LDAP_SERVER:-} SEMAPHORE_LDAP_SEARCH_DN: ${SEMAPHORE_LDAP_SEARCH_DN:-} SEMAPHORE_LDAP_SEARCH_FILTER: ${SEMAPHORE_LDAP_SEARCH_FILTER:-} SEMAPHORE_LDAP_NEEDTLS: ${SEMAPHORE_LDAP_NEEDTLS:-} SEMAPHORE_LDAP_MAPPING_DN: ${SEMAPHORE_LDAP_MAPPING_DN:-} SEMAPHORE_LDAP_MAPPING_MAIL: ${SEMAPHORE_LDAP_MAPPING_MAIL:-} SEMAPHORE_LDAP_MAPPING_UID: ${SEMAPHORE_LDAP_MAPPING_UID:-} SEMAPHORE_LDAP_MAPPING_CN: ${SEMAPHORE_LDAP_MAPPING_CN:-} SEMAPHORE_GOTIFY_ALERT: ${SEMAPHORE_GOTIFY_ALERT:-False} SEMAPHORE_GOTIFY_URL: ${SEMAPHORE_GOTIFY_URL:-https://gotify.tips-of-mine.com/#/applicationsd} SEMAPHORE_GOTIFY_TOKEN: ${SEMAPHORE_GOTIFY_TOKEN:-AARDW0DNlz.eb1cd} ANSIBLE_HOST_KEY_CHECKING: ${ANSIBLE_HOST_KEY_CHECKING:-False} depends_on: postgres: condition: service_healthy restart: true msmtpd: condition: service_healthy restart: true volumes: - ./data:/var/lib/semaphore - ./config:/etc/semaphore - ./tmp:/tmp/semaphore networks: - back_network_semaphore - traefik_front_network labels: - "traefik.enable=true" - "traefik.docker.network=traefik_front_network" # HTTP - "traefik.http.routers.semaphore-http.rule=Host(`semaphore.tips-of-mine.com`)" - "traefik.http.routers.semaphore-http.entrypoints=http" - "traefik.http.routers.semaphore-http.priority=49" # HTTPS - "traefik.http.routers.semaphore-https.rule=Host(`semaphore.tips-of-mine.com`)" - "traefik.http.routers.semaphore-https.entrypoints=https" - "traefik.http.routers.semaphore-https.tls=true" - "traefik.http.routers.semaphore-https.priority=50" - "traefik.http.routers.semaphore.service=semaphore-https-service" # Middleware # Service - "traefik.http.services.semaphore-https-service.loadbalancer.server.port=3000" # - "traefik.http.services.semaphore-https-service.loadbalancer.server.scheme=https" # - "traefik.http.services.semaphore-https-service.loadbalancer.healthcheck.hostname=semaphore.traefik.me" # - "traefik.http.services.semaphore-https-service.loadbalancer.healthcheck.method=foobar" # - "traefik.http.services.semaphore-https-service.loadbalancer.healthcheck.timeout=10" # - "traefik.http.services.semaphore-https-service.loadbalancer.healthcheck.interval=30" ### runner runner: container_name: semaphore-runner hostname: semaphore-runner image: docker.io/semaphoreui/runner:${SEMAPHORE_VERSION:-latest} restart: always environment: SEMAPHORE_WEB_ROOT: ${SEMAPHORE_WEB_ROOT:-http://server:3000} SEMAPHORE_RUNNER_API_URL: ${SEMAPHORE_RUNNER_API_URL:-http://server:3000/internal} SEMAPHORE_RUNNER_REGISTRATION_TOKEN: ${SEMAPHORE_RUNNER_REGISTRATION_TOKEN:-H1wDyorbg6gTSwJlVwle2Fne} networks: - back_network_semaphore ### postgres postgres: container_name: semaphore-postgres hostname: semaphore-postgres image: ${POSTGRES_IMAGE_TAG} environment: PGDATA: ${POSTGRE_DB_DATA} POSTGRES_DB: ${POSTGRE_DB_NAME:-semaphore_db} POSTGRES_PASSWORD: ${POSTGRE_DB_PASSWORD:-P@ssword!Here!123456} POSTGRES_USER: ${POSTGRE_DB_USER:-semaphore_user} TZ: Europe/Paris networks: - back_network_semaphore healthcheck: test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"] interval: 30s timeout: 10s retries: 10 restart: always volumes: - ./data:/var/lib/postgresql/data:rw ### msmtpd: container_name: semaphore-msmtpd hostname: semaphore-msmtpd image: crazymax/msmtpd:latest networks: - back_network_semaphore environment: - "TZ=Europe/Paris" - "PUID=1500" - "PGID=1500" - "SMTP_HOST=10.0.4.52" - "SMTP_PORT=587" - "SMTP_TLS=on" - "SMTP_STARTTLS=on" - "SMTP_TLS_CHECKCERT=off" - "SMTP_AUTH=on" - "SMTP_USER=hostinfo@tips-of-mine.fr" - "SMTP_PASSWORD=P@ssw0rd!12345+" - "SMTP_DOMAIN=localhost" - "SMTP_FROM=hostinfo@tips-of-mine.fr" restart: always healthcheck: test: ["CMD-SHELL", "echo EHLO localhost"] interval: 5s timeout: 5s retries: 5