infra/apprise.compose.yml

52 lines
2.3 KiB
YAML

# Apprise — notify.manohargupta.com
# Unified notification API. POST one message, fans out to Telegram, email, ~80 services.
# Stateless except for YAML config files stored in the config volume.
# No built-in auth -- protected by Traefik IP whitelist (Tailscale range only).
#
# Honest framing: n8n's built-in Telegram/email nodes cover most workflow notifications.
# Apprise's value is for non-n8n scripts (Python crons, server healthchecks) that also
# need to notify without importing the full n8n stack.
services:
apprise:
image: caronc/apprise:latest
restart: unless-stopped
environment:
# Persist notification configs (tagged YAML files) across restarts
APPRISE_STATEFUL_MODE: simple
# Allow API to update configs -- lock this down after initial setup
APPRISE_CONFIG_LOCK: "no"
volumes:
- apprise_config:/config # stores per-tag YAML notification configs
- apprise_attach:/attach # stores file attachments for notifications
networks:
- dokploy-network
labels:
- "traefik.enable=true"
- "traefik.docker.network=dokploy-network"
- "traefik.http.routers.apprise.rule=Host(`notify.manohargupta.com`)"
- "traefik.http.routers.apprise.entrypoints=websecure"
- "traefik.http.routers.apprise.tls.certresolver=letsencrypt"
- "traefik.http.services.apprise.loadbalancer.server.port=8000"
# IP whitelist -- Tailscale CGNAT range only. Only your tailnet can call this API.
# Without this, anyone who finds the URL can send notifications on your behalf.
- "traefik.http.middlewares.apprise-ipallow.ipwhitelist.sourcerange=100.64.0.0/10"
- "traefik.http.routers.apprise.middlewares=apprise-ipallow@docker"
deploy:
labels:
- "traefik.enable=true"
- "traefik.docker.network=dokploy-network"
- "traefik.http.routers.apprise.rule=Host(`notify.manohargupta.com`)"
- "traefik.http.routers.apprise.entrypoints=websecure"
- "traefik.http.routers.apprise.tls.certresolver=letsencrypt"
- "traefik.http.services.apprise.loadbalancer.server.port=8000"
- "traefik.http.middlewares.apprise-ipallow.ipwhitelist.sourcerange=100.64.0.0/10"
- "traefik.http.routers.apprise.middlewares=apprise-ipallow@docker"
volumes:
apprise_config:
apprise_attach:
networks:
dokploy-network:
external: true