🧠 День 16 — HomeLab: как у меня все устроено (сеть, сервера, сервисы и эксплуатация)
✎Ниже техническое описание моего HomeLab в формате "как это реально работает в эксплуатации".
🎯 Зачем вообще этот HomeLab
HomeLab для меня это не "поставить сервисы", а построить контур, где:
- доступы безопасные и предсказуемые (без "открыли порт в интернет и забыли")
- есть наблюдаемость (видно не только "упало", но и "где/почему")
- изменения можно делать маленькими шагами и быстро откатывать
- инфраструктура документируется в виде статей и заметок
🗺️ Высокоуровневая карта
Internet / ISP
|
[edge firewall]
|
Home LAN -------------------+
| |
Proxmox cluster | site-to-site tunnel
(compute + storage) |
| |
VM / services Remote LAN (site)
|
Monitoring / NOC
🌐 Площадки и сеть
У меня два контура (условно "дом" и "участок/удаленная площадка"), связанные site-to-site туннелем.
Ключевые требования к сети:
- L3 маршрутизация между подсетями (без L2 мостов)
- управляемые шлюзы и маршруты (никакой "магии, оно само как-то ходит")
- доступ к управлению только из доверенных зон и по ключам
Схема (упрощенно)
[Site A LAN] -- gw-A --+==== WireGuard site-to-site ====+-- gw-B -- [Site B LAN]
| |
(routing) (routing)
🔐 Edge / VPN / доступы
Внутри HomeLab есть критичный контур удаленного доступа:
- WireGuard как основной "скелет" связности между площадками
- управление сетевыми устройствами переведено на ключи (где это подтверждено)
- админ зоны и панели закрыты BasicAuth (минимальный барьер, который реально спасает)
Идея простая: внешний интернет не должен знать, что у меня внутри, а доступы должны жить в управляемом контуре.
🧱 Серверы и роли
Физически и логически есть несколько типов узлов.
1) Гипервизоры (Proxmox cluster)
Это база compute части.
На текущем состоянии (по данным NOC):
- нод в кластере: 3
- VM всего: 6, из них running: 4
+------------------+ +------------------+ +------------------+
| Proxmox node A | | Proxmox node B | | Proxmox node C |
| (cluster member) | | (cluster member) | | (cluster member) |
+--------+---------+ +--------+---------+ +--------+---------+
| | |
[VMs] [VMs] [VMs]
2) Критичная VM для доступа (vpn-gw)
Одна из VM критичная: через нее завязаны админ доступы и связность.
Для нее я делаю "как в проде":
- диск на ZFS
- репликация на коротком интервале
- понятный сценарий восстановления
vpn-gw VM -> ZFS (tank1) [node C]
|
+-- replication job (каждые N минут) -> ZFS (tank1) [target node]
3) Служебные VM и сервисы
Типичные роли, которые у меня встречаются в HomeLab:
- мониторинг / NOC
- вспомогательные сервисы сети (DNS/DHCP где применимо)
- сервисы приложений и домашние сервисы (включая медиа стек)
💾 Хранилище и данные
Основная мысль: данные важнее VM.
Практики, которые у себя закрепляю:
- ZFS там, где критично: mirror для устойчивости
- единый
storage_idна нодах (важно для штатной репликации Proxmox) - миграции только через страховку (backup + проверки)
disk1 + disk2 -> ZFS mirror -> storage_id: tank1
replication requires: source.storage_id == target.storage_id
🖥️ Мониторинг и NOC
/status это не "пинг лист", а NOC экран:
- топология дом/участок
- роли узлов (шлюз/свитч/хост/VM/сервис)
- отдельное представление виртуализации (гипервизоры -> VM -> вложенные сервисы)
- ручная раскладка узлов (drag and drop) и сохранение
Состояние на момент последней фиксации:
- хостов в мониторинге: 25
- доступно по SSH (где применимо): 8
🎬 Медиа стек (как пример "пользовательского продакшена")
Часть HomeLab это сервисы, которыми реально пользуемся дома.
Типовой пайплайн (упрощенно):
[Indexers] -> Prowlarr -> (Radarr / Sonarr) -> Downloader -> Library -> Plex
🧰 Операционная дисциплина
Я стараюсь держать homelab не как набор контейнеров, а как сопровождаемую систему:
- изменения маленькими шагами
- перед правками: диагностика и быстрый откат (бэкапы/снимки)
- после правок: проверка работоспособности
- если затрагивается nginx или systemd: сначала проверка конфигов, потом reload/restart
🧩 Этот сайт как часть HomeLab
homelab.kobelkov.ru тоже элемент инфраструктуры: журнал и документация.
Пайплайн публикации
Markdown (.md)
-> Python renderers (.md -> .html)
-> индексы (posts/notes) + feed + sitemap
-> git add/commit
-> publish.sh
-> reload systemd/nginx
Идея: чтобы "как сделал" не терялось и было воспроизводимо.
🔜 Что дальше
Логичные следующие шаги (в эксплуатации, а не "для красоты"):
- события и алерты поверх NOC (не только статус, но и сигнал)
- больше health-check как кода (проверки, которые можно повторить)
- укрепление сценариев восстановления (особенно для критичных сервисов доступа)
- аккуратная инвентаризация сервисов с приоритетами: что критично, что можно отключать