Инфраструктура: обзор и карта связей¶
Главный обзорный файл базы знаний «Инфраструктура». Отвечает на вопросы «как устроено», «куда идёт запрос», «где что искать». Детали каждого компонента — в отдельных файлах.
Владелец: Роман Головин (ИП, Железнодорожный, МО) Актуально на: 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-ФЗ и webhookpayment.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 cronoswoldкаждые 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; импорт и экспорт сверяются по markerALATYR-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, постраничный импорт отдельных актов, markerALATYR-ACT-ID, безопасная отправка локальных PDF-актов и обмен статусом подписиOnHands. Любая запись требует успешной полной import-first сверки, точного canonical-контекста и одноразовой capability непосредственно перед запросом. Код развёрнут production run32998796606; отдельный флаг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, deploy33021301456): для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.x↔172.29.172.xdocker). На 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-порт ragserver→ 22 стандартный,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 cronoswold, каждые 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