From c254bd03fe8094f5c09e201a5b3b5bf9840ebf01 Mon Sep 17 00:00:00 2001 From: maximilion96 Date: Sat, 13 Jun 2026 00:18:25 +0300 Subject: [PATCH] Add CLAUDE.md with infrastructure overview MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Документирует серверы, сервисы из docker-compose и конвенцию «одна папка на сервер» для конфигов развёртывания. Co-Authored-By: Claude Opus 4.7 --- CLAUDE.md | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..ecf7b7e --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,61 @@ +# Personal Infrastructure + +Репозиторий моей личной инфраструктуры. Всё разворачивается через Docker (предпочтительный метод), конфиги хранятся в этом репо. + +## Серверы + +| IP | Локация | Роль | +|---|---|---| +| `111.88.253.112` | Yandex Cloud | Основной сервер — все основные сервисы (n8n, gitea, traefik, portainer, postgres, redis, xray, mtg) | +| `62.84.114.137` | Yandex Cloud | Входная нода VPN (3x-ui) | +| `94.247.214.20` | Нидерланды | Реверс-прокси для n8n (принимает SSH-туннель с основного сервера) | +| `94.247.214.112` | Нидерланды | Выходная нода VPN (3x-ui) | + +## Структура репозитория + +Всё, что нужно для развёртывания, хранится в этом репо. Под каждый сервер — отдельная папка верхнего уровня со всеми его конфигами, compose-файлами, артефактами и т.п. + +| Папка | Сервер | Назначение | +|---|---|---| +| `docker/` | `111.88.253.112` | Основной сервер (текущее содержимое) | +| _tbd_ | `62.84.114.137` | Входная нода VPN | +| _tbd_ | `94.247.214.20` | NL реверс-прокси для n8n | +| _tbd_ | `94.247.214.112` | Выходная нода VPN | + +Папки для остальных серверов добавим по мере того, как будем переносить туда конфиги. Имена папок — по роли сервера (например, `vpn-entry/`, `nl-proxy/`, `vpn-exit/`), не по IP. + +Правило: если сервис где-то крутится — его конфиг должен лежать в папке соответствующего сервера в этом репо. Никаких «живёт только на сервере» артефактов. + +## Сервисы основного сервера (`docker/docker-compose.yml`) + +Развёрнуты на `111.88.253.112`: + +- **traefik** — реверс-прокси + Let's Encrypt, слушает 80/443, маршрутизирует по Host-меткам. +- **postgres** (16-alpine) — общая БД для n8n и gitea. +- **redis** (7-alpine) — кэш и очередь Bull для n8n. +- **n8n** — автоматизация. HTTP(S)_PROXY через `xray` для обхода блокировок. Публикуется по `${N8N_HOST}` через traefik, а также пробрасывается SSH-туннелем (`tunnel` сервис) на `94.247.214.20:5678` для внешнего доступа через NL-реверс-прокси. +- **tunnel** (autossh) — обратный SSH-туннель `-R` на `94.247.214.20`, пользователь `tunnel`, ключ в `./ssh/tunnel_key`. +- **xray** — исходящий прокси для n8n (порт 8080 во внутренней сети). +- **gitea** — git-хостинг, БД в общем postgres (`gitea`/`gitea`), SSH на хосте проброшен на `222`. +- **portainer** — UI для управления docker. +- **mtg** — Telegram MTProto-прокси с fake TLS, проксируется через traefik TCP по SNI `${MTG_FAKE_TLS_HOST}`. + +Сети: `proxy` (внешний трафик через traefik) и `internal` (между сервисами и БД). + +## VPN + +Входная (`62.84.114.137`) и выходная (`94.247.214.112`) ноды — оба на **3x-ui**. На основном сервере отдельно крутится **xray** как исходящий прокси для n8n и **mtg** как Telegram-прокси. + +## Конфиги в репо + +- `docker/docker-compose.yml` — основной compose. +- `docker/.env` — переменные (`*_HOST`, пароли, `N8N_ENCRYPTION_KEY`, `ACME_EMAIL`, `TIMEZONE`). Не коммитить секреты. +- `docker/xray/config.json` — конфиг xray-клиента. +- `docker/mtg/config.toml` — конфиг mtg. +- `docker/ssh/tunnel_key` — приватный ключ для autossh-туннеля (не в git). + +## Конвенции + +- Новые сервисы добавляем в `docker/docker-compose.yml`, публикуем через traefik с метками `traefik.http.routers..*` и хостом из `.env`. +- Внутренние сервисы — только в сети `internal`, публичные — в `proxy` (или в обеих, если нужен доступ к БД). +- Секреты — через `.env`, не хардкодить в compose.