ragserver — офисный хаб знаний и RAG-платформа¶
Центральный узел для сбора и выдачи знаний: держит локальную RAG-платформу (Open WebUI + Postgres + Qdrant) и выступает источником данных для внешних АИ-агентов (Perplexity Computer, Claude, собственных ботов). Живёт в офисной сети
192.168.1.0/24, публично доступен через nginx (80/443) подrag.alatyr-service.ru.⚠ Железо — временное (мини-ПК на i3-7100U, 8 GB RAM). Запланирована замена на более мощную машину для локального LLM-inference и больших embedding-моделей.
Быстрая справка¶
| Параметр | Значение |
|---|---|
| Hostname | ragserver |
| LAN IP | 192.168.1.200/24 по DHCP-резервации ASUS (38:49:06:3A:82:0F) |
| Публичный домен | rag.alatyr-service.ru → 176.99.153.164 (роутер) → 200:443 |
| ОС | Ubuntu 22.04.5 LTS |
| Kernel | 5.15.0-186-generic (проверено 05.08.2026) |
| CPU | Intel Core i3-7100U @ 2.40 GHz (2C/4T, VT-x) |
| RAM (физически) | 16 GB DDR3-1600 (1 модуль) |
| RAM (доступно системе) | 8 GB ⚠ (см. раздел «Железо») |
| Swap | 4 GB (на LVM) |
| Диск | SSD 2 TB (/dev/sda) |
| SSH | порт 22, oswold@, sudo с паролем |
| VPN | AmneziaWG клиент awg-rag (10.8.1.12 → 46.17.99.183:8443, GUI-managed) |
| Ollama (embeddings + локальный code assistant) | ollama.service на хосте (не в docker), слушает 192.168.1.200:11434 |
| RAG-sync | /opt/rag-sync/sync-to-openwebui.sh (см. rag-sync.md) |
| Проверено | 25.08.2026 |
Роль в инфраструктуре¶
Ragserver играет две взаимосвязанные роли:
1️⃣ Локальная RAG-платформа (Open WebUI)¶
Пользователь Роутер ragserver
браузер ──HTTPS──► 176.99.153.164:443 ──► 192.168.1.200:443
│
nginx (host)
│
▼
rag-openwebui:8080
(127.0.0.1:3000)
Для обхода блокировки OpenRouter в РФ используется AmneziaWG-туннель через VPS (46.17.99.183). Split-tunnel с FWMARK 0x1234 — только контейнер rag-openwebui (172.19.0.10) идёт в OpenRouter через AmneziaWG, остальной трафик — напрямую. Подробнее — в amneziawg-tunnels.md.
Синхронизация knowledge base из GitHub-репо alatyr-infra-kb в OpenWebUI knowledge collection выполняется скриптом /opt/rag-sync/sync-to-openwebui.sh. Подробнее — в rag-sync.md.
2️⃣ Центральный источник знаний для внешних АИ-агентов¶
╔═══════════════════════╗ ╔═══════════════╗ ╔═════════════════╗
║ ragserver ║ ║ GitHub ║ ║ Perplexity ║
║ /opt/knowledge/ ║ push ║ alatyr- ║ read ║ Computer ║
║ ├─ infra-kb ║──────►║ infra-kb ║◄──────║ (я) ║
║ ├─ personal-notes ║ ║ (private) ║ ║ Claude, боты ║
║ ├─ business/ ║ ║ ║ ║ API-агенты ║
║ └─ perplexity/ ║ ║ ║ ║ ║
║ ║ ║ ║ ║ ║
║ Qdrant (вектора) ║◄──sync──║ ║ ║ ║
║ Postgres (meta) ║ ║ ║ ║ ║
║ Open WebUI (UI) ║ ║ ║ ║ ║
╚═══════════════════════╝ ╚═══════════════╝ ╚═════════════════╝
Ключевая идея: вместо того чтобы каждый раз объяснять агенту контекст (кто я, что за проекты, какая инфраструктура) — агент сам подтягивает актуальные данные из центрального источника. Это:
- Повышает точность ответов — агент видит реальные IP, конфиги, решения, а не выдумывает
- Сокращает повторные объяснения в каждом новом чате
- Сохраняет контекст между сессиями и между разными агентами
- Даёт версионный источник правды (через git в GitHub)
Сбор знаний — что хранится на ragserver¶
Целевая структура (часть уже есть, часть в планах):
/opt/knowledge/
├── infra-kb/ # ✅ git repo alatyr-infra-kb (GitHub private)
│ ├── 00_INDEX.md
│ ├── vps-hostkey-vm-mini.md
│ ├── ragserver-workstation.md ← этот файл
│ └── ...
├── personal-notes/ # 🔄 Личные заметки (git-репо, VS Code, RAG)
│ ├── daily/ # ежедневные заметки
│ ├── projects/ # персональные проекты
│ └── references/ # материалы, выписки
├── business/ # 🔄 Бизнес-данные
│ ├── objects/ # объекты (из alatyr-service CRM)
│ ├── clients/ # клиенты (выгрузки)
│ └── financial/ # итоги по деньгам, Зен-Мни
└── perplexity/ # 🔄 Архив важных чатов
├── sessions/ # export важных тредов
└── knowledge/ # скомпилированные выводы из чатов
Статус каждого блока¶
| Блок | Статус | Где сейчас | Как агент читает |
|---|---|---|---|
infra-kb/ |
✅ Активно ведётся | в workspace + GitHub oswold1979/alatyr-infra-kb + локально /opt/rag-kb/ |
GitHub API (gh CLI, MCP-коннектор) + локальный RAG в OpenWebUI (коллекция alatyr-infra-kb) |
personal-notes/ |
🔄 План | git-репо (аналогично infra-kb), правки в VS Code | GitHub API + локальный RAG (коллекция personal) |
business/ |
🔄 Частично | в alatyr-service (МоёДело, МойСклад API) | выгрузка через CRM API + push в KB |
perplexity/ |
🔄 План | вручную через export тредов | через GitHub или pplx SDK |
Сценарии использования¶
A. Perplexity Computer (сейчас активно):
- Читает alatyr-infra-kb через GitHub connector — видит всю инфраструктуру, TODO, СП
- Перед ответом смотрит 00_INDEX.md — не выдумывает IP-адреса, а читает таблицу
- Пишет обновления в KB и коммитит в GitHub от вашего имени
B. Собственные боты в CRM (план):
- Telegram-бот берёт факты об объекте из business/objects/
- LLM-вызов из alatyr-service (Node.js) с RAG-контекстом из Qdrant
- Автоматические ответы клиентам на базе корпоративной базы знаний
C. Claude / ChatGPT / другие (позже):
- Отдают публичный уровень через GitHub raw URL (если есть коннектор)
- Или через web-интерфейс Open WebUI на rag.alatyr-service.ru (если вы входите сами)
Принципы безопасности KB¶
- Секреты (ключи, пароли, API-токены) в KB НЕ хранятся — только в Vaultwarden и
.envфайлах - Персональные данные клиентов — только в
business/с анонимизацией при пуше - Репо
alatyr-infra-kb— приватный на GitHub - Агенты с меньшим доверием — только read-only агрегаты без чувствительных деталей
Железо¶
⚠ Сегодняшнее железо — временное. Мини-ПК на i3-7100U/8GB. Цель — обкатать архитектуру и заменить на более мощную машину (целево: 32-64 GB RAM, GPU с видеопамятью ≥ 12 GB для локальных LLM и больших embedding-моделей). Факты по железу ниже — на 05.08.2026.
CPU¶
- Модель: Intel Core i3-7100U @ 2.40 GHz (Kaby Lake, mobile)
- Ядра/потоки: 2 ядра / 4 потока (Hyper-Threading)
- Частота: зафиксирована на 2.4 GHz (min 400 MHz, турбобуста нет у -U серии)
- VT-x: включён — Docker работает нативно, KVM возможен
- Тепловой пакет: 15W TDP — типично для мини-ПК / NUC-класса
- Ограничение: для CPU-inference LLM не подходит, но для оркестрации Open WebUI + Postgres + Qdrant + выдачи текстовых файлов в GitHub — хватает
RAM ⚠¶
- Физически установлен: 1 модуль 16 GB DDR3-1600 (двухсторонний)
- Доступно системе: только ~8 GB (
MemTotal: 8042608 kB) - BIOS-e820 показывает верхнюю границу
0xBFFFFFFF= 3 GiB, дальше нет - Причина: чипсет мобильного i3-7100U на этой материнке (Vendor/Model = «Default string» — самосборный/безымянный мини-ПК) вероятно не поддерживает 16 GB модули — распознаётся только половина
- Что делать при апгрейде:
- НЕ ставить один 16GB модуль — работает как 8GB
- Купить два модуля по 8 GB DDR3-1600 SODIMM (двойной ранк, если 2 слота) — суммарно 16 GB рабочих
- Проверить в мануале материнки максимум per-slot (может быть 8 GB)
Диск¶
- SSD 2 TB (
/dev/sda), non-rotational - Разметка (GPT + LVM):
- Занято: 21 GB / 98 GB (23%), свободно 73 GB
- ⚠ В VG свободно
1.76 TB— Ubuntu-установщик по умолчанию создал LV только на 100 GB - План на расширение (когда понадобится):
Или отдельным LV вынести
/var/lib/docker— тогда переполнение Docker не убъёт корень
GPU¶
- Отдельного GPU нет — только интегрированная Intel HD Graphics 620
- Локальный LLM-inference работает только на CPU. Для Continue используются
qwen2.5-coder:3bиqwen2.5-coder:1.5b; крупные модели 7B+ на текущих 8 GB RAM не устанавливаются. Open WebUI продолжает использовать OpenRouter для основных облачных чат-моделей. - Embeddings — на CPU через Ollama +
nomic-embed-text(137M параметров, 768-dim). Работает, но медленно: ~0.5-1 сек на чанк
Сетевые интерфейсы¶
| Интерфейс | Состояние | Адрес | Назначение |
|---|---|---|---|
enp2s0 |
UP | 192.168.1.200/24 (DHCP reservation) |
Основной Ethernet |
wlp1s0 |
DOWN | — | Wi-Fi (не используется) |
awg-rag |
UP | 10.8.1.12/32 |
AmneziaWG клиент → VPS |
br-83ca6e4bba84 |
UP | 172.19.0.1/16 |
Docker сеть rag-net |
docker0 |
DOWN | 172.17.0.1/16 |
Default Docker bridge (не используется) |
br-25ca11524b48 |
DOWN | 172.18.0.1/16 |
Устаревшая Docker-сеть (можно удалить) |
Шлюз по умолчанию: 192.168.1.1 (роутер ASUS RT-N12E).
Адрес закреплён на ASUS RT-N12E: 38:49:06:3A:82:0F → 192.168.1.200.
Активный /etc/netplan/01-netcfg.yaml использует DHCPv4, запрещает DNS от DHCP
и сохраняет DNS Инетком 194.187.205.226, 194.187.204.254.
50-cloud-init.yaml отключён как
50-cloud-init.yaml.disabled-2026-08-25. Резервная копия предыдущих YAML:
/root/netplan-pre-9c-2026-08-25_092353/.
Перезапуск systemd-networkd удаляет вручную созданное правило
fwmark 0x1234 → vpnroute. Поэтому для
awg-rag-split-tunnel.service установлен drop-in
/etc/systemd/system/awg-rag-split-tunnel.service.d/10-networkd.conf с
After=systemd-networkd.service и PartOf=systemd-networkd.service.
Контрольный restart networkd и полная перезагрузка подтвердили автоматическое
восстановление правила и выход rag-openwebui через 46.17.99.183.
Публичные порты (0.0.0.0)¶
| Порт | Сервис | Комментарий |
|---|---|---|
22/tcp |
SSH (стандартный) | Проверено 05.08.2026: UFW inactive, iptables INPUT ACCEPT |
80/tcp |
nginx | Редирект → HTTPS |
443/tcp |
nginx | Основной HTTPS для rag.alatyr-service.ru |
Проброс на роутере (ASUS RT-N12E): только 80/tcp и 443/tcp из внешнего интернета на 192.168.1.200. Проверено 05.08.2026.
Loopback-порты (127.0.0.1)¶
| Порт | Сервис | Контейнер |
|---|---|---|
3000 |
Open WebUI (HTTP) | rag-openwebui → :8080 |
5432 |
PostgreSQL 16 | rag-postgres |
6333 |
Qdrant HTTP API | rag-qdrant (защищён API-ключом) |
6334 |
Qdrant gRPC | rag-qdrant |
LAN-порты (192.168.1.200)¶
| Порт | Сервис | Где живёт |
|---|---|---|
11434 |
Ollama API | Host systemd (ollama.service, не в docker) |
⚠ Важно: Ollama слушает НЕ на 127.0.0.1, а на 192.168.1.200:11434 — поэтому из хоста доступ только через LAN IP. Контейнер rag-openwebui обращается к ней через host.docker.internal или через LAN IP 192.168.1.200:11434.
Никакие из loopback-портов снаружи не торчат — доступ только через nginx-reverse-proxy на rag.alatyr-service.ru.
RAG-платформа (Docker Compose + host Ollama)¶
Расположение docker-compose: /opt/rag-platform/
Стек: четыре компонента — три контейнера в сети rag-net (172.19.0.0/16) плюс Ollama на хосте.
| Сервис | Контейнер / Служба | Образ / Пакет | Хост-порт | Статус |
|---|---|---|---|---|
| Open WebUI | rag-openwebui (docker) |
ghcr.io/open-webui/open-webui:main |
127.0.0.1:3000 → :8080 |
healthy |
| PostgreSQL | rag-postgres (docker) |
postgres:16-alpine |
127.0.0.1:5432 → :5432 |
healthy |
| Qdrant | rag-qdrant (docker) |
qdrant/qdrant:v1.12.4 |
127.0.0.1:6333-6334 → :6333-6334 |
up (без healthcheck) |
| Ollama | ollama.service (host systemd) |
/usr/local/bin/ollama |
192.168.1.200:11434 |
active (running) |
Ollama (embeddings и локальные code-модели)¶
- Установленные модели на 26.08.2026:
nomic-embed-text:latest(embeddings)llama3.2:3bqwen2.5-coder:3b(Continue chat/edit/apply)qwen2.5-coder:1.5b(Continue autocomplete)- Запуск: systemd
ollama.serviceна хосте (unit:/etc/systemd/system/ollama.service, override в.d/override.conf) - Слушает:
192.168.1.200:11434— доступна из docker-контейнеров через LAN IP - CLI на хосте: использовать
OLLAMA_HOST=192.168.1.200:11434 ollama <команда>, потому что localhost не слушается - Ограничение: inference идёт на CPU; для автодополнения Continue установлен timeout 30 секунд
- Runbook: ai-editor-tools.md
Qdrant (векторное хранилище)¶
- Одна общая коллекция:
open-webui_knowledge— все векторы от всех knowledge collections OpenWebUI (не отдельные Qdrant-коллекции!) - Размерность:
768(соответствует nomic-embed-text) - Метрика:
Cosine,on_disk: false(в RAM для скорости) - API-ключ:
QDRANT_API_KEYв env docker-compose. ⚠ Утёк в чат 05.08.2026 — требует ротации
Volumes (все bind mounts на хост)¶
/opt/rag-platform/
├── data/
│ ├── openwebui/ → rag-openwebui:/app/backend/data
│ ├── postgres/ → rag-postgres:/var/lib/postgresql/data
│ └── qdrant/ → rag-qdrant:/qdrant/storage
├── scripts/
│ └── init-db.sql → rag-postgres:/docker-entrypoint-initdb.d/init.sql (ro)
├── docker-compose.yml
└── .env (POSTGRES_PASSWORD, WEBUI_SECRET_KEY, OPENAI_API_KEY, QDRANT_API_KEY)
Ollama хранит модели отдельно — обычно в /usr/share/ollama/.ollama/models/ или /var/lib/ollama/. Проверить: sudo ls /var/lib/ollama/.
Bind mount = легко бэкапить¶
cd /opt/rag-platform
sudo docker compose stop
sudo tar -czf ~/backups/rag-data-$(date +%F).tar.gz data/
sudo docker compose start
⚠ TODO: бэкап пока не настроен — добавить cron с ротацией (см. TODO).
Восстановление¶
cd /opt/rag-platform
sudo docker compose down
sudo tar -xzf ~/backups/rag-data-YYYY-MM-DD.tar.gz
sudo docker compose up -d
SSH-доступ¶
- Порт:
22/tcp(стандартный) - Пользователь:
oswold(обычный пользователь, sudo без пароля) - PermitRootLogin: проверить (
sudo grep PermitRootLogin /etc/ssh/sshd_config) - Ключевая аутентификация: пароль тоже работает (см. TODO про hardening)
- fail2ban: статус проверить (
sudo systemctl status fail2ban)
AmneziaWG клиент¶
- Интерфейс:
awg-rag - Локальный IP:
10.8.1.12/32 - Endpoint:
46.17.99.183:8443(VPS vm-mini) - Конфиг:
/etc/amnezia/amneziawg/awg-rag.conf - Режим:
Table = off, peerAllowedIPs = 0.0.0.0/0, ::/0 - Назначение: только маркированный FWMARK 0x1234 трафик из контейнера
rag-openwebui(172.19.0.10) идёт через туннель — для доступа к OpenRouter - Всё остальное — напрямую через
enp2s0 → 192.168.1.1 - Open WebUI и storage-api дополнительно публикуются на
10.8.1.12:3000и10.8.1.12:3100для входящих запросов через VPN. - Подробнее —
amneziawg-tunnels.md
Пути к важному¶
| Путь | Что там |
|---|---|
/opt/rag-platform/ |
Docker Compose проект RAG-платформы |
/opt/rag-platform/data/ |
Все bind-volumes (Postgres, Qdrant, Open WebUI) |
/opt/rag-platform/.env |
Секреты RAG-стека — не пушить в git! |
/opt/rag-kb/ |
✅ Git-клон alatyr-infra-kb (deploy key SSH, read-only), владелец oswold:oswold |
/opt/rag-sync/ |
✅ Sync-скрипт и state для RAG-синхронизации (700, oswold). См. rag-sync.md |
/opt/rag-sync/.env |
OPENWEBUI_API_TOKEN — не пушить в git! |
/etc/systemd/system/ollama.service |
Ollama unit (host, не docker) |
/etc/nginx/sites-enabled/rag.alatyr-service.ru |
Nginx reverse proxy (см. nginx-vps-configs.md, аналогично) |
/etc/letsencrypt/live/rag.alatyr-service.ru/ |
TLS-сертификат (см. certbot.md) |
/etc/amnezia/amneziawg/awg-rag.conf |
AmneziaWG клиентский конфиг (см. amneziawg-tunnels.md) |
/home/oswold/.ssh/id_ed25519_alatyr_kb |
SSH deploy key для GitHub (read-only) |
/home/oswold/ |
Домашняя директория пользователя |
Известные проблемы / TODO¶
Краткосрочно (текущая машина)¶
- Структура
/opt/knowledge/— создать каталогиpersonal-notes/,business/,perplexity/как git submodules или отдельные репозитории -
RAG-sync — клон rag-kb в✅ Сделано 05.08.2026 (см. rag-sync.md). Осталось: установить systemd timer или cron/opt/rag-kb/, крон-скрипт, embedding в Qdrant - RAG-sync — установить cron/timer — сейчас скрипт запускается только вручную
- Ротировать
QDRANT_API_KEY— утёк в чат 05.08.2026 при отладке эмбеддингов - Личные заметки → ragserver sync — решено 08.08.2026: отдельный git-репо
personal-notes(аналогично infra-kb), правки в VS Code, автосинк черезsync-to-openwebui.sh. См. knowledge-base-decision.md. Obsidian больше не используется. - Business-выгрузка — cron который тянет из alatyr-service PostgreSQL объекты/клиентов в
business/MD-файлы - Perplexity архив — выбрать метод export (pplx SDK, вручную, browser task)
- RAM: разобраться с 16 GB → 8 GB — либо купить два по 8 GB, либо оставить до замены железа
- Расширить
/— сейчас 100 GB из 1.86 TB VG. План:lvextend +500Gкогдаdf -h /покажет > 60% использования. Или отдельный LV под/var/lib/docker - Удалить брошенную Docker-сеть
br-25ca11524b48(172.18.0.0/16) —docker network prune - SSH hardening:
- Отключить
PasswordAuthentication(только ключи) - Проверить
PermitRootLogin no - Ограничить
AllowUsers oswold - Возможно, сменить порт на нестандартный
- Настроить бэкап
/opt/rag-platform/data/— cron, ротация, offsite-копия - Добавить healthcheck для Qdrant в docker-compose.yml
- Ротировать
POSTGRES_PASSWORD— засветился в чате Perplexity - Ускорить RAG-эмбеддинги —
RAG_EMBEDDING_BATCH_SIZE4→32,RAG_CHUNK_SIZE1000→2000. См. rag-sync.md - Мониторинг — сейчас нет метрик, только
docker compose ps. Возможно добавить простой Prometheus + node_exporter или облачный health-ping
Долгосрочно (новое железо)¶
- Замена железа — целевая конфигурация: 32-64 GB RAM, GPU ≥ 12 GB VRAM, SSD NVMe 2+ TB
- Локальные LLM крупнее 3B — после апгрейда железа: Ollama/vLLM с моделями Qwen, Llama и Mistral 7B+; текущие Qwen 1.5B/3B уже используются Continue на CPU
- Локальные embedding-модели покрупнее — сравнить nomic-embed-text vs mxbai-embed-large vs multilingual-e5. После GPU можно поднять до bge-m3 (568M)
- MCP-сервер на ragserver — чтобы внешние агенты (Claude Desktop через туннель) могли читать базу напрямую, а не через GitHub
История изменений¶
| Дата | Что |
|---|---|
| 2026-08-05 | Первая версия документа. Проверено железо, сеть, стек, порты. Добавлена вторая роль — центральный источник знаний для внешних агентов. |
| 2026-08-05 (вечер) | Дополнено: (1) Ollama работает на хосте как systemd, не в docker, слушает 192.168.1.200:11434. (2) Qdrant использует одну общую коллекцию open-webui_knowledge (768-dim, cosine). (3) Добавлены /opt/rag-kb/ (git clone) и /opt/rag-sync/ (sync script) — см. rag-sync.md. (4) Первый синк 10 файлов = 9m36s. (5) Обнаружена утечка QDRANT_API_KEY в чат — нужна ротация. |
| 2026-08-25 | Задача 9c: enp2s0 переведён со смешанной схемы static .200 + DHCP .43 на DHCP-only с резервацией .200 в ASUS. Добавлен systemd drop-in для восстановления split-tunnel после рестарта networkd. Проверено полной перезагрузкой. |
| 2026-08-26 | Задача 34: Ollama дополнен моделями qwen2.5-coder:3b и qwen2.5-coder:1.5b для Continue. Проверены chat, autocomplete и inline edit на CPU. |