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.
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
# 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:
|
||||
Reference in New Issue
Block a user