6.9 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 |
shared host n8n |
running | healthy | 5678:5678 on LAN; outside MobilityOps Compose |
The final review topology reuses the n8n container that was already running on the host.
Its empty public-host/editor URL settings were corrected in the persistent Unraid template
so workflow execution URLs are valid. The temporary Compose-owned n8n container was
removed without deleting its retained volume. Port 1236 was confirmed unused before the
original deployment; the application directory 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 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 db api web
docker compose -p mobilityops -f compose.yaml -f compose.unraid.yaml exec -T api \
python -m app.cli seed --reset
./deploy/unraid/setup-existing-n8n.sh \
n8n \
http://192.168.10.150:1236/api/v1/integrations/n8n/return-callback
docker compose -p mobilityops -f compose.yaml -f compose.unraid.yaml up -d db api web
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. - Shared-n8n round trip: final verification event
b32a593e-c946-4782-a180-518385b66b50reachedsucceededon attempt 1 with no last error; the deterministic reset afterwards restoredBK-DEMO-RETURNtoactive. - 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: the existing server instance at
http://192.168.10.150:5678is healthy; the MobilityOps workflow is imported/published there and a real return delivery succeeded. The bundled MobilityOps service is disabled by default in the Unraid overlay.
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 db api web
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
docker logs -f 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.