Deployment
CI Pipeline (Gitea Actions)
Pushing to main triggers .github/workflows/publish.yml:
- Checks out code
- Installs dependencies (
npm ci)
- Runs
npm run build (Vite)
- Logs into Gitea Container Registry
- Builds and pushes a multi-arch image (amd64 + arm64) tagged
latest + short SHA
Image: git.necloud.us/nate/siteforge:latest
Servers
Rocky (Beta)
Podman on ZimaOS NAS, reachable over Tailscale.
Oracle Arm (Production)
Docker on Oracle Cloud free-tier ARM instance.
Environment Variables (.env)
| Variable |
Description |
ADMIN_PASSWORD |
Password for /admin — change from default changeme |
PORT |
Server port (default 4173) |
TRUST_PROXY_HOPS |
Number of reverse-proxy hops to trust (default 1) |
RESEND_API_KEY |
Resend API key for transactional email |
FROM_EMAIL |
Sender address for study emails |
Data Directory
The data/ bind mount is the only stateful piece. Upgrading is safe — pull the new image and restart. The data directory is never modified by the container build.
To back up: copy the entire data/ directory from the host.
Service Worker Cache Note
After a deploy, users may see the old version until the Workbox service worker refreshes. Force-clear it in the browser console: