# Doris Schoolhouse Deployment Notes ## Intended runtime shape on NOMAD Doris Schoolhouse should run as a standalone NOMAD service from **`/opt/doris-schoolhouse`**. - **Repo/source path:** `/home/fizzlepoof/repos/truenas-stacks/home/doris-schoolhouse` - **Live runtime path:** `/opt/doris-schoolhouse` - **Persistent app data:** `/opt/doris-schoolhouse/data` - **Published app port:** `8091` - **Workspace mount for D2L snapshot input:** `/home/fizzlepoof/.openclaw/workspace:/workspace/.openclaw-workspace:ro` ## Important NOMAD networking note NOMAD does **not** currently have PD's Docker-only external networks (`pangolin`, `ix-databases_shared-databases`). For NOMAD, Schoolhouse should: - publish `8091` on the host - let Pangolin/Newt target the host port externally - reach shared Postgres on PD over LAN TCP (`10.5.1.6:5432`) - reach LiteLLM / Qdrant / Paperless / n8n over their existing LAN/public endpoints ## Pre-deploy checklist 1. Copy the repo source into `/opt/doris-schoolhouse`. 2. Create a real `.env` from `.env.nomad.example`. 3. Replace placeholder values for: - `SESSION_SECRET` - `DATABASE_URL` password - `PAPERLESS_API_TOKEN` 4. Ensure the shared Postgres target database/user exist on PD. 5. Apply `app/db/schema.sql` against the `schoolhouse` database. 6. Ensure `/opt/doris-schoolhouse/data` exists and is writable by Docker. 7. Confirm Pangolin/Newt has a resource forwarding `schoolhouse.paccoco.com` to NOMAD host port `8091` if public access is wanted immediately. ## Current live integration status ### Working - Assignment intake webhook (`/webhook/school/intake/upload`) succeeded in live smoke testing on 2026-05-15. - Recording workflow (`/webhook/class/upload`) was repaired live on 2026-05-15 and now returns HTTP 200. - Direct Whisper transcription endpoint on NOMAD succeeded in live smoke testing. - LiteLLM `medium` on PD succeeded after its Ollama route was fixed. ## Suggested deploy flow ```bash sudo mkdir -p /opt/doris-schoolhouse/data sudo rsync -a --delete --exclude '.env' --exclude 'data/' /home/fizzlepoof/repos/truenas-stacks/home/doris-schoolhouse/ /opt/doris-schoolhouse/ cd /opt/doris-schoolhouse sudo cp .env.nomad.example .env # edit .env sudo docker compose --env-file .env config sudo docker compose --env-file .env up -d --build ``` ## Post-deploy verification ```bash curl -fsS http://127.0.0.1:8091/api/health curl -fsS http://127.0.0.1:8091/api/health/details curl -fsS http://127.0.0.1:8091/api/dashboard/summary ``` Then verify: - D2L snapshot counts load - assignment intake confirms into n8n/Paperless - recording conversion works inside container - recording downstream workflow returns success