Files
homelab-docs/docs/architecture/architecture.md

8.1 KiB
Raw Blame History

Архитектура и подключение

Краткое описание домашнего контура: сеть, доступ, гипервизор и ключевые контейнеры.


Сеть и доступ

  • Внешний IP: 185.35.193.144
  • Домашний сервер (Proxmox): 192.168.1.150 (LAN)
    • Подключение: ssh root@192.168.1.150
  • DNS домена katykhin.ru: Beget.com
    • Учётная запись: логин amauri7g, пароль QgkaKL3RykeI, ID аккаунта 2536839. Режим API включён. Домен katykhin.store в аккаунте есть, но не используется (поддоменов нет).
  • Reverse proxy и SSL: Nginx Proxy Manager (NPM) на контейнере 100.

Поддомены katykhin.ru:
В панели Beget отображаются все перечисленные ниже; через API getSubdomainList приходят только часть (в т.ч. служебные _acme-challenge.*). Полный список ведём вручную.

Поддомен Назначение
api.katykhin.ru
call.katykhin.ru Galene (видеозвонки)
cloud.katykhin.ru
docs.katykhin.ru
git.katykhin.ru
home.katykhin.ru Homepage
immich.katykhin.ru
mini-lm.katykhin.ru
obsidian.katykhin.ru
share.katykhin.ru
video.katykhin.ru Invidious
vault.katykhin.ru Vaultwarden (менеджер паролей)
wallos.katykhin.ru Wallos
_acme-challenge.call.katykhin.ru Служебный (DNS-01 Let's Encrypt)

Назначение для api, cloud, docs, git, immich, mini-lm, obsidian, share можно заполнить позже при описании контейнеров.


Гипервизор

  • Proxmox VE. Гости — в основном LXC-контейнеры, одна KVM VM (Immich, ID 200).
  • Управление LXC: pct (например pct exec <ID> -- bash). Управление VM: qm.
  • IP контейнера задаётся вручную (статически в LXC или через DHCP-резерв на роутере). Схема: ID контейнера = последний октет IP (например контейнер 105 → 192.168.1.105; исключения вносить в таблицу контейнеров).

Создание контейнера через pct (пример): ВМ с ID 105, 1 ядро, 1 ГБ RAM, IP 192.168.1.105. Шаблон — из local (подставь свой, например debian-12-standard). Шлюз ниже — типичный для домашней сети; при необходимости замени на свой.

pct create 105 local:vztmpl/debian-12-standard_12.2-1_amd64.tar.zst \
  --hostname ct105 \
  --memory 1024 \
  --cores 1 \
  --net0 name=eth0,bridge=vmbr0,ip=192.168.1.105/24,gw=192.168.1.1,type=veth

После создания: pct start 105; зайти в консоль: pct enter 105 или pct exec 105 -- bash.


Ключевые контейнеры и ВМ

ID Назначение IP Ресурсы Домены (через NPM)
100 NPM, AdGuard, служебные сервисы (log-dashboard, vpn-route-check) 192.168.1.100 1 core, 2 GB входная точка для всех доменов katykhin.ru; adguard.local, adguard.katykhin.ru → Контейнер 100 (подробно)
101 Nextcloud 192.168.1.101 2 core, 3 GB cloud.katykhin.ru. → Контейнер 101 (подробно)
103 Gitea, CouchDB (Obsidian), Vaultwarden, Homepage, Wallos 192.168.1.103 1 core, 2 GB git.katykhin.ru, obsidian.katykhin.ru, vault.katykhin.ru, home.katykhin.ru, wallos.katykhin.ru → Контейнер 103 (подробно)
104 Paperless 192.168.1.104 1 core, 2 GB docs.katykhin.ru → Контейнер 104 (подробно)
105 RAG-service 192.168.1.105 1 core, 1 GB mini-lm.katykhin.ru → Контейнер 105 (подробно)
107 Invidious (misc) 192.168.1.107 1 core, 2 GB video.katykhin.ru → Контейнер 107 (подробно)
108 Galene 192.168.1.108 1 core, 256 MB call.katykhin.ru → Контейнер 108 (подробно)
109 WireGuard VPN (local-vpn) 192.168.1.109 1 core, 256 MB Доступ по VPN (10.10.99.0/24); клиенты получают доступ к vault.katykhin.ru и LAN → Контейнер 109 (подробно)
200 Immich, immich-pt и др. 192.168.1.200 3 core, 10 GB immich.katykhin.ru → ВМ 200 (подробно)

100109 — LXC-контейнеры (pct), 200 — KVM-ВМ (qm). Схема ID = последний октет IP соблюдена. Домены api, git, share и др. в NPM при необходимости добавить позже.


Поток запросов (упрощённо)

  1. Запрос из интернета: https://video.katykhin.ru → роутер (порты 80/443 на 185.35.193.144) → проброс на 192.168.1.100.
  2. NPM (контейнер 100) принимает HTTPS, проверяет Host, смотрит proxy_host → upstream (например 192.168.1.107:3000 для video.katykhin.ru, 192.168.1.200:2283 для immich.katykhin.ru).
  3. Бэкенд-сервис (например Invidious в контейнере 107) отдаёт страницу; при «без прокси» видео стримится напрямую с YouTube в браузер.

SSL-сертификаты

  • Let's Encrypt: certbot на контейнере 100; для доменов без доступа по HTTP-01 используется DNS-01 (Beget API). После выпуска/продления сертификаты подкладываются в NPM (custom_ssl) и перезагружается nginx.
    Полная инструкция: Выпуск сертификата Let's Encrypt (DNS-01).
  • Самоподписные: при необходимости добавляются вручную в NPM (БД + файлы в custom_ssl).

Дополнительно

  • Схема сети и зависимости: полная топология (роутер, Proxmox, контейнеры, VPS), таблица IP/доменов, маршруты NPM, кто от кого зависит, единые точки отказа (SPOF). → Схема сети и зависимости.
  • Homepage: на контейнере 103, конфиг сервисов в /opt/docker/homepage/config/services.yaml (ссылки на NPM, Invidious, AdGuard, Immich, Galene, Vaultwarden и т.д.).
  • VPN (VPS): отдельный сервер 185.103.253.99, AmneziaWG для обхода блокировок. → VPN-сервер (VPS, AmneziaWG).
  • Роутер: Netcraze Speedster, два WireGuard/AmneziaWG (Германия / США), маршрутизация части трафика через VPN. → Роутер Netcraze Speedster.
  • VPS Миран (СПБ): боты (telegram-helper-bot, anonBot), prod-инфраструктура, STUN/TURN для Galene. → VPS Миран: боты и STUN/TURN.
  • Подробнее по контейнерам и сервисам — в отдельных статьях (по мере появления).