Files
infrastructure/CLAUDE.md
T
maximilion96 c254bd03fe Add CLAUDE.md with infrastructure overview
Документирует серверы, сервисы из docker-compose и конвенцию
«одна папка на сервер» для конфигов развёртывания.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-13 00:18:25 +03:00

62 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.