6.7 KiB
MobilityOps Unraid deployment evidence
Outcome
- Deployment: PASS
- Gitea publication: PASS
- Gitea URL:
https://gitea.itworx.tech/Jens/MobilityOps - Visibility: private (verified in the Gitea web UI)
- Branch:
master - Verified baseline commit:
4bf9afbeff44088864e0844769d4dd0e4089d85b - Deployment implementation commit:
1e13943cffb2da8a328b5b1ea5e9b1fe73fdd774 - Server:
192.168.10.150 - Server directory:
/mnt/user/appdata/mobilityops - Compose project:
mobilityops - Application URL:
http://192.168.10.150:1236 - Port mapping: LAN
0.0.0.0:1236/[::]:1236toweb:80
Services and health
| Service | Runtime state | Health | Host exposure |
|---|---|---|---|
db |
running, 0 restarts | healthy | none (5432/tcp internal) |
api |
running, 0 restarts | healthy | none (8000/tcp internal) |
web |
running, 0 restarts | healthy | 1236:80 on LAN |
n8n |
running, 0 restarts | healthy | 127.0.0.1:15678:5678 only |
No unrelated container was stopped, recreated, or modified. Port 1236 was confirmed
unused by listeners, Docker containers, and existing Compose projects before deployment.
The requested directory did not exist and was created specifically for MobilityOps.
Deployment commands
The existing SSH aliases resolve to the requested hosts and keys (gitea.itworx.tech
for Gitea SSH and unraid for root access). No key was created, copied, or replaced.
The committed source was transferred from the workstation; Unraid has no Gitea key.
Repository publication used the SSH clone URL supplied by Gitea:
git remote add origin ssh://git@192.168.10.150:222/Jens/MobilityOps.git
git push -u origin master
git push origin --tags
Git and the Gitea web UI both verified master as the default branch, the full 15-commit
history, baseline commit 4bf9afbeff44088864e0844769d4dd0e4089d85b, and zero tags.
The remote tree contains no .env, local database, node_modules, virtual environment,
test cache, build cache, Playwright output, or browser binaries.
git archive --format=tar.gz --output=<temporary-archive> <commit>
scp <temporary-archive> unraid:/mnt/user/appdata/mobilityops/.deploy/source.tar.gz
ssh unraid
cd /mnt/user/appdata/mobilityops
tar -xzf .deploy/source.tar.gz
./deploy/unraid/configure-env.sh http://192.168.10.150:1236
docker compose -p mobilityops -f compose.yaml -f compose.unraid.yaml up --build -d
docker compose -p mobilityops -f compose.yaml -f compose.unraid.yaml exec -T api \
python -m app.cli seed --reset
./deploy/unraid/setup-n8n.sh http://127.0.0.1:15678
docker compose -p mobilityops -f compose.yaml -f compose.unraid.yaml exec -T n8n \
n8n import:workflow --input=//imports/mobilityops-return-processing.json
docker compose -p mobilityops -f compose.yaml -f compose.unraid.yaml exec -T n8n \
n8n publish:workflow --id=mobilityops-return-processing
docker compose -p mobilityops -f compose.yaml -f compose.unraid.yaml restart n8n
The server .env was created from .env.example, is mode 0600, and contains generated
runtime secrets. Secret values and n8n owner credentials remain server-only and are not
included here or in Git.
Validation evidence
- Migration:
e7b08389f47f (head). - Deterministic seed: users 2, customers 180, vehicles 50, bookings 246, inspections 75, maintenance 40, data-quality issues 26, workflow runs 20.
- HTTP:
GET /returned 200;GET /healthreturned{"status":"ok","service":"mobilityops-api"}through the web proxy. - Backend gates in an isolated local Compose project: 66 tests passed, Ruff clean, mypy clean across 44 files.
- Frontend:
npm ci && npm run buildcompleted (tsc -b && vite build). - Logs: no traceback, fatal, uncaught, or unresolved startup error in the deployment log scan. Browser console had no warnings or errors during the smoke test.
- Browser smoke test in Chrome: Operations Manager demo login, Dashboard, Vehicles, Bookings, Data Quality, Knowledge, Automation, and Audit all loaded from the LAN URL.
- Dashboard showed persisted seed metrics (21 available, 11 rented, 6 cleaning, 5 maintenance, 7 blocked, 22 open issues, 1 pending/failed workflow).
- Return workflow:
BK-DEMO-RETURNaccepted 54,700 km, createdINSP-0076andDQ-RET-0076, preserved the 54,820 km canonical odometer, and changed the booking to returned. - n8n round trip: event prefix
250f6c0ereachedsucceededon attempt 1; the callback andreturn_registeredaudit events were visible in the UI. - Data quality:
DQ-RET-0076displayed the persisted regression evidence and related booking/inspection references. - Knowledge: UI truthfully showed
Provider: demo · available · 10 procedures indexed; the damage question returned grounded excerpts and citations from the local procedures.
Integration status
- RAGcore: disabled for this deployment;
KNOWLEDGE_PROVIDER=demo. No claim of a live RAGcore connection is shown. Operational functionality is unaffected. - ITWorx MCP Hub: registration disabled with
MCP_HUB_REGISTRATION_ENABLED=false; the independently authenticated provider endpoints remain available internally to the web proxy/API boundary, but no live Hub connection is claimed. - n8n: deployed, healthy, editor loopback-only, owner initialized, workflow imported and published, and a real return delivery succeeded.
Known limitations
- RAGcore and ITWorx MCP Hub are intentionally not connected yet.
- Demo authentication remains the accepted HMAC-cookie PoC mechanism.
- The dependency advisories already documented in final acceptance remain unchanged.
Redeploy
From the workstation, create an archive of the desired committed revision and transfer it
to .deploy/source.tar.gz. On Unraid, preserve .env and the named volumes, then run:
cd /mnt/user/appdata/mobilityops
tar -xzf .deploy/source.tar.gz
docker compose -p mobilityops -f compose.yaml -f compose.unraid.yaml up --build -d
docker compose -p mobilityops -f compose.yaml -f compose.unraid.yaml exec -T api alembic current
curl -fsS http://127.0.0.1:1236/health
Logs
cd /mnt/user/appdata/mobilityops
docker compose -p mobilityops -f compose.yaml -f compose.unraid.yaml ps
docker compose -p mobilityops -f compose.yaml -f compose.unraid.yaml logs --tail=200
docker compose -p mobilityops -f compose.yaml -f compose.unraid.yaml logs -f api web n8n
Safe rollback
Choose a known-good commit on the workstation, archive and transfer it as above, then on
Unraid extract it over the identifiable MobilityOps source directory and run the same
up --build -d command. Preserve .env and both named volumes; do not use down -v,
remove volumes, prune Docker, or modify unrelated containers. Check the target commit's
Alembic compatibility before rolling application code behind the current database schema.