Мій домашній сервер
На початку 2021 року під впливом мого друга та /r/Homelab я вирішив збудувати домашній сервер. У мене не було якоїсь конкретної мети, окрім бажання повозитися з залізом та програмним забезпеченням, а також отримати більше досвіду з інфраструктурними речами, з якими мені зазвичай не доводиться взаємодіяти. Тому в цьому пості я опишу апаратне та програмне забезпечення, яке я використовую на своєму домашньому сервері.
Перш ніж ми почнемо, мій вибір заліза та ПО аж ніяк не є оптимальним. Усе що я роблю можна досягти на будь-якому обладнанні або навіть на Raspberry Pi.
Hardware #
Ось список заліза яке я обрав, крім ECC RAM, все досить стандартне.
Материнська плата: Asus Prime B550-Plus
Процесор: AMD Ryzen 7 3800X
RAM: Samsung 32 GB ECC DDR4 2666 MHz (M391A4G43MB1-CTD)
SSD: Samsung 970 Evo series 500GB M.2 PCIe 3.0
HDD: Western Digital Red Pro 2TB 7200rpm 64MB
Корпус: Fractal Design Define R5 (Я також розглядав Silverstone GD07)
Кулер: Noctua NH-U12A
Джерело живлення: Corsair RM650
Обираючи процесор одинм із головних параметрів, на який я звертав увагу, це кількість ядер/потоків, а також доступність, і те, що я міг би перенести на свій ігровий ПК, у разі невдачі із сервером. Як виявилося, для робочих навантажень, які я запускаю, навантаження на ЦП досить низьке, тому я міг би обрати процесор нижчого класу.
Однією з головних причин, чому я вибрав AMD, це підтримка ECC. Хоча AMD явно не рекламує підтримку ECC, воно підтримується на всіх їхніх сучасних процесорах. Якщо материнська плата також підтримує ECC, то все повинно працювати. Я перевірив характеристики материнської плати, щоб переконатися, що вона підтримує частоту оперативної пам’яті та ECC. Але слід пам’ятати, що на не серверному залізі підтримується лише небуферизований ECC, для буферизованої ECC потрібно мати серверні процесори такі як Threadripper або EPYC.
Якщо ви обрали Intel, то вам, скоріш за все, потрібно купувати Xenon для підтримки ECC.
І, звичайно, процесор повинен підтримувати віртуалізацію, всі сучасні процесори повинні підтримувати її. Для Intel - це VT-x, для AMD - AMD-V.
Для корпусу я шукав відносно простий дизайн та достатньо місця для кількох жорстких дисків на випадок, якщо я захочу розширити об’єм сховищя пізніше. Define R5 може вмістити 2 SSD і 8 3,5-дюймових жорстких дисків, цього мені вистачить на довгий час.
Software #
Основна ОС на сервері це Proxmox, система із відкритим кодом для керування віртуалізацією. Він має дуже гарний веб-інтерфейс для керування віртуальними машинами. Налаштування було досить простим, і я не зіткнувся із жодними проблемами в довгостроковій єксплуатації під час оновленнями та обслуговуванням системи.
На серверї запущено 4 віртуальні машини:
- TrueNAS
- Nomad
- PostgreSQL
- Віртуальна машина для розробки
(у мережі також є pihole, що працює на raspberry pi 3)
TrueNAS #
Ця VM має жорсткий диск ємністю 2 ТБ, переданий на нього від ProxMox, який вона використовує для зберігання даних. Також на ній запущено два плагіни.
Transmission - торрент-клієнт, який завантажує торренти на TrueNAS.
PLEX - медіа-сервер, який дозволяє розміщувати власні медіа файли, він транслює файли з TrueNAS.
Nomad #
Nomad — це оркестратор накшталт Kubernetes, який використовується для запуску і керування програмами. Я використовую його для запуску докер-додатків, але він підтримує Podman, Java додатки та навіть довільні команди для завдань (docs). Я запускаю Nomad лише у одному екземплярі (звісно, не використовуйте таку конфігурацію у проді).
На Nomad я запускаю:
Heimdal - гарна інформаційна панель для швидкого доступу до всіх сервісів у моїй мережі.
Wireguard - VPN-сервер, до якого я можу підключитися щоб отримати доступ до моєї мережі. Я отримав статичний IP від свого провайдера, щоб зробити це.
NextCloud - хмара для самостійного хостингу, я в основному використовую його для зберігання файлів і календаря. Усі дані зберігаються на NFS розділі із TrueNAS, який я монтую до Nomad VM, а потім створюю розділ для докера.
Я також хочу зазначити, що перед тим як зупинитися на Nomad, я спробував Kubernetes та Rancher. Kubernetes вимагав занадто багато підтримки для мого використання, а Rancher зламався під час оновлень (це змусило мене ще більше цінувати девопсів), що звичайно було моєю помилкою, але саме тому я перейшов до Nomad. Він ідеально підходть для моїх потреб, оскільки вимагав мінімального налаштування/обслуговування, адже для мене зараз сервер це лише хобі, тому я хочу мати гарний баланс між часом, який я вкладаю в нього, і результатами, які я отримаю.
PostgrSQL #
Віртуальна машина Debian, на якій працює PostgreSQL. Зазвичай я використовую його для хобі проектів, які працюють на Nomad.
Dev VM #
Я тестую віртуальну машину із середовищем розробки до якої я можу отримати доступ через Wireguard по SSH або RDP. В основному я займаюся розробкою на Java і трохи на Go, тому все програмне забезпечення на ньому досить стандартне: jdk, go, git, Idea, Goland, nvim, jq.
Плани на майбутнє #
Деякі речі які я хочу зробити в майбутньому:
- Додати моніторинг та сповіщеня до всіх сервісів.
- Автоматизувати деякі процеси за допомогою Ansible.
- Додати RAID або ZFS mirrors.
- Отримати доменне ім’я та розмістити деякі служи публічно.
- Загалом покращують безпеку.
- Додати резервне копіювання за допомогою rsync.
- Запустити кластер Nomad на декількох Raspberry Pi, я планую придбати принаймні 3 RPi і перенести більшість сервісів на них.