services: asciinema: image: ${ASCIINEMA_IMAGE:-ghcr.io/asciinema/asciinema-server:latest} container_name: ${ASCIINEMA_COMPOSE_PROJECT_NAME}_app restart: unless-stopped networks: - compose_network volumes: - asciinema_data:/var/opt/asciinema - ./theme/custom.css:/app/assets/css/custom.css:ro environment: SECRET_KEY_BASE: ${ASCIINEMA_SECRET_KEY} URL_HOST: ${ASCIINEMA_TRAEFIK_HOST} URL_PORT: 443 URL_SCHEME: https DATABASE_URL: postgresql://${DB_USER}:${DB_PASSWORD}@${CORE_DB_HOST}/${ASCIINEMA_DB_NAME}?pool_size=10 SMTP_HOST: ${EMAIL_SMTP_HOST} SMTP_PORT: ${EMAIL_SMTP_PORT} SMTP_USERNAME: ${EMAIL_SMTP_USER} SMTP_PASSWORD: ${EMAIL_SMTP_PASSWORD} SMTP_SSL: ${SMTP_SSL:-true} MAIL_FROM_ADDRESS: ${ASCIINEMA_MAIL_FROM} MAIL_REPLY_TO_ADDRESS: ${ASCIINEMA_MAIL_REPLY_TO} UNCLAIMED_RECORDING_TTL: ${ASCIINEMA_UNCLAIMED_TTL:-30} labels: - traefik.enable=${ASCIINEMA_TRAEFIK_ENABLED:-true} - traefik.docker.network=${NETWORK_NAME} - traefik.http.routers.asciinema.rule=Host(`${ASCIINEMA_TRAEFIK_HOST}`) - traefik.http.routers.asciinema.entrypoints=web-secure - traefik.http.routers.asciinema.tls=true - traefik.http.routers.asciinema.tls.certresolver=letsencrypt - traefik.http.services.asciinema.loadbalancer.server.port=4000 - traefik.http.routers.asciinema.middlewares=compress@file - com.centurylinklabs.watchtower.enable=true depends_on: - postgres healthcheck: test: ["CMD", "curl", "-f", "http://localhost:4000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s volumes: asciinema_data: name: ${ASCIINEMA_COMPOSE_PROJECT_NAME}_data