Refactor README, architecture, and backup documentation to emphasize the use of Vaultwarden for credential management across various services. Update scripts for Nextcloud, Gitea, Paperless, and others to reference Vaultwarden for sensitive information. Remove outdated references to previous backup strategies and ensure clarity on credential retrieval processes. This improves security practices and streamlines backup operations.
8.4 KiB
Архитектура и подключение
Краткое описание домашнего контура: сеть, доступ, гипервизор и ключевые контейнеры.
Сеть и доступ
- Внешний 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 | — |
| 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 (подробно) |
100–109 — LXC-контейнеры (pct), 200 — KVM-ВМ (qm). Схема ID = последний октет IP соблюдена. Домены api, git, share и др. в NPM при необходимости добавить позже.
Поток запросов (упрощённо)
- Запрос из интернета:
https://video.katykhin.ru→ роутер (порты 80/443 на 185.35.193.144) → проброс на 192.168.1.100. - NPM (контейнер 100) принимает HTTPS, проверяет Host, смотрит proxy_host → upstream (например 192.168.1.107:3000 для video.katykhin.ru, 192.168.1.200:2283 для immich.katykhin.ru).
- Бэкенд-сервис (например 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.
- Подробнее по контейнерам и сервисам — в отдельных статьях (по мере появления).