Project Alpha Operational Context
Last reviewed: 2026-06-28
This file records public, non-secret deployment conventions. Credentials, private addresses, customer information, and access instructions must remain outside the repository.
Deployment Topology
- Production runs as a TrueNAS Scale Custom App on host port
1627. - Staging runs separately on host port
1628. - Release-candidate validation uses immutable image tags such as
:0.5.0-rc1and:cron-0.5.0-rc1. - Production uses
:latestand:cron-latestonly after the matching release candidate has passed validation. - Staging uses
:devand:cronimages. - Production and staging have different databases, named volumes, passwords, and encryption keys.
- TrueNAS redeployment remains a manual operator action after an image is published.
- GHCR packages must remain readable by the deployment environment.
Do not add real hostnames, private IP addresses, passwords, tokens, or remote-access instructions to this file.
Production Data Rules
- Every schema change requires an idempotent migration in
database/migrations/. - Add the next immutable sequential file under
database/migrations/; do not rewrite the 0.5.0 baseline. - Use safe defaults or nullable columns for existing data.
- Test migrations against staging before production.
- Take and verify a restorable backup before deployment.
- Never edit production tables manually as part of normal deployment.
Persistent Data
The deployment must preserve:
- MySQL data volume
- Upload volume
- Configuration volume, including the application encryption key
- Backup volume
Losing the configuration encryption key can make encrypted settings unrecoverable. Back it up separately from the database while protecting it as a secret.
Image and Branch Flow
| Branch | Web image | Cron image | Intended environment |
|---|---|---|---|
dev |
:dev |
:cron |
Staging |
tag v0.5.0-rc1 |
:0.5.0-rc1 |
:cron-0.5.0-rc1 |
Release-candidate validation |
main |
:latest |
:cron-latest |
Production after validation |
Pull requests to main must pass the configured checks. Publishing an image does not automatically redeploy TrueNAS.
Release Checklist
- Confirm the linked GitHub issue and expected behavior.
- Verify CI and relevant local tests.
- Review migrations and backup requirements.
- Deploy to staging and complete the affected workflow.
- Review web, cron, and database logs without copying secrets into GitHub.
- Merge through protected
main. - Pull and redeploy production manually.
- Run a focused production smoke test with non-sensitive data.
- Confirm scheduled jobs and backups remain healthy.
Incident Notes
Store operational incident details in an access-controlled system. A public GitHub issue may contain a sanitized summary, reproduction steps, affected version, and resolution, but must not contain credentials, customer data, private infrastructure details, or full production logs.