entrypoint https->websecure, lightrag env mapped to native LLM_/EMBEDDING_ names (EMBEDDING_DIM=4096), ollama tag qwen3-next:80b-cloud. End-to-end ingest verified (4 entities, 3 relations). modulair-rag fc68a16 (unpushed). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
11 KiB
modulair-rag-vds-redeploy
Goal
Re-deploy the lost modulair-rag stack (4 containers) from the dead Synology NAS onto the VDS (89.253.255.94, rusonyx). Fresh start — knowledge base + pipeline cache were on lost named volumes, not critical (deploy was only ~1 week old). This .admin project owns the ops; modulair-rag repo stays the consumer.
Source of truth (read before acting)
- Full context-freeze (canonical):
~/projects/modulair-rag/.wiki/concepts/nas-loss-vds-redeploy-context.md— pre-flight, deploy steps, acceptance, post-deploy. (Note: currently uncommitted in the modulair-rag repo, but present on disk.) - Compose file (deploy as-is):
~/projects/modulair-rag/compose.yml— 4 services, named volumes,proxyexternal network. Do not edit; paste into Portainer. - Design spec (architecture):
mcp__projects-meta__knowledge_get slug="concepts/modulair-rag-design"(shared wiki). - Stack identity (NAS-era, now stale):
~/projects/modulair-rag/.wiki/entities/portainer-stack.md.
VDS state — VERIFIED 2026-05-27 (via vds-ops ops_docker_ps / ops_docker_inspect)
- ✅ MinIO container
minio/minio:latestrunning 4d on VDS — the original blocker is CLEARED. - ✅ postgres:16 running; on networks
proxy(172.18.x) andshared-dbs, aliasespostgres. → hostnamepostgres:5432frommodulair-pipeline/modulair-mcp(which sit onproxy) will resolve. Compose's cross-stack DB reference is sound, no extra network wiring needed.- Minor: postgres runs with
ssl=on; libpq defaultsslmode=prefernegotiates automatically — not a blocker.
- Minor: postgres runs with
- ✅
registry:2.8.3(registry.kzntsv.site) running — imagesmodulair-pipeline:latest,tier1-converter:latest,modulair-mcp:latestwere pushed 2026-05-13 (per context-freeze). Verify they're still present before deploy. - ✅
traefik:v2.11running — compose labels targetmodulair-mcp.kzntsv.site. - ⛔ None of the 4 modulair containers exist yet (
lightrag-modulair,modulair-pipeline,tier1-converter,modulair-mcp) — clean deploy.
Pre-flight — admin must verify/create (NOT visible to read-only vds-ops)
- MinIO bucket
modulair-ragexists. MinIO container is up but bucket membership is internal — create if missing (mc mb). - Postgres DB
modulair_ragexists →CREATE DATABASE modulair_rag;if not. lightrag self-creates its schema on first start — do NOT pre-init tables. - DNS
modulair-mcp.kzntsv.site→ VDS IP89.253.255.94(likely still points at the dead NAS — repoint via regru/cloudflare). - MinIO endpoint sanity: compose env uses
MINIO_ENDPOINT=minio.kzntsv.site:443(SSL, hairpin via traefik back to the VDS minio). Confirm traefik routeminio.kzntsv.sitenow points at the VDS minio container, and DNS resolves to VDS. (Alternative: directminio:9000on a shared network if both end up onproxy— only if the external route is problematic.) - Secrets via pass (pattern from
[secrets-manager-adopt]):pass insert modulair-rag/routerai-key pass insert modulair-rag/ollama-api-key pass insert modulair-rag/minio-access-key pass insert modulair-rag/minio-secret-key pass insert modulair-rag/postgres-password
Deploy (Portainer — per .admin VDS-ops rule, NOT ssh+compose)
- Open Portainer
https://portainer.vds.kzntsv.site. - New Stack → paste
~/projects/modulair-rag/compose.ymlas-is. - Environment vars — fill from
pass show+ statics:ROUTERAI_API_KEY(pass),ROUTERAI_BASE_URL=https://routerai.ru/api/v1,ROUTERAI_EMBED_MODEL=qwen3-embedding-8bOLLAMA_API_KEY(pass),OLLAMA_HOST=https://ollama.com,OLLAMA_LLM_MODEL=qwen3-next:latestMINIO_ENDPOINT=minio.kzntsv.site,MINIO_PORT=443,MINIO_USE_SSL=true,MINIO_FORCE_PATH_STYLE=true,MINIO_BUCKET=modulair-rag,MINIO_REGION=us-east-1,MINIO_ACCESS_KEY/MINIO_SECRET_KEY(pass)POSTGRES_USER,POSTGRES_PASSWORD(pass),POSTGRES_DB=modulair_ragIMAGE_TAG=latest
- Pre-pull images, Deploy.
Acceptance
- 4 containers up, no restart-loops (
ops_docker_pson VDS). lightrag-modulair :9621healthcheck responds (internal network, not exposed).https://modulair-mcp.kzntsv.site→ 200 on root.modulair-pipeline+tier1-converterNOT in CPU-spin — fix[pipeline-tier1-cpu-fix]already in:latest(commits24c9bd5+ceb525e).modulair-pipelinelog: noconnection refusedto postgres.- pipeline log: no
NoSuchBucket/AccessDeniedfrom MinIO.
Post-deploy
- Rewrite
~/projects/modulair-rag/.wiki/entities/portainer-stack.mdfor VDS (Docker host, Portainer URL, MinIO endpoint). - Close this 🟢 task with note.
[future-resilient-architecture-goals]— add modulair-rag to RTO/RPO matrix (low priority, non-client prod, but host-loss recovery should be documented).
Decisions log
-
2026-05-27 (exec session, .admin): pre-flight verify вскрыл, что таска писалась по stale-предпосылкам. Исправления:
- Registry образы ОТСУТСТВУЮТ (open-q #1 = NO). Registry на VDS переустановлен с нуля 2026-05-20 (
pass vds-kzntsv/full-envкоммент: "не мигрировали с kreknin — user accepts loss"). Образы push'ились 2026-05-13 на kreknin-registry → потеряны. Каталогregistry.kzntsv.site/v2/_catalog: только books/board/vds-ops. → rebuild всех 3 обязателен. - MINIO_ENDPOINT исправлен (open-q #2):
minio.kzntsv.site→ 89.253.255.133 (books VDS, чужой!). Правильный route на этом VDS =minio.vds.kzntsv.site(traefik label на minio-контейнере =Host(minio.vds.kzntsv.site), health/live=200). tier1-converter сидит только наmodulairbridge (НЕ наproxy) → внутреннийminio:9000для него не резолвится → нужен внешний route для всех. Итог env:MINIO_ENDPOINT=minio.vds.kzntsv.site, PORT=443, SSL=true. Compose не редактирую (paste-as-is), это env-var. - MinIO creds: создан scoped svcacct
modulair-rag-svc(политика — только bucketmodulair-rag, verified видит только свой bucket). Не root. →pass modulair-rag/minio-{access,secret}-key. - MinIO bucket
modulair-ragсоздан (mc, локальный alias на minio.vds.kzntsv.site root creds). - Postgres DB
modulair_ragсоздана наpostgres.vds.kzntsv.site:5432(docker one-off psql, sslmode=require). POSTGRES_USER=postgres (shared), pwd изpass vds-kzntsv/full-env. - DNS
modulair-mcp.kzntsv.site→ был 94.19.247.14 (мёртвый NAS = домашний IP). User поправил → 89.253.255.94 (verified public+authoritative). - ROUTERAI key не было в pass — user дал, сохранён
pass modulair-rag/routerai-key. OLLAMA key =pass interns/ollama-cloud-api-key. - Portainer API key протух (401) → auth через admin user/pass (
pass vds-kzntsv/full-env), endpoint=1 (local). - BUILD-БЛОКЕР: tier1-converter = 10.2GB (3.36GB сжатый). Push с локальной машины падал HTTP 499 (home-канал/middlebox рвёт многогиг HTTPS-заливку через traefik; docker push монолитный, без resume). → Решение: сборка НА VDS (
ssh vitya@89.253.255.94ключ~/.ssh/id_ed25519, vitya в docker-группе; клон приватного репо из локального giteagit.kzntsv.site/cancel_music/modulair-ragюзером OpeItcLoc03 + admin-token; push registry локально). services/ на origin/master идентичен локальному HEAD (cpu-fix ceb525e внутри). IMAGE_TAG=0.1.0.
- Registry образы ОТСУТСТВУЮТ (open-q #1 = NO). Registry на VDS переустановлен с нуля 2026-05-20 (
-
2026-05-27 (DEPLOY ✅): стек
modulair-rag(Portainer stack id=15, endpoint=1) развёрнут. Образы 0.1.0 (pipeline/tier1-converter/modulair-mcp) собраны на VDS + lightrag ghcr.io/hkuds/lightrag:latest. Acceptance 6/6 green: 4 контейнера up без restart-loop; lightrag Uvicorn :9621 startup complete; https://modulair-mcp.kzntsv.site → 200 (uvicorn, /docs тоже 200); pipeline+tier1 0% CPU (cpu-fix ok); pipeline-лог без postgres/minio ошибок.- +1 compose-фикс при деплое: лейбл
traefik...modulair-mcp.entrypoints=https— NAS-имя; на этом VDS entrypoints =web/websecure(читал/opt/stacks/traefik/data/traefik.yml). Без фикса traefik default-404. Поправлено в live-стеке (PUT, https→websecure). TODO в репо modulair-rag/compose.yml — закоммитить тот же фикс, иначе следующий redeploy снова 404.
- +1 compose-фикс при деплое: лейбл
Post-deploy / follow-ups
- modulair-rag/compose.yml —
entrypoints=https→websecure(commitfc68a16). Параллельная сессия завершилась (tree clean), сделал сам. - modulair-rag/.wiki/entities/portainer-stack.md — переписана под VDS (stack 15, websecure, minio.vds, build-on-VDS workflow, model-config table) + log.md entry (
fc68a16). - #3 lightrag embedding — RESOLVED & verified end-to-end. Был latent-баг (с NAS): stock-образ LightRAG читает
LLM_*/EMBEDDING_*, а неROUTERAI_*/OLLAMA_*→ дефолты (binding=ollama model=None dim=1024). Замаплены stack-inputs на нативные имена в compose:EMBEDDING_BINDING=openai(RouterAI qwen/qwen3-embedding-8b, DIM=4096),LLM_BINDING=ollama(Ollama Cloud). LLM-тегqwen3-next:latest→ 404 на Ollama Cloud → исправлен наqwen3-next:80b-cloud(user-confirmed;qwen3-next:80bтоже валиден). Live-smoke на VDS: insert → embedding(RouterAI)+extraction(Ollama) →4 entities, 3 relations, потом workspace очищен.compose.yml+lightrag-models.md(fc68a16). [future-resilient-architecture-goals]— добавить modulair-rag в RTO/RPO matrix (low prio).- PUSH:
modulair-rag fc68a16+.admintask-коммиты unpushed (автопуш не выдан в этой сессии).
Open questions
- Registry images present? → NO, rebuilt on VDS (см. Decisions).
- minio.kzntsv.site repointed? → NO, это books VDS; используем
minio.vds.kzntsv.site.
Branch: master