Files
MobilityOps/artifacts/deployment/unraid-summary.md
T

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 / [::]:1236 to web: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 /health returned {"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 build completed (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-RETURN accepted 54,700 km, created INSP-0076 and DQ-RET-0076, preserved the 54,820 km canonical odometer, and changed the booking to returned.
  • Shared-n8n round trip: final post-deploy event 98eb06dc-0bcc-4e3d-96ec-c23b2d266293 reached succeeded on attempt 1 with no last error; the deterministic reset afterwards restored BK-DEMO-RETURN to active.
  • Data quality: DQ-RET-0076 displayed 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:5678 is 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.