services: notify-bridge: image: git.dolgolyov-family.by/alexei.dolgolyov/notify-bridge:latest # For local builds instead of pulling from registry: # build: . container_name: notify-bridge restart: unless-stopped ports: - "8420:8420" volumes: - notify-bridge-data:/data environment: # REQUIRED — any 32+ byte random string. `openssl rand -hex 32` is one way. - NOTIFY_BRIDGE_SECRET_KEY=${NOTIFY_BRIDGE_SECRET_KEY:?Set NOTIFY_BRIDGE_SECRET_KEY (min 32 chars)} # Comma-separated list of allowed browser origins. Wildcard `*` is # rejected on startup because credentials are enabled. - NOTIFY_BRIDGE_CORS_ALLOWED_ORIGINS=${NOTIFY_BRIDGE_CORS_ALLOWED_ORIGINS:-http://localhost:8420} # Trusted proxy IPs whose X-Forwarded-For / X-Forwarded-Proto we honor. # Set this to your reverse proxy's IP (e.g. 172.17.0.1 for the default # docker bridge, or `*` only if the container is NOT reachable from the # public internet). - NOTIFY_BRIDGE_FORWARDED_ALLOW_IPS=${NOTIFY_BRIDGE_FORWARDED_ALLOW_IPS:-127.0.0.1} # Opt-in SSRF bypass for private/loopback/link-local hosts (homelab # scenario — tracking an Immich/Gitea instance on the same LAN). DO NOT # enable on a publicly exposed instance. # - NOTIFY_BRIDGE_ALLOW_PRIVATE_URLS=1 healthcheck: # Use /api/ready (not /api/health) so the container is only reported # healthy after migrations and the scheduler finish booting. test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8420/api/ready', timeout=3)"] interval: 30s timeout: 5s retries: 3 start_period: 30s read_only: true tmpfs: - /tmp security_opt: - no-new-privileges:true cap_drop: - ALL mem_limit: 512m cpus: 1.0 pids_limit: 256 volumes: notify-bridge-data: