Form submissions now land in /data/scout73.db before anything leaves the box. The Google Sheet and the ntfy push become mirrors whose per-record outcome is recorded, so a failed sheet write is replayable instead of surviving only as a push telling you to retype it. The table is a generic record store keyed by 'kind', with workflow columns and an audit trail, so RSVPs and other forms can land in the same place later without a migration. Admin panel talks to /api/admin over HTTP and never opens the DB file. - app/store.py schema, writes, reads, one-time leads.jsonl backfill - app/admin_api.py token-gated API; fails closed when ADMIN_TOKEN is unset - app/app.py three hunks: imports, boot init, join_post - compose ADMIN_TOKEN passed through from the Portainer stack env
39 lines
1.2 KiB
YAML
39 lines
1.2 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 live, hand-editable calendar is /srv/scout-website/data/events.json
|
|
# (seeded from app/events.json on first boot; see README).
|
|
|
|
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}
|
|
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
|