services: pesad-bot: image: ghcr.io/dmeoli/pesad:latest # published by CI; pulled, not built, on the VM container_name: pesad-bot restart: unless-stopped # auto-restart on crash / reboot -> always on environment: - TELEGRAM_TOKEN=${TELEGRAM_TOKEN} labels: - com.centurylinklabs.watchtower.scope=pesad # watched by this stack's watchtower # Token: put TELEGRAM_TOKEN in a .env file next to this compose file, or # export it in the shell before `docker compose up -d`. # Auto-update: pulls a fresh ghcr.io/dmeoli/pesad:latest after each CI push and # restarts the bot. Maintained fork (containrrr is unmaintained, breaks on Docker 29+). watchtower: image: ghcr.io/nicholas-fedor/watchtower:latest container_name: pesad-watchtower # unique name: coexists with other stacks restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock - ${HOME}/.docker/config.json:/config.json:ro environment: - WATCHTOWER_CLEANUP=true - WATCHTOWER_POLL_INTERVAL=120 - WATCHTOWER_SCOPE=pesad # only act within this scope; leave other stacks' watchtowers alone labels: - com.centurylinklabs.watchtower.scope=pesad command: pesad-bot # watch only this bot