CampgroundTickets/docker-compose.yml
Hank 3397e3e3ec Initial Camp Scan ticketing system
Backend (Fastify + TS): FluentForms webhook -> NocoDB row + QR + MailerSend
email; PIN auth; scan/lookup/redeem with per-code serialization; reusable QR
codes with count-based check-in; admin search.

App (Expo, one codebase): Android APK + iPhone PWA. Login, camera scanner
(native + web barcode-detector split), green/red overlay with sound + haptics,
admin lookup/redeem. Session token persisted per device.

Ops: multi-stage Dockerfile serving API + PWA same-origin, compose bound to
127.0.0.1; Forgejo Actions runner + tag-triggered signed APK build for Obtainium.
Docs in README.md and INSTALL.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 03:47:59 +00:00

20 lines
744 B
YAML

services:
camptickets:
build: .
image: camptickets:latest
container_name: camptickets
env_file: .env
environment:
# Container always listens on 8080 internally; the host mapping below is
# what nginx proxies to. Keep this fixed regardless of .env PORT.
PORT: "8080"
HOST: "0.0.0.0"
ports:
# Bind to localhost only — nginx (on the host) terminates TLS for
# scan.beartariacampgrounds.com and proxies to this port.
- "127.0.0.1:${HOST_PORT:-8091}:8080"
# NocoDB runs elsewhere (its own container/host). If it is on THIS host,
# host.docker.internal resolves to the host gateway.
extra_hosts:
- "host.docker.internal:host-gateway"
restart: unless-stopped