devNVS/VPS — персональний сервер для AI і OSINT-автоматизації

Власна інфраструктура для AI-сервісів і OSINT-автоматизації: від локальної розробки до безперервного розгортання на сервері

DevOps · solo-build·2025–2026·devnvs@pm.me·Автор: Нестор Воля

Архітектурні принципи

Три ключові рішення

Архітектура

§ 1. Архітектурна модель (Architecture)

Система складається з двох вузлів з чітко розділеними ролями. devNVS — локальна Windows-станція, на якій відбувається вся розробка, планування і управління. VPS (Linux KVM) — віддалений сервер для безперервних сервісів і виконання задач.

ВузолРольСтек
devNVS (local) Planning · coding · git · SSH access · sessions Windows 10, i5-6500, 16 GB RAM
VPS (remote) 24/7 services · APIs · PostgreSQL · workers · Docker runtime Ubuntu 24.04, 2 vCPU, 8 GB RAM, 96 GB SSD
Локальні LLM не плануються. Відеокарта станції (GTS 450, 969 МБ відеопам'яті) не тягне навіть 7B-модель. Купувати GPU під dev-стек економічно не виправдано. Хмарний підхід: дорогі моделі — тільки для аналізу і синтезу, дешеві — для маршрутизації і класифікації.

§ 2. VPS service stack (Services)

Всі сервіси запущені в Docker Compose. Traefik — єдина точка входу із захистом TLS. Сервіси згруповані в ізольовані мережі; явні міжмережеві зв'язки — тільки між пов'язаними шарами.

ШарСервісРоль
EntrypointTraefikReverse proxy, wildcard TLS, routing
Project netsn8n + OSINT APIWorkflow adapter + OSINT data API
Project netsTCK BotSignal→PDF→AI→Decision pipeline
Project netsHermes AgentAI orchestration layer
Shared toolsCrawl4AIWeb scraping / document collection
Shared toolsOllamaLocal LLM (resource-sensitive; cloud-first)
Data layerPostgreSQL 16 + pgvector 0.8.2Structured truth, vector search
Data layerRedisCache / queue / event broker

Мережева схема

flowchart TB internet["Internet"] traefik["Reverse Proxy\n(Traefik · wildcard TLS)"] internet --> traefik subgraph shared["Shared Tools (shared_net)"] crawl4ai["Crawl4AI"] ollama["Ollama (LLM)"] end subgraph data["Data Layer (data_net)"] pg["PostgreSQL 16\n+ pgvector 0.8.2"] redis["Redis"] end subgraph projects["Project Networks (ізольовані)"] n8n["n8n + OSINT API\n(pipeline_net)"] tck["TCK Bot\n(tck_net)"] hermes["Hermes Agent\n(hermes_net)"] end traefik --> projects projects -. "explicit cross-network" .-> shared projects -. "explicit cross-network" .-> data

§ 3. Data architecture (Data)

osint-base — стійке ядро OSINT-даних: схема, API, скрипти. На VPS синхронізується через git і доступний через PostgreSQL / OSINT API. Проєкти-виробники записують дані через узгоджений API, а не напряму в схему.

ШарСховищеПравило
Структурована базаPostgreSQL + pgvectorFACT / SOURCE / GAP / DISC / ENTITY через API
Необроблені матеріалиExternal (GDrive)Не дублюються в БД; зберігаються як посилання
SecretsLocal .env (не в image)Не комітяться; не в logs; не в image
Принцип: проєкти замінні, дані стійкі. osint-base не залежить від конкретного проєкту-виробника. Сьогодні один пайплайн — завтра інший; база даних і API-контракт залишаються.

§ 4. Deployed projects (Projects)

ПроєктОписСтан
TCK Bot (HARON) Signal-запит → WhatsApp → PDF → AI-аналіз → висновок. Мобілізаційний відбір. SLA-ескалації, реєстр кандидатів, шифрування артефактів. Active
OSINT API + n8n OSINT pipeline API (FastAPI + PostgreSQL); n8n як адаптер автоматизації збору й обробки. Не центральна шина — окремий адаптер для проєкту. Active
Hermes Agent Рівень оркестрування AI: Claude Code як основний агент, Hermes — розгорнутий контейнер для автономних задач. Active
Crawl4AI + Ollama Спільні інструменти: збір даних із вебу і локальна LLM для швидкого виведення. Ollama — для задач де затримка важливіша за якість відповіді. Active

§ 5. Ключові архітектурні рішення (Decisions)

Agent-centered orchestration

Claude Code / Hermes = оркестратор. Потужні моделі — тільки для аналізу, синтезу і прийняття рішень. Маршрутизація і класифікація — дешеві моделі або правила. Чому: дорога модель на простій задачі — марна трата бюджету без виграшу в якості.

Project-per-network isolation

Кожен проєкт — окрема Docker-мережа. Явні міжмережеві зв'язки — тільки через shared/data шари. Неявні зв'язки між проєктами заборонені. Чому: без ізоляції компрометація одного контейнера поширюється на весь стек; явні зв'язки читаються в compose-файлі, неявні — ні.

Cloud-first LLM

Gemini Flash / Claude — основні моделі. Ollama — тільки там, де затримка важливіша за якість. Чому: наявна відеокарта (GTS 450, 969 МБ VRAM) не підходить для жодної сучасної мовної моделі; купувати GPU під dev-стек не виправдано.

PostgreSQL-first graph

Граф зберігається в PostgreSQL + pgvector (не Neo4j). Gephi / NetworkX — для аналізу; PostgreSQL — для постійного сховища. Чому: PostgreSQL вже є в стеку. Neo4j — це ще один тип БД для обслуговування. pgvector дає векторний пошук без додаткового сервісу.

n8n = optional adapter

n8n — не центральна шина, а адаптер для конкретного проєкту. Логіка — в Python/FastAPI; n8n лише як клей для автоматизацій. Чому: шина, на якій тримається все — єдина точка відмови. Якщо n8n падає, бізнес-логіка в FastAPI продовжує працювати.

Durable data core

osint-base незалежний від проєктів-виробників. Запис даних — тільки через API-контракт. Зміни схеми — тільки через план міграції і план відкату. Чому: проєкти закінчуються — курс, підрядник, ітерація. Дані не мають залежати від того, хто їх створив.

§ 6. Milestones (Done)

СтатусMilestone
SSH + Traefik + TLS — базова інфраструктура
PostgreSQL 16 + pgvector 0.8.2 — шар даних
TCK Bot — перший розгорнутий сервіс
infra_net / shared_net / data_net / мережі проєктів — ізоляція
osint-base → стійке ядро даних (схема + API + скрипти)
n8n + OSINT API на data_net
Хмарний файрвол + захист Redis + 4 ГБ swap
Hermes agent — рівень оркестрування
STORAGE_BACKEND=postgres (подвійний запис перевірено)