Перейти к содержанию

Инфраструктура: обзор и карта связей

Главный обзорный файл базы знаний «Инфраструктура». Отвечает на вопросы «как устроено», «куда идёт запрос», «где что искать». Детали каждого компонента — в отдельных файлах.

Владелец: Роман Головин (ИП, Железнодорожный, МО) Актуально на: 26.08.2026


Верхнеуровневая схема

                            ИНТЕРНЕТ
     ┌──────────────────────────┼──────────────────────────┐
     │                          │                          │
     ▼                          ▼                          ▼
 ┌─────────────────┐      ┌─────────────────┐     ┌──────────────────┐
 │  VPS Hostkey    │      │ Домашний        │     │ Внешние сервисы  │
 │  (vm-mini)      │      │ роутер ASUS     │     │ MoySklad, Моё    │
 │  46.17.99.183   │      │ RT-N12E         │     │ Дело, Avangard,  │
 │  Netherlands    │      │ WAN:            │     │ OpenRouter, LE   │
 │                 │      │ 176.99.153.164  │     └──────────────────┘
 │ • nginx (80/443)│      │                 │
 │ • Docker:       │      │ Проброс портов: │
 │   - Vaultwarden │      │  80/tcp   →     │
 │ • AmneziaWG     │      │  443/tcp  →     │
 │   docker srv    │      │  → 192.168.1.200│
 │ • fail2ban      │      │  (только 80/443)  │
 │ • certbot       │      │                 │
 │                 │      └────────┬────────┘
 │ Домены (nginx): │               │
 │  alatyr-serv.ru │      LAN 192.168.1.0/24
 │  vault.~        │               │
 │  www.~          │               ▼
 │  alatyr-taverna │      ┌─────────────────────────┐
 └────────┬────────┘      │  Ragserver              │
          │               │  192.168.1.200          │
          │  AmneziaWG    │  Ubuntu 22.04.5         │
          │  10.8.1.0/24  │                         │
          └──────────────►│  • nginx (80/443)       │
                          │    → rag.alatyr-serv.ru │
                          │  • Docker: rag-platform │
                          │    - Open WebUI :3000   │
                          │    - Qdrant :6333/6334  │
                          │    - Postgres :5432     │
                          │  • Ollama :11434 (host) │
                          │  • rag-sync → GitHub    │
                          │    /opt/rag-kb/         │
                          │    /opt/rag-sync/       │
                          │  • fail2ban             │
                          │  • certbot              │
                          │                         │
                          │  Домен:                 │
                          │   rag.alatyr-service.ru │
                          │   (DNS → 176.99.153.164)│
                          └─────────────────────────┘

🚀 Что работает (накопленные победы)

VPS 46.17.99.183 (Hostkey vm-mini)

  • Ubuntu, nginx, Let's Encrypt автообновление через certbot
  • Vaultwarden на vault.alatyr-service.ru — личный менеджер паролей
  • AmneziaWG VPN gateway — тоннели стабильны
  • alatyr-service.ru — Node.js/TS сайт, SQLite (в CRM-миграции → Postgres)
  • GitHub Actions автодеплой для alatyr-service — рабочий build/deploy pipeline с SQLite backup перед обновлением
  • ЮKassa активна в production — магазин только ИП Головин Артём (korobochka), чек 54-ФЗ и webhook payment.succeeded проверены реальным платежом 1 ₽; runbook
  • alatyr-taverna — статический MVP фэнтезийной таверны
  • fail2ban, бэкапы Vaultwarden, DNS на Reg.ru

Ragserver 192.168.1.200 (домашний мини-ПК)

  • Ubuntu 22.04.5, юзер oswold
  • RAG-стек в docker /opt/rag-platform/: Open WebUI + Postgres + Qdrant
  • Ollama на host systemd — локальные LLM
  • nginx reverse proxy с HTTPS для Open WebUI
  • Синхронизация KB → OpenWebUI через sync-to-openwebui.sh, user cron oswold каждые 10 минут с flock

