Документирует серверы, сервисы из docker-compose и конвенцию «одна папка на сервер» для конфигов развёртывания. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4.7 KiB
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.