Events now come from EVENTS_FEED_URL (the scout-calendar container, which serves Radicale mike/site73 as JSON). The last good copy is cached to /data/events-cache.json and served whenever the feed is down or empty; 'Nothing on the books' remains the cold-start floor only. The round-trip test proved the feed reproduces all 32 rows of app/events.json byte-identically, so nothing visible changes today. Removes app/events.json, the first-boot seed copy, and the local load path; README calendar section rewritten; compose gains EVENTS_FEED_URL from the Portainer stack env.
40 lines
1.3 KiB
YAML
40 lines
1.3 KiB
YAML
# scout-website — greenlanescouts73.org (Pack & Troop 73)
|
|
#
|
|
# Deployed as a Portainer Repository stack pointed at this repo
|
|
# (ops/portainer-stacks/00-the-rule.md in claude-workspace applies):
|
|
# - no relative bind mounts: `.` resolves to Portainer's clone, not /srv
|
|
# - no env_file: NTFY_URL comes from the Portainer stack env
|
|
# Images live OUTSIDE the repo at /srv/scout-website-assets/img (bind-mounted
|
|
# read-only) so photos never bloat clones.
|
|
# The calendar comes from the scout-calendar feed (EVENTS_FEED_URL, set in
|
|
# the Portainer stack env); /data/events-cache.json is the stale fallback.
|
|
|
|
name: scout-website
|
|
services:
|
|
scout-website:
|
|
build:
|
|
context: ./app
|
|
container_name: scout-website
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8132:8000"
|
|
environment:
|
|
- NTFY_URL=${NTFY_URL}
|
|
- SHEET_ID=${SHEET_ID}
|
|
- NTFY_BASE=${NTFY_BASE}
|
|
- NTFY_TOPIC=${NTFY_TOPIC}
|
|
- NTFY_TOKEN=${NTFY_TOKEN}
|
|
- ADMIN_TOKEN=${ADMIN_TOKEN}
|
|
- EVENTS_FEED_URL=${EVENTS_FEED_URL}
|
|
volumes:
|
|
- /srv/scout-website/data:/data
|
|
- /srv/scout-website/secrets/service_account.json:/app/service_account.json:ro
|
|
- /srv/scout-website-assets/img:/app/static/img:ro
|
|
networks:
|
|
- default
|
|
- npm
|
|
networks:
|
|
npm:
|
|
external: true
|
|
name: arrstack_arr_net
|