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.
105 lines
8.6 KiB
Markdown
105 lines
8.6 KiB
Markdown
# Архитектура и подключение
|
||
|
||
Краткое описание домашнего контура: сеть, доступ, гипервизор и ключевые контейнеры.
|
||
|
||
---
|
||
|
||
## Сеть и доступ
|
||
|
||
- **Внешний 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`). Шлюз ниже — типичный для домашней сети; при необходимости замени на свой.
|
||
|
||
```bash
|
||
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 (подробно)](../containers/container-100.md) |
|
||
| 101 | Nextcloud | 192.168.1.101 | 2 core, 3 GB | cloud.katykhin.ru. → [Контейнер 101 (подробно)](../containers/container-101.md) |
|
||
| 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 (подробно)](../containers/container-103.md) |
|
||
| 104 | Paperless | 192.168.1.104 | 1 core, 2 GB | docs.katykhin.ru → [Контейнер 104 (подробно)](../containers/container-104.md) |
|
||
| 105 | RAG-service | 192.168.1.105 | 1 core, 1 GB | mini-lm.katykhin.ru → [Контейнер 105 (подробно)](../containers/container-105.md) |
|
||
| 107 | Invidious (misc) | 192.168.1.107 | 1 core, 2 GB | video.katykhin.ru → [Контейнер 107 (подробно)](../containers/container-107.md) |
|
||
| 108 | Galene | 192.168.1.108 | 1 core, 256 MB | call.katykhin.ru → [Контейнер 108 (подробно)](../containers/container-108.md) |
|
||
| 109 | WireGuard VPN (local-vpn) | 192.168.1.109 | 1 core, 256 MB | Доступ по VPN (10.10.99.0/24); клиенты получают доступ к vault.katykhin.ru и LAN → [Контейнер 109 (подробно)](../containers/container-109.md) |
|
||
| 200 | Immich, immich-pt и др. | 192.168.1.200 | 3 core, 10 GB | immich.katykhin.ru → [ВМ 200 (подробно)](../containers/container-200.md) |
|
||
|
||
*100–109 — 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)](../network/ssl-letsencrypt-dns01.md).
|
||
- **Самоподписные:** при необходимости добавляются вручную в NPM (БД + файлы в custom_ssl).
|
||
|
||
---
|
||
|
||
## Дополнительно
|
||
|
||
- **Хост Proxmox:** скрипты, таймеры, пути — [host-proxmox.md](../containers/host-proxmox.md).
|
||
- **Схема сети и зависимости:** полная топология (роутер, Proxmox, контейнеры, VPS), таблица IP/доменов, маршруты NPM, кто от кого зависит, единые точки отказа (SPOF). → [Схема сети и зависимости](../network/network-topology.md).
|
||
- **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)](../vps/vpn-vps-amneziawg.md).
|
||
- **Роутер:** Netcraze Speedster, два WireGuard/AmneziaWG (Германия / США), маршрутизация части трафика через VPN. → [Роутер Netcraze Speedster](../network/router-netcraze-speedster.md).
|
||
- **VPS Миран (СПБ):** боты (telegram-helper-bot, anonBot), prod-инфраструктура, STUN/TURN для Galene. → [VPS Миран: боты и STUN/TURN](../vps/vps-miran-bots.md).
|
||
- Подробнее по контейнерам и сервисам — в отдельных статьях (по мере появления).
|