Add CLAUDE.md with infrastructure overview
Документирует серверы, сервисы из docker-compose и конвенцию «одна папка на сервер» для конфигов развёртывания. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -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.<name>.*` и хостом из `.env`.
|
||||||
|
- Внутренние сервисы — только в сети `internal`, публичные — в `proxy` (или в обеих, если нужен доступ к БД).
|
||||||
|
- Секреты — через `.env`, не хардкодить в compose.
|
||||||
Reference in New Issue
Block a user