dnd-character-deploy/deployment.md

28 lines
2.3 KiB
Markdown

# Arrowstack Character deployment
Production: https://dnd.arrowstack.dev
Canonical source: private Admin/dnd-character-pwa.
Temporary deployment mirror: public Admin/dnd-character-deploy, main branch.
Coolify application: vfzhl6jql5vrzevm6yk1pvav (dnd-character).
Project: 9ax6f4a6yn1h6gi7jgiihjhs; production environment; server: t6bzdsemktk6j3fxuzjlzkjg.
Build: repository Dockerfile, HTTPS mirror clone, port 8080.
Health: http://127.0.0.1:8080/health. Use IPv4 explicitly: BusyBox wget with localhost failed against the IPv4 listener.
Keycloak: confidential dnd-character client, dev realm, exact callback https://dnd.arrowstack.dev/auth/callback. Runtime issuer/client credentials are handed directly to Coolify. Never commit credentials or character data.
## Release steps
1. Change the canonical private source; run npm ci, npm test and npm run build.
2. Copy the tested source and lockfile into the deployment mirror. Exclude node_modules, dist, .env files, test output and credentials. Retain private canonical provenance in commit messages.
3. Set the runtime SOURCE_COMMIT to the mirror revision being deployed.
4. Check active deployment jobs, deploy the application once, inspect the terminal build/runtime status, and verify /health and the Keycloak redirect on the live origin.
5. Roll back by pinning a prior known-good mirror commit and deploying it. There are no server character database migrations.
The mirror is a temporary fallback authorized by the user. The private repository deploy key workflow failed at git.arrowstack.dev port 22 with Permission denied (publickey); investigate the Gitea SSH/deploy-key listener before removing the mirror. Do not make canonical source public.
Earlier inline-source test applications cbnkwtdve2fzumnxnz0jqupb and cdr9ivftpqqzdakmfuq0r5yz are inactive and have no domain. They are not production targets.
## Verification boundaries
Seven focused tests cover HP/temp HP, proficiency/expertise, declared rest resets, JSON validation, IndexedDB account separation/persistence, encrypted session integrity/expiry and fail-closed missing secrets. Production TypeScript checks and Vite build also run in the Docker image build. Authenticated browser creation/reload and installed iPhone offline behavior require a signed-in device smoke test; build and health alone do not prove those interactions.