Files
homelab-docs/docs/architecture/architecture.md
Andrey 53769e6832 Update architecture and backup documentation to include Healthchecks integration
Add Healthchecks service details to architecture and backup documentation, including its role as a Dead man's switch for backups. Update backup scripts to utilize systemd timers instead of cron for improved scheduling. Enhance network topology documentation to reflect Healthchecks integration in the VPS Miran setup. This update clarifies backup processes and enhances overall system reliability.
2026-02-28 15:43:39 +03:00

8.6 KiB
Raw Permalink Blame History

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

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


Сеть и доступ

  • Внешний IP: 185.35.193.144
  • Домашний сервер (Proxmox): 192.168.1.150 (LAN)
    • Подключение: ssh root@192.168.1.150
  • Прямой SSH на контейнеры и ВМ: ssh root@192.168.1.{100,101,103,104,105,107,108,109}; ВМ 200: ssh admin@192.168.1.200. Ключи развёртываются скриптом scripts/deploy-ssh-keys-homelab.sh.
  • DNS домена katykhin.ru: Beget.com
    • Учётная запись: логин и пароль в Vaultwarden (объект beget). Режим 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
healthchecks.katykhin.ru Healthchecks (Dead man's switch для бэкапов; на VPS Миран)
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: скрипты, таймеры, пути — host-proxmox.md.
  • Схема сети и зависимости: полная топология (роутер, Proxmox, контейнеры, VPS), таблица IP/доменов, маршруты NPM, кто от кого зависит, единые точки отказа (SPOF). → Схема сети и зависимости.
  • Homepage: на контейнере 103, конфиг сервисов в /opt/docker/homepage/config/services.yaml (ссылки на NPM, Invidious, AdGuard, Immich, Galene, Vaultwarden, Healthchecks, Netdata и т.д.).
  • 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.
  • Подробнее по контейнерам и сервисам — в отдельных статьях (по мере появления).