GitHub (owner oswold1979, 4 приватных репо)

  • alatyr-infra-kb — база знаний, авто-коммиты
  • alatyr-service — Node.js/TS с работающим CI/CD
  • alatyr-taverna — React/Vite, autodeploy не установлен (задача TAV-02, runbook в skeletons/deploy-taverna-runbook.md); судьба проекта — задача TAV-01
  • alatyr — архивирован 06.08.2026

Автоматизация в Perplexity Computer

  • Ежедневный дайджест отключён 27.08.2026 — задача ba645ae6 удалена как неактуальная и потреблявшая лишние ресурсы
  • Perplexity Project "Alatyr Infrastructure" — persistent workspace с wiki
  • 4 memory-правила: git pull, auto-commit, wrap-up, ✅ в TODO

CRM (производственный контур в production, обновлено 27.08.2026)

  • Новое в августе 2026:
  • 51-storage (14.08): выделенный alatyr-storage-api https://storage-api.alatyr-service.ru на ragserver:8080, docker в /opt/alatyr-storage-api/, whitelist MIME, bearer-token (→ требует ротации, задача CRM-01)
  • 51h (14.08): вкладка архива в Объектах
  • 51-ui-tabs (14.08): рефакторинг табов карточки объекта
  • admin-nav-* (PR #42-44) (14.08): горизонтальное меню в 1 строку, 9 пунктов, ?tab=X в query ПЕРЕД hash (HashRouter fix)
  • 56 (14.08): isDirty + AlertDialog + beforeunload при уходе с несохранёнными правками паспорта
  • 51d (15.08): журнал работ — таб worklog в карточке объекта, ручные записи + вложения, source = manual/telegram/max (задел на 51g)
  • 51i / 51i-ui (15.08): сквозная нумерация YYYYMMDD-N корневая, дочерние -Д<n>/-С<n>/-А<n>, бейдж docNumber в верхнем меню и везде в CRM
  • редизайн публичного сайта (16–19.08): PR #64–#69 alatyr-service — новая главная, каталог услуг через /api/services/public, посадочные /technical-service, /cctv-maintenance, /rescue-cctv, /turnkey-project, прямые GET/HEAD маршруты, фиксы UX и SEO
  • 51e (16.08): PR #63 alatyr-service — вкладка «Материалы» в карточке объекта (Excel/PDF/JPG, привязка к договору, storage-api)
  • 40a (21.08): 142 услуги в 9 папках залиты в МойСклад (research + curl-пайплайн), /api/services/public отдаёт каталог, токен MOYSKLAD перевыпущен
  • архив «Усиление интернета под ключ» (20.08): готовый пакет услуги архивирован до валидации экономики в рамках CRM-35/CRM-52
  • 51f (23.08): чтение МоёДело read-only по объекту (PR #75 — контрагенты, договоры, счета, акты, MOEDELO_IMPORT_ENABLED=true, legacy push выкл), + PR #76–#81 — create-client-inline, автоподстановка ИНН/КПП/ОГРН/адресов/ФИО, тип ТСЖ, detail endpoint, fallback через ЕГРЮЛ/ЕГРИП, multi-contact для контрагентов (PR #81, deploy #32625769866). Поглотила задачи 41b/41c целиком и read-only вектор 41d
  • Понятные названия объектов (26.08, PR #90): импорт из МоёДело без названия проекта создаёт Объект заказчика «Название» вместо Проект МоёДело #ID; существующие заглушки переименовываются идемпотентным бэкфиллом при старте. Технический ключ md-{companyCode}-{projectId} сохраняется в БД для защиты от дублей, но скрыт из основного паспорта и заголовка карточки.
  • Двусторонние счета МоёДело (26.08, PR #91): canonical invoice связан с объектом, действующим основным договором, PDF и строками. При отправке недостающие товары/услуги создаются в категории Alatyr CRM; импорт и экспорт сверяются по marker ALATYR-INVOICE-ID. Неоднозначный ответ API переводит счёт в confirmation_pending без автоматического повторного POST. Код развёрнут, но MOEDELO_SYNC_ENABLED=false до проверки трёх старых ожидающих счетов.
  • Безопасный deploy-backup (26.08, PR #92): SQLite-копии перед обновлением сохраняются вне Git checkout в /var/backups/alatyr-service, поэтому git clean -fd их не удаляет; режим каталога 700, файлов 600, retention 30 дней.
  • Двусторонние акты МоёДело (26.08, PR #94): добавлены canonical object_acts, постраничный импорт отдельных актов, marker ALATYR-ACT-ID, безопасная отправка локальных PDF-актов и обмен статусом подписи OnHands. Любая запись требует успешной полной import-first сверки, точного canonical-контекста и одноразовой capability непосредственно перед запросом. Код развёрнут production run 32998796606; отдельный флаг MOEDELO_ACT_SYNC_ENABLED оставлен выключенным до контрольного обмена.
  • ИИ-помощник объекта (27.08, PR #95): merge-коммит b0f97d1 развёрнут в production. В карточке объекта появилась вкладка «Помощник» с manager-only API, persistent history в таблице object_assistant_messages, свежим ограниченным object context и защищённым HTTPS-вызовом Open WebUI. Контекст CRM отделён от system policy, глобальная knowledge-коллекция не прикладывается, ответы не меняют CRM, содержимое диалога исключено из application logs. Переменные RAG_API_* загружены в процесс; контрольный запрос пока не выполнялся по решению владельца.
  • Подсказки перевода заявки в объект (27.08, PR #96): кнопка в списке и карточке заявки при наведении перечисляет незаполненные обязательные поля, а при нажатии показывает тот же список рядом с действием. Проверяются собственная компания, название и адрес объекта; правила общие для обоих экранов и покрыты автоматическими тестами.
  • Единый lifecycle документов, фаза 1 (27.08, PR #97, merge 00bbbaa, deploy 33021301456): для object_contracts добавлены редактирование метаданных, архив, восстановление, одинаковые иконки действий и безопасные ограничения hard-delete. Фаза покрывает основные договоры, допники и PDF-представления счетов/актов; атомарный lifecycle canonical счетов и актов остаётся следующим срезом. Контрольные запросы к RAG и МоёДело не выполнялись.
  • toolkit-волна (16–22.08): серии PR order-crm-*, estimate-catalog-*, site-catalog-* — каталог в сметах, сайте и CRM-заявках переведён на единый источник МойСклад

  • crm-objects-spec.md — модель объектов, договоров, документов, монтажников, смен, начислений и выплат

  • crm-object-card-v2-spec.md — текущее ТЗ карточки объекта v2 (7 блоков, задача 51)
  • 51-storage-c-deploy.md — runbook alatyr-storage-api
  • crm-object-workers-ui-spec.md — UI/UX ТЗ карточки объекта, экрана сотрудников, персональных расчётов и табеля
  • my-companies.md — реквизиты обоих ИП; seed компаний и банковских счетов встроен
  • services-catalog.md — справочник разделов и услуг для seed
  • alatyr-service-strategy.md — позиционирование «Внешняя техническая служба объекта», целевой клиент, вход в обслуживание и границы обещаний сайта
  • rag-openai-business-assistants-roadmap.md — целевая архитектура бизнес-помощников: секретарь, сметчик, делопроизводитель, координатор, инженер, снабженец, финансовый контролёр и аналитик
  • В production: сотрудники, роли, ставки, назначения, клиенты, 2 ИП, банковские счета, объекты, документы, карточка заявки, история, счета и автопереход оплаченной заявки в объект; версионируемые условия оплаты, web/manual attendance, смены, разовые работы, начисления и выплаты
  • Заявки, объекты и сотрудники открываются на отдельных URL с breadcrumbs и возвратом к спискам; персональная карточка показывает отработанное, начисленное, выплаченное и остаток
  • В списках сотрудников оставлены основные данные и переход по имени; ставки, редактирование и кадровые действия находятся в карточке сотрудника
  • Увольнение и архивирование разделены: архив скрывает сотрудника из рабочих списков и новых назначений, но сохраняет прямую карточку и всю историю; постоянное удаление сотрудников отключено
  • Раздел называется «Объекты»; отдельные вкладки счетов и абоненток скрыты, абонентка является типом объекта
  • МоёДело read-only импорт включён (MOEDELO_IMPORT_ENABLED=true, PR #75): контрагенты, договоры, счета и акты втягиваются по объекту в preview/apply. Безопасный обратный контур счетов реализован в PR #91 и включён после fail-closed защиты PR #93. Двусторонний контур отдельных актов реализован в PR #94 и развёрнут, но его независимый write-флаг MOEDELO_ACT_SYNC_ENABLED оставлен выключенным до одного контролируемого production-обмена.
  • Архитектура: 2 ИП в одной CRM, финучёт уровень B; Telegram/MAX ingestion attendance остаётся будущим расширением, web/manual контур уже работает

Документация инфры (06.08.2026, Пакет A)

  • rag-platform-docker.md — docker-стек
  • openwebui.md — Open WebUI конфиг
  • qdrant.md — векторное хранилище
  • ollama.md — host systemd, модели
  • fail2ban.md — jails на VPS и ragserver
  • nginx-ragserver-config.md — reverse proxy rag.alatyr-service.ru
  • alatyr-taverna.md — React/Vite стек
  • dev-workflow.md — гайд «как ведём разработку»

Как летит запрос — типовые сценарии

Сценарий A: клиент открывает https://rag.alatyr-service.ru

Браузер
  → DNS ns1.reg.ru отвечает: A rag → 176.99.153.164
  → TCP 443 на 176.99.153.164 (домашний роутер)
  → NAT-проброс на 192.168.1.200:443
  → nginx на ragserver проверяет server_name = rag.alatyr-service.ru
  → nginx проверяет TLS (Let's Encrypt cert, valid до 2026-11-02)
  → proxy_pass http://127.0.0.1:3000
  → Open WebUI (контейнер rag-openwebui)
  → ответ обратно тем же путём

Сценарий B: Open WebUI обращается к OpenRouter (из РФ)

rag-openwebui (контейнер 172.19.0.10)
  → iptables mangle помечает пакет FWMARK
  → routing table: пакеты с меткой идут через awg-rag
  → AmneziaWG туннель до 46.17.99.183:8443
  → VPS Hostkey (NL) выходит в интернет как 46.17.99.183
  → OpenRouter API отвечает
  → обратно тем же путём (обратно приходит на awg-rag)

Split-tunnel: локальные подсети (192.168.1.0/24, 172.16.0.0/12) идут напрямую (RETURN), а всё остальное — через VPN (MARK 0x1234). Подробно: amneziawg-tunnels.md.

Сценарий C: клиент открывает https://alatyr-service.ru или https://vault.alatyr-service.ru

Браузер
  → DNS: A @ → 46.17.99.183 (или vault → тот же IP)
  → TCP 443 на VPS Hostkey
  → nginx VPS проверяет server_name
  → Для alatyr-service.ru / www:  proxy_pass http://127.0.0.1:5000  (Node.js Alatyr Service Platform)
  → Для vault.alatyr-service.ru:  proxy_pass http://127.0.0.1:8222  (docker-proxy → Vaultwarden в контейнере)

Сценарий D: клиент открывает https://alatyr-taverna.ru

Браузер
  → DNS: A → 46.17.99.183 (NS: ns1.reg.ru, ns2.reg.ru)
  → TCP 443 на VPS Hostkey
  → nginx VPS: server_name alatyr-taverna.ru
  → root /opt/alatyr/dist/ — статические файлы (Vite/TS build)
  → ответ (index.html, JS, CSS, ассеты)

Ragserver в сценариях C и D не участвует — это отдельная ветка на VPS.

Сценарий E: Perplexity читает RAG API

Perplexity Computer
  → HTTPS rag-api.alatyr-service.ru (46.17.99.183)
  → nginx VPS: только /api/, X-Edge-Auth + rate limit
  → host route 10.8.1.12/32 через amn0 → amnezia-awg2 (172.29.172.2)
  → SNAT внутри контейнера → awg0
  → ragserver 10.8.1.12:3000 → Open WebUI
  → OpenWebUI Bearer + read-only grant к alatyr-infra-kb

Постоянный маршрут: /usr/local/sbin/alatyr-rag-api-route.sh и alatyr-rag-api-route.service. Подробно: openwebui-public-api.md.

Сценарий F: помощник карточки объекта вызывает Open WebUI

Менеджер в admin alatyr-service
  → вкладка «Помощник» в карточке конкретного объекта
  → manager-only /api/admin/objects/:id/assistant
  → server-side context builder читает только разрешённые данные объекта
  → HTTPS rag-api.alatyr-service.ru
  → X-Edge-Auth + Open WebUI Bearer
  → private model wrapper / локальная модель
  → ответ сохраняется в object_assistant_messages

Текущий контур read-only: он не изменяет CRM, не отправляет сообщения и не прикладывает глобальную knowledge-коллекцию или содержимое бинарных документов. Следующие этапы, включая object-scoped OCR/RAG, сметчика, секретаря и управляемый OpenAI route: rag-openai-business-assistants-roadmap.md.


Все IP-адреса и роли

IP Роль Комментарий
46.17.99.183 VPS Hostkey (vm-mini) Netherlands, публичный, статический
176.99.153.164 Домашний WAN Статический от провайдера
192.168.1.1 Домашний роутер (LAN gw) ASUS RT-N12E
192.168.1.200 Ragserver LAN Ubuntu 22.04.5
10.8.1.12 AmneziaWG клиент на ragserver (awg-rag) endpoint 46.17.99.183:8443
172.19.0.0/16 Docker сеть rag-net Внутренняя, изолированная
172.19.0.10 Контейнер rag-openwebui Фиксированный IP (важно для FWMARK)
127.0.0.1 (VPS) Loopback VPS 5000 (Node), 8222 (Vaultwarden docker)
127.0.0.1 (rag) Loopback ragserver 3000, 5432, 6333, 6334
10.8.1.12:3000 Open WebUI API через AmneziaWG доступен VPS через узкий route/SNAT

WireGuard удалён полностью (05.08.2026): пакеты, ключи, конфиги, systemd-unit, iptables-правила. Активно используется только AmneziaWG (10.8.1.x172.29.172.x docker). На ragserver WireGuard никогда не было — там только AmneziaWG.


Все домены (Reg.ru, две зоны)

Зона alatyr-service.ru

DNS-запись Тип Значение Куда идёт трафик
@ A 46.17.99.183 VPS Hostkey → nginx → 127.0.0.1:5000 (Node.js)
www A 46.17.99.183 То же, что @
rag A 176.99.153.164 Домашний роутер → 192.168.1.200:443 → nginx → Open WebUI (docker)
rag-api A 46.17.99.183 VPS nginx → AmneziaWG container → 10.8.1.12:3000; только /api/
storage-api A 176.99.153.164 Роутер ASUS → 192.168.1.200:443 → nginx ragserver → 127.0.0.1:8080 (alatyr-storage-api docker)
vault A 46.17.99.183 VPS Hostkey → nginx → 127.0.0.1:8222 (Vaultwarden docker)
@ MX mx.yandex.net 20 Почта на Яндексе
@ TXT v=spf1 redirect=_spf.yandex.net SPF
@ TXT yandex-verification: 2080465008635af5 Верификация Яндекс

Зона alatyr-taverna.ru

DNS-запись Тип Значение Куда идёт трафик
@ A 46.17.99.183 VPS Hostkey → nginx → /opt/alatyr/dist/ (static Vite)

DNS-серверы обеих зон: ns1.reg.ru, ns2.reg.ru (бесплатные Reg.ru).


Все порты — что где слушает

VPS Hostkey (46.17.99.183, публичные порты)

Порт Сервис Файл конфига
22/tcp SSH /etc/ssh/sshd_config
80/tcp nginx HTTP /etc/nginx/sites-enabled/*
443/tcp nginx HTTPS То же
8443/tcp+udp AmneziaWG (docker amnezia-awg2) контейнер

VPS Hostkey (46.17.99.183, loopback)

Порт Слушает Что это
127.0.0.1:5000 Node.js Alatyr Service Platform (Express)
127.0.0.1:8222 docker-proxy Vaultwarden (контейнер vaultwarden, образ vaultwarden/server:latest, 127.0.0.1:8222→80/tcp)

Офисный роутер ASUS RT-N12E (176.99.153.164, публичные порты)

Прошивка 3.0.0.4.380_10809, веб-панель http://192.168.1.1 → Интернет → Переадресация портов. Проверено 05.08.2026:

Имя службы Внешний порт Проброс на Назначение
nginx-http-80 80/tcp 192.168.1.200:80 nginx на ragserver → редирект на HTTPS
nginx-https-443 443/tcp 192.168.1.200:443 nginx на ragserver → HTTPS

Проброс 8000 отсутствует (так и не был настроен, либо снят раньше). На ragserver 8000/tcp тоже никто не слушает.

Ragserver (192.168.1.200)

Публично слушает (0.0.0.0):

Порт Сервис Комментарий
22/tcp SSH (стандартный порт, проверено 05.08.2026) fail2ban настроен
80/tcp nginx Редирект на 443
443/tcp nginx Прокси на Open WebUI
11434 Ollama Внутри LAN, для embeddings

Loopback (127.0.0.1) — недоступно из LAN:

Порт Сервис Комментарий
3000 Open WebUI Только через nginx
5432 Postgres Только rag-net + локально
6333 Qdrant HTTP Только rag-net + локально
6334 Qdrant gRPC Только rag-net + локально

Ключевые файлы конфигурации

На ragserver (192.168.1.200)

Файл Роль
/opt/rag-platform/docker-compose.yml RAG-стек (Open WebUI, Qdrant, Postgres)
/opt/rag-platform/.env Ключи и пароли (POSTGRES_PASSWORD, OPENROUTER_API_KEY)
/opt/alatyr-storage-api/docker-compose.yml alatyr-storage-api (Node.js, порт 8080, bearer-token, whitelist MIME)
/opt/alatyr-storage-api/.env STORAGE_API_TOKEN (общий с alatyr-service /etc/alatyr-service.env), права 600
/etc/nginx/sites-available/storage-api.alatyr-service.ru Nginx-сайт storage-api + HTTPS
/etc/letsencrypt/live/storage-api.alatyr-service.ru/ Сертификат Let's Encrypt для storage-api
/etc/nginx/sites-available/rag.alatyr-service.ru Nginx-сайт RAG + HTTPS
/etc/nginx/backups/ Бэкапы старых nginx-конфигов
/etc/letsencrypt/live/rag.alatyr-service.ru/ Сертификат Let's Encrypt
/etc/fail2ban/jail.local Настройки fail2ban (SSH, nginx-noscript, nginx-limit-req)
/etc/fail2ban/filter.d/nginx-noscript.conf Кастомный фильтр для ботов
/usr/local/sbin/awg-rag-split-tunnel.sh Скрипт split-tunnel для VPN
/etc/amnezia/amneziawg/awg-rag.conf AmneziaWG клиент (для OpenRouter)
/etc/systemd/system/ollama.service Native systemd Ollama
/opt/rag-kb/ Git-клон alatyr-infra-kb (deploy key SSH)
/opt/rag-sync/sync-to-openwebui.sh Скрипт sync git → OpenWebUI (см. rag-sync.md)
/opt/rag-sync/.env OPENWEBUI_API_TOKEN (owner oswold, 600)
/opt/rag-sync/state.json Состояние синка (файл→file_id→sha256)
/home/oswold/.ssh/id_ed25519_alatyr_kb SSH deploy key для GitHub (read-only)

На VPS Hostkey (46.17.99.183)

Файл Роль
/etc/nginx/sites-enabled/alatyr-service Nginx-сайт alatyr-service.ru (Node на :5000)
/etc/nginx/sites-enabled/alatyr-taverna.ru Nginx-сайт alatyr-taverna.ru (статика /opt/alatyr/dist)
/etc/nginx/sites-enabled/vault.alatyr-service.ru Vaultwarden (proxy → 127.0.0.1:8222)
/etc/alatyr-service.env Секретные ENV для alatyr-service (MOYSKLAD_*, TELEGRAM_*, MD_TOKEN_*, RAG_API_BASE_URL, RAG_API_MODEL, RAG_API_OPENWEBUI_TOKEN, RAG_API_EDGE_TOKEN, RAG_API_TIMEOUT_MS), права 600 root:root
/etc/systemd/system/alatyr-service.service.d/override.conf Подключает EnvironmentFile=/etc/alatyr-service.env
/opt/alatyr/dist/ Собранная статика проекта Taverna
Docker: amnezia-awg2 AmneziaWG сервер (порт 8443/udp)
Docker: контейнер vaultwarden (vaultwarden/server:latest) Vaultwarden на 127.0.0.1:8222 → 80/tcp
/etc/fail2ban/jail.local fail2ban VPS
/etc/letsencrypt/live/alatyr-service.ru/ Сертификат основного домена
/etc/letsencrypt/live/alatyr-taverna.ru/ Сертификат Taverna
/etc/letsencrypt/live/vault.alatyr-service.ru/ Сертификат Vaultwarden

Секреты и пароли — где хранятся

Никогда не в открытом виде в конфигах базы знаний. Только ссылки на местоположение.

Что Где хранится
POSTGRES_PASSWORD /opt/rag-platform/.env на ragserver
OPENROUTER_API_KEY /opt/rag-platform/.env на ragserver
QDRANT_API_KEY /opt/rag-platform/.env на ragserver (docker env)
MD_TOKEN_GOLOVIN Vaultwarden + /etc/alatyr-service.env на VPS
MD_TOKEN_KOROBOCHKA Vaultwarden + /etc/alatyr-service.env на VPS
OPENWEBUI_API_TOKEN Vaultwarden + /opt/rag-sync/.env на ragserver (600, oswold)
RAG_API_OPENWEBUI_TOKEN Vaultwarden, отдельный ключ service user alatyr-service-assistant + /etc/alatyr-service.env на VPS
RAG_API_EDGE_TOKEN Vaultwarden, edge-auth для rag-api + /etc/alatyr-service.env на VPS
SSH deploy key GitHub /home/oswold/.ssh/id_ed25519_alatyr_kb (600, oswold), read-only
Приватные ключи AmneziaWG /etc/amnezia*/ на клиенте и в контейнере на сервере
Пароль Vaultwarden (мастер) В голове
Все пароли к сервисам Vaultwarden (vault.alatyr-service.ru)
Пароль от роутера ASUS Vaultwarden
Пароль от Reg.ru (DNS) Vaultwarden
Пароль от Hostkey панели Vaultwarden

TODO — ротация после утечек: - POSTGRES_PASSWORD — текущее значение скомпрометировано 05.08.2026 и ранее ошибочно присутствовало в истории Git; требуется ротация - QDRANT_API_KEY — засветился в чате 05.08.2026 при отладке эмбеддингов


Сертификаты Let's Encrypt

Все обновляются автоматически через certbot.timer (проверка 2 раза в день, обновление за 30 дней до истечения).

Домен Хост Срок
alatyr-service.ru VPS Hostkey 2026-10-16
vault.alatyr-service.ru VPS Hostkey 2026-10-22
alatyr-taverna.ru VPS Hostkey 2026-10-23
rag.alatyr-service.ru Ragserver 2026-11-02

Что где искать (навигация по базе)

Существующие файлы (✅ готово):

Вопрос Файл
Что за VPS в Голландии, что там крутится? vps-hostkey-vm-mini.md
Что установлено на ragserver (железо, стек)? ragserver-workstation.md
Как настроен обход блокировки OpenRouter, AmneziaWG-туннели? amneziawg-tunnels.md
Как настроен домашний роутер, проброс? router-asus-rt-n12e.md
Какие DNS-записи и куда указывают? dns-alatyr-service.md
Как проксирует nginx на VPS (все сайты)? nginx-vps-configs.md
Как проксирует nginx на ragserver? nginx-ragserver-config.md
Как устроен RAG-стек в docker (детально)? rag-platform-docker.md
Настройки Open WebUI, где данные? openwebui.md
Где Qdrant хранит коллекции, схема? qdrant.md
Какие модели в Ollama? ollama.md
Какие jails в fail2ban? fail2ban.md
Что такое Alatyr Taverna, где статика? alatyr-taverna.md
Как автообновляются сертификаты? certbot.md
Где мои пароли, как работает Vaultwarden? vaultwarden.md
Как синхронизируется knowledge base в RAG? rag-sync.md
Как CRM вызывает Open WebUI через внешний API? openwebui-public-api.md
Как развивать ИИ-помощников от секретаря до сметчика? rag-openai-business-assistants-roadmap.md
Где живёт alatyr-storage-api, как выдаёт файлы CRM? 51-storage-c-deploy.md
ТЗ на CRM-модуль (объекты, договоры) crm-objects-spec.md
Расширенная карточка объекта v2 (текущее ТЗ) crm-object-card-v2-spec.md
Мультитенантность — якорь эпика MT-01..MT-06 multitenancy-spec.md
UI/UX карточки объекта и сотрудников crm-object-workers-ui-spec.md
Позиционирование «Внешняя техническая служба» alatyr-service-strategy.md
Справочник разделов и услуг (каталог) services-catalog.md
Реквизиты обоих ИП, seed компаний my-companies.md
Активные задачи 👈 в CMS в разделе Задачи (файлы в projects/*/tasks/)
Архив старых TODO*.md в репо в _archive/todo/
SSH-пакет B (чек-лист) PACKAGE-B-SSH.md
Пост-мортемы сессий 📚 session-postmortems/ — итоги, уроки и открытые хвосты по дням работы

Проекты, к которым эта инфраструктура относится

  • [projects/alatyr-service-platform] — Node.js сервис на VPS 127.0.0.1:5000
  • [projects/fantasy-tavern-alatyr] — статика в /opt/alatyr/dist на VPS
  • [projects/self-hosted-vaultwarden] — Docker-контейнер на VPS 127.0.0.1:8222
  • [projects/vps-wireguard-access] — история настройки VPN (WireGuard удалён 05.08.2026, AmneziaWG активна)

Подробности проектов — в личной вики Perplexity Brain, не в этой базе.


Известные проблемы / TODO по инфраструктуре

Активные задачи живут в CMS-разделе Задачи (файлы в projects/*/tasks/); здесь — только быстрый срез по инфраструктуре, включая закрытые отметки для истории.

  • Проверить и отключить проброс 8000/tcp на роутере → проброса нет, сервиса нет (проверено 05.08.2026)
  • Убрать WireGuard полностью → удалён на VPS 05.08.2026 (на ragserver не было)
  • Уточнить SSH-порт ragserver22 стандартный, 0.0.0.0:22 и [::]:22, UFW inactive, iptables INPUT ACCEPT (проверено 05.08.2026)
  • Настроить RAG-sync git → OpenWebUIсделано 05.08.2026, cron с flock установлен 07.08.2026 (см. rag-sync.md)
  • Установить cron для /opt/rag-sync/sync-to-openwebui.sh → user cron oswold, каждые 10 минут с flock (07.08.2026)
  • Продублировать OPENWEBUI_API_TOKEN в Vaultwarden → сделано 06.08.2026
  • Проверить object assistant одним контролируемым запросом → PR #95 развёрнут, таблица и runtime env подтверждены; запрос отложен по решению владельца, см. CRM-15 в CMS-разделе Задачи
  • Развить RAG/OpenAI business assistants → роли, этапы, безопасность и критерии готовы в rag-openai-business-assistants-roadmap.md
  • Почистить логи Docker от старых утёкших OpenRouter-ключей
  • Добавить security headers в nginx на ragserver → 6 заголовков добавлены 07.08.2026
  • Создать документ по бэкапам всей инфраструктуры (когда, куда, как восстанавливать)
  • Внести пароли роутера/Reg.ru/Hostkey в Vaultwarden → сделано 06.08.2026