Files
Bike-Tinder/deploy/docker-compose.yml

65 lines
2.1 KiB
YAML

# Bike-Tinder stack — deck app + Tailscale sidecar.
#
# Deployed on Rotarran at /var/mnt/DATA/podman-stacks/bike-tinder/ (a checkout
# of the `release` branch). Run via the user unit podman-stack-bike-tinder.service
# (Delegate=yes) or manually:
# podman-compose -f deploy/docker-compose.yml --env-file .env up -d
#
# Networking:
# - app: published on 127.0.0.1:9453 only — Hermes cron triggers (import /
# agent read) and local debugging. The LAN sees nothing.
# - tailscale (userspace mode, no tun/caps): joins the tailnet as `biketinder`
# and serves https://biketinder.tailf35a34.ts.net -> http://app:8000 (443).
# Secrets: TS_AUTHKEY + OPENROUTER_API_KEY come from the stack-local .env
# (never committed). Before the authkey is placed, the sidecar simply reports
# "no authkey" and exits — the app runs fine on its own.
x-logging: &default-logging
driver: "json-file"
options:
max-size: "50m"
max-file: "5"
compress: "true"
services:
app:
build:
context: ..
dockerfile: deploy/Dockerfile
image: localhost/bike-tinder:latest
container_name: bike-tinder-app
restart: unless-stopped
environment:
- TZ=America/Halifax
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY:-}
volumes:
- /var/mnt/DATA/podman-stacks/bike-tinder/data:/data
- /var/home/admin/.hermes/scripts/motorcycle-hunt.d:/state:ro,z
ports:
- "127.0.0.1:9453:8000"
stop_grace_period: 15s
security_opt:
- no-new-privileges:true
logging:
<<: *default-logging
tailscale:
image: docker.io/tailscale/tailscale:latest
container_name: bike-tinder-ts
hostname: biketinder
restart: unless-stopped
depends_on:
- app
environment:
- TS_AUTHKEY=${TS_AUTHKEY:-}
- TS_HOSTNAME=biketinder
- TS_STATE_DIR=/var/lib/tailscale
- TS_SERVE_CONFIG=/config/serve.json
- TS_USERSPACE=true
- TZ=America/Halifax
volumes:
- /var/mnt/DATA/podman-stacks/bike-tinder/tailscale-state:/var/lib/tailscale
- /var/mnt/DATA/podman-stacks/bike-tinder/deploy/tailscale:/config:ro
logging:
<<: *default-logging