Capture container topology, deployed revision, migration head, volumes, network and env-var names on the existing review deployment before any functional-completion changes, per the audit brief's server-first workflow.
112 lines
4.7 KiB
Markdown
112 lines
4.7 KiB
Markdown
# Unraid server baseline (functional-completion audit)
|
|
|
|
Captured 2026-08-02 before any functional-completion changes, via `ssh unraid` (alias in
|
|
`~/.ssh/config`, key `itworx_unraid_deploy`; the `widefrog_unraid_deploy` identity named in
|
|
the task brief does not exist locally — the working alias/key was used instead, no new key
|
|
was created).
|
|
|
|
## SSH access
|
|
|
|
```bash
|
|
ssh -o BatchMode=yes -o ConnectTimeout=10 unraid "hostname && docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'"
|
|
```
|
|
|
|
Result: reachable, host `Tower`. `widefrog_unraid_deploy` is not a valid identity path on
|
|
this workstation (`~/.ssh/widefrog_unraid_deploy` does not exist); the pre-existing
|
|
`unraid` SSH config alias (`itworx_unraid_deploy` key, root@192.168.10.150:22) was used
|
|
instead and is fully functional. No key was created, copied, or replaced.
|
|
|
|
## Deployed containers (Compose project `mobilityops`)
|
|
|
|
| Container | Image | Status | Health | Restarts | Host port |
|
|
|---|---|---|---|---|---|
|
|
| `mobilityops-web-1` | `mobilityops-web` | Up | healthy | 0 | `1236:80` |
|
|
| `mobilityops-api-1` | `mobilityops-api` | Up | healthy | 0 | none (compose-network only) |
|
|
| `mobilityops-db-1` | `postgres:16-alpine` | Up | healthy | 0 | none (compose-network only) |
|
|
|
|
Shared host `n8n` container (outside the `mobilityops` Compose project, pre-existing
|
|
infrastructure): Up, healthy, `5678:5678`, on the default `bridge` network (not on
|
|
`mobilityops_mobilityops`).
|
|
|
|
Deployment directory: `/mnt/user/appdata/mobilityops` (matches `docs/17-runbook.md` /
|
|
`deploy/unraid/README.md`).
|
|
|
|
## Deployed revision
|
|
|
|
`.deploy/source-revision` on the server contains:
|
|
|
|
```
|
|
54dc952915a4874fcdf14781e1c37feb0e253851
|
|
```
|
|
|
|
This matches the local `design/mobilityops-premium-ui` HEAD (`54dc952`) exactly — the
|
|
server is running the last committed premium-design revision, confirming the externally
|
|
observed branch/revision. `.deploy/` also retains prior archives
|
|
(`source-a737860.tar.gz`, `source-686b62f.tar.gz`, `source.tar.gz`) for rollback.
|
|
|
|
## Migrations
|
|
|
|
```bash
|
|
docker compose -p mobilityops exec -T api python -m alembic current
|
|
# e7b08389f47f (head)
|
|
```
|
|
|
|
Matches the local repository's Alembic head (`backend/alembic/versions/`:
|
|
`c9498525abb5_initial_schema.py` → `e7b08389f47f_idempotency_records.py`). No drift.
|
|
|
|
## Volumes and network
|
|
|
|
- `mobilityops_mobilityops-db` (Postgres data, named/persistent)
|
|
- `mobilityops_mobilityops-n8n` (retained from an earlier bundled-n8n attempt; unused now
|
|
that the shared host `n8n` is reused — see `compose.unraid.yaml` `bundled-n8n` profile)
|
|
- Network: `mobilityops_mobilityops` (bridge)
|
|
|
|
## Environment variable names present on the server `.env`
|
|
|
|
(names only — no values inspected or printed)
|
|
|
|
`APP_SECRET`, `COMPOSE_PROJECT_NAME`, `DATABASE_URL`, `DEMO_TODAY`, `KNOWLEDGE_PROVIDER`,
|
|
`MCP_HUB_BASE_URL`, `MCP_HUB_REGISTRATION_ENABLED`, `MCP_HUB_SERVICE_TOKEN`,
|
|
`MCP_PROVIDER_ID`, `MOBILITYOPS_API_URL`, `MOBILITYOPS_CALLBACK_TOKEN`,
|
|
`MOBILITYOPS_DEMO_MODE`, `MOBILITYOPS_ENV`, `MOBILITYOPS_PUBLIC_URL`, `N8N_BASE_URL`,
|
|
`N8N_BASIC_AUTH_ACTIVE`, `N8N_BASIC_AUTH_PASSWORD`, `N8N_BASIC_AUTH_USER`,
|
|
`N8N_ENCRYPTION_KEY`, `N8N_OWNER_EMAIL`, `N8N_OWNER_PASSWORD`, `N8N_WEBHOOK_URL`,
|
|
`POSTGRES_DB`, `POSTGRES_PASSWORD`, `POSTGRES_USER`, `RAGCORE_API_TOKEN`,
|
|
`RAGCORE_BASE_URL`, `RAGCORE_COLLECTION`, `RAGCORE_TENANT`, `RAGCORE_WORKSPACE`, `TZ`.
|
|
|
|
`diff` against the committed `.env.example` variable set: no difference — the server
|
|
`.env` was generated from the current `.env.example` with no drift in variable names.
|
|
|
|
## Integration configuration (as previously documented in
|
|
`artifacts/deployment/unraid-summary.md`, re-verified live)
|
|
|
|
- **n8n**: shared host instance at `http://192.168.10.150:5678`, healthy, outside the
|
|
MobilityOps Compose project. The bundled MobilityOps `n8n` service exists only behind
|
|
the `bundled-n8n` Compose profile and is not started.
|
|
- **RAGcore**: `KNOWLEDGE_PROVIDER=demo` — not live-connected by design; no live RAGcore
|
|
instance exists yet.
|
|
- **ITWorx MCP Hub**: `MCP_HUB_REGISTRATION_ENABLED=false` — provider endpoints exist and
|
|
are independently testable, but no live Hub round trip is claimed.
|
|
|
|
## Application reachability
|
|
|
|
```bash
|
|
curl -s -o /dev/null -w "%{http_code}\n" http://192.168.10.150:1236/
|
|
# 200
|
|
```
|
|
|
|
## Startup log scan
|
|
|
|
```bash
|
|
docker compose -p mobilityops logs --tail=200 api
|
|
```
|
|
|
|
No traceback, fatal, or unresolved startup error observed — only routine `GET /health`
|
|
polling entries from the Compose healthcheck.
|
|
|
|
## Configuration differences vs. the committed repository
|
|
|
|
None found: deployed source revision, Alembic head, and `.env.example` variable set all
|
|
match the current `design/mobilityops-premium-ui` branch exactly. This baseline was
|
|
captured immediately before any functional-completion work began.
|