Files
MobilityOps/deploy/unraid/README.md
T
NuklearRabbit 5d7a5e7359
MobilityOps acceptance / backend (push) Canceled after 0s
MobilityOps acceptance / frontend (push) Canceled after 0s
M19: harden performance and recovery
2026-08-10 12:51:41 +02:00

2.8 KiB

Unraid deployment

MobilityOps is deployed from a committed source archive; the server does not need Gitea credentials. The portable compose.yaml is combined with compose.unraid.yaml; of the MobilityOps-owned services, only the web application is reachable from the LAN. The host's existing shared n8n remains available on its established port 5678.

Server layout

  • Directory: /mnt/user/appdata/mobilityops
  • Compose project: mobilityops
  • Web: http://192.168.10.150:1236 (1236 on the host to 80 in web)
  • API and PostgreSQL: Compose network only
  • Shared n8n: http://192.168.10.150:5678 (outside the MobilityOps Compose project)

Deploy

Create .env from .env.example, replace every placeholder secret, set MOBILITYOPS_ENV=production, set both public URLs to http://192.168.10.150:1236, and retain KNOWLEDGE_PROVIDER=demo while RAGcore is not available. Keep MCP_HUB_REGISTRATION_ENABLED=false until the central Hub is ready.

cd /mnt/user/appdata/mobilityops
./deploy/unraid/configure-env.sh \
  http://192.168.10.150:1236 \
  http://192.168.10.150:5678/webhook/mobilityops-return
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 api \
  python -m app.cli seed --reset

Migrations run automatically in the API entrypoint. Import and publish the MobilityOps workflow into the existing n8n container:

./deploy/unraid/setup-existing-n8n.sh \
  n8n \
  http://192.168.10.150:1236/api/v1/integrations/n8n/return-callback

The callback token remains server-side and is never written to the repository. The bundled n8n service is retained only as a standalone fallback behind the explicit bundled-n8n Compose profile; it is not started in this deployment.

Operate

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 exec api alembic current
docker logs --tail=200 n8n

Backup and restore

Create and structurally verify a timestamped PostgreSQL custom-format backup:

./deploy/unraid/backup-postgres.sh

Copy backups off the server according to the host backup policy. A restore is deliberately guarded and creates an additional safety backup before replacing the database:

./deploy/unraid/restore-postgres.sh \
  backups/postgres/mobilityops-YYYYMMDDTHHMMSSZ.dump \
  RESTORE-MOBILITYOPS

The restore stops the API, recreates only the configured MobilityOps database, restarts API/web and verifies the active Alembic revision. Test restores in a disposable environment before using a production backup for incident recovery.