W pierwszej części opisałem jak wyglądała moja sieć domowa. Kolejnym elementem do dodania był serwer. Jak zawsze tygodnie czytania i oglądania wszystkiego na temat najlepszego sprzętu do domowego homelab.
Założenia były następujące:
- nie za stary i słaby CPU (conajmniej 6 Gen oraz i5, starsze raczej nie mają sensu ponieważ używają za dużo prądu)
- możliwość rozbudowy RAM chociażby do 32GB
- port M2 (miałem dysk M2 który od długiego czasu leżał nieużywany)
- możliwość podłączenia dodatkowego SATA HDD/SDD
Po co mi w ogóle w domu serwer? Częściowo odpowiedziałem na to pytanie w pierwszej części. Pomysł był taki żeby mieć możliwość uruchomienia dedykowanej maszyny/kontenera pod:
- bazy danych
- lokalne serwisy
- smart home aplikacje
- home media
- DNS
Bardzo chcę kiedyś kupić serwer w formacie rack i zamontować w szafie serwerowej. No ale nie mam ani szafy serwerowej (na razie) ani chęci słuchania szumu serweru.
Więc wiedziałem że najlepiej by mi pasował jakiś mini PC. Bo są tanie, mają bardzo dobre podzespoły, używają mało prądu. No idealna maszyna dla domu. Niestety większość chińskich mini PC są dość drogie i nie posiadają możliwości do rozbudowy. Więc wybór został skrócony do używanych „office PC” typu HP Elitedesk, Dell Optiplex, Lenowo Thinkcenter, etc. Wybór w tym segmencie jest bardzo duży, ponieważ produkują się od lat, w różnych konfiguracjach i wielkościach (sff lub micro). Dodatkowo prawie każdy ma możliwość wymiany CPU, RAM, miejsce na dysk a SFF nawet posiadają port PCI.
Pierwszy serwer Link to heading
Dell Optiplex 7050
Po jakimś czasie znalazłem bardzo fajną ofertę na Dell Optiplex 7050. Specyfikacja którego wygląda następująco:
- CPU: Intel i5-7500
- RAM: 8GB (2x4GB) DDR4 SODIMM
- Dysk: HDD 500Gb
Oczywiście że komputer polaesingowy, ale za tą cenę (489zł) mi to nie przeszkadza.
Pierwsza rzecz którą zrobiłem po zakupie to montaż dysku 128GB SSD M2. Następna to zamówienie pamięci RAM, wybór padł na 32GB (2x16GB) od GSkill. Komputer jest bardzo mały i cichy (tylko HDD robi trochę szumu). Uważam że to najlepszy wybór na pierwszy serwer domowy. No chyba że ktoś wie do czego go potrzebuje i że takiego sprzętu na długo nie starczy. Ale dla mnie to pytanie dalej otwarte, i wydaje mi się że ten komputer na długo zagościł na mojej półce. Nawet jakby mi kiedyś zabrakło mocy CPU to mam możliwość wymiany i5 na i7-7700. Wymieniłem też HDD na SSD ponieważ HDD był za głośny.
Dalej będę nazywał ten komputer serwerem, ponieważ pracuje u mnie jako serwer.
Proxmox Link to heading
Po tylu tygodniach zbierania informacji o homelab jeszcze przez zakupem serweru widziałem że system który zainstaluje to proxmox. Proxmox to system który daje możliwość uruchamiania kilku maszyn wirtualnych na jednym urządzeniu. Jest bardzo prosty w instalacji i obsłudze. Proxmox daje możliwość uruchomienia maszyny wirtualnej (vm) albo wirtualnego kontenera (ct/LXC). Preferuje kontener, ponieważ jest to „lżejsza” wersja maszyny wirtualnej (używa mniej RAM). Od kilku miesięcy używam LXC i nie miałem żadnego problemu z nimi. Jako obraz bazowy używam apline 3.18. Po instalacji docker jest to idealne rozwiązanie dla mnie ponieważ wszystko uruchamiam w docker kontenerach.
Do proxmox podłączyłem synology NAS jak NFS dysk i używam przestrzeni NAS do przechowywania danych które nie chciałbym stracić jakbym coś zepsuł w proxmox oraz do robienia backup kontenerów proxmox. Sam proxmox jest zainstalowany na m2 SSD. LCX też używają tego dysku jako root. Nie mam ich na razie dużo i alpine nie jest bardzo wymagającym systemem. Każdy kontener ma swoje 4-8 GB pamięci dyskowej i wydaje mi się że tego na długo starczy. Na dane które są używane dość często montuje SATA SSD jako dodatkowy volumen. Może to nie jest idealne rozwiązanie, ale to mój pierwszy fizyczny serwer, więc testuje.
Ogranizacja serwisów Link to heading
LXC kontenery w Proxmox
Po kilku testach lista maszyn w proxmox wyglądała następująco:
- dns (pihole oraz cloudflare)
- tools (bazy danych oraz kolejka)
- services (reverse proxy, notatki, git, dashboard, etc)
- tasks (synchronizacja git oraz pihole)
- media (plex, radarr, sonarr)
- iot (homebridge)
Nazwa każdego kontenera pokrywa się z hostname który jest wpisany w DNS co pozwała zapomnieć o IP adresach. Dodatkowo services posiada reverse proxy który organizuje dostęp do lokalnych serwisów.
DNS (PiHole) Link to heading
Pierwsza rzecz którą chciałem doprowadzić do porządku to lokalny DNS. Do tej pory używałem Raspberry Pi 4 z PiHole oraz cloudflared. Jak musiałem zrestartować rpi lub coś zepsułem to w najlepszym wypadku na kilka godzin pozostawałem bez blokady reklamy oraz bez lokalnego resolveru dns.
Więc postanowiłem zrobić sieć trochę bardziej odporną poprzez uruchomienie 2 DNS. W moim wypadku to PiHole + cloudflared.
Pierwsze co zrobiłem to stworzyłem maszynę dns
w proxmox i przeniosłem PiHole oraz cloudflared z rpi na nią. Kolejnym etapem było odnalezienie i uruchomienie Raspberry Pi Zero W.
Więc przygotowałem docker-compose z 2 serwisami: PiHole oraz cloudflared i uruchomiłem to samo na dns
oraz Raspberry Pi Zero W. Pierwszym serwerem DNS na liście w unifi jest dns
, rpi kolejnym. Teraz jak tylko pada proxmox to sieć zaczyna używać rpi jako DNS serwera. Zauważyłem że Funbox posiada USB, i podłączyłem rpi do niego. Więc rpi może stracić zasilania tylko jak Funbox traci zasilania. Ale w takim wypadku nawet nie potrzebuje DNS, ponieważ nie mam internetu i raczej nic nie ma prądu.
Synchronizacje PiHole zrobiłem za pomocą Gravity Sync. Gravity Sync to aplikacja która ma jedno zadanie: synchronizację konfiguracji master i slave (lub kilku) PiHole.
PS: w następnej cześci opisze bardziej szczegółowo konfiguracje sieci wraz z DNS oraz Firewall. Prośba wszystkie pytania i uwagi kierować na email: [email protected] (na razie nie widzę potrzeby w dodaniu sekcji komentarzy).