Files
vh d1192ca868 feat(pewpewstudio): laser job studio on nh3-docker :8185 (api + Caddy front), Homepage tile
Prime's directive via pewpew-dev. Images are built on nh3-dev from a clean
archive of vh/pewpewstudio (26bba3c; hamr over gitea SSH via BuildKit --ssh)
and loaded on nh3-docker. Caddy serves the SPA and strips /api/ in front of
the backend. It refuses foreign Host headers inside a route block, because the
Host rewrite would otherwise bypass the backend's TrustedHost. The DB, assets
and the app-edited shop config live on named volumes inside nh3-docker's
nightly vzdump. Verified: SPA, /api/machines and /api/generate/workflows 200;
foreign Host 400.
2026-10-13 21:39:44 -07:00

52 lines
2.4 KiB
YAML

# pewpewstudio on nh3-docker: laser job studio (FastAPI + React SPA), composes Thunder Aurora marking jobs and exports
# LightBurn .lbrn. Prime 2026-10-13 via pewpew-dev. NO user auth in v1, so LAN/mesh only: published on the host's LAN
# address, never on a public ingress. Images are built on nh3-dev and loaded here (see README).
# State: the SQLite DB + assets on the named volume `state` (local disk, never NFS). The shop's own config (machine
# profiles, lenses, denylist, sizing) on the named volume `config`, because the app EDITS it from the browser (temp
# file + os.replace in the directory); a volume, not /opt/docker/conf, so deploy-stack's --delete can never touch it.
# Seeded once at first deploy (README). Both volumes ride nh3-docker's whole-VM backup.
name: pewpewstudio
services:
api:
image: pewpewstudio:${PEWPEW_REV:?set PEWPEW_REV}
container_name: pewpewstudio-api
restart: unless-stopped
env_file: .env # WORLDTREE_API_KEY (secret get nh3-dev/.config/worldtree/pewpewstudio-demo-key)
environment:
PEWPEW_DB_PATH: /state/shop.db
PEWPEW_ASSETS_ROOT: /state/assets
PEWPEW_PROFILE_DIR: /config
PEWPEW_DENYLIST: /config/materials.toml
PEWPEW_SIZING: /config/sizing.toml
PEWPEW_FONTS_DIR: /config/fonts
PEWPEW_BASELINE: /config/settings_baseline.toml
ARBO_BASE_URL: http://100.64.0.6:8201
WORLDTREE_BASE_URL: http://10.250.50.152:8080
volumes:
- state:/state
- config:/config
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/machines', timeout=5)"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
web:
image: pewpewstudio-web:${PEWPEW_REV:?set PEWPEW_REV}
container_name: pewpewstudio
restart: unless-stopped
depends_on: [api]
ports:
- "10.100.50.40:${PORT:-8185}:80"
volumes:
- /opt/docker/conf/pewpewstudio:/etc/caddy:ro # the DIRECTORY: deploy-stack replaces the file, and a single-file bind would keep the old inode
labels:
- homepage.group=AI - Studios
- homepage.name=pewpewstudio
- homepage.icon=mdi-laser-pointer
- "homepage.description=Laser job studio: composes Thunder Aurora marking jobs, exports LightBurn .lbrn"
- homepage.href=http://10.100.50.40:${PORT:-8185}/
volumes:
state:
config: