exelban's blog

[PL] Homelab (część 6: pierwsza ewolucja)

December 20, 2024

Cześć! Po krótkiej przerwie wracam z historią mojej domowej “serwerowni”. Od ostatniego postu minęło trochę czasu i zaszły dość duże zmiany. W tym poście spróbuję opisać, jak, dlaczego i jakie zmiany zostały wprowadzone.

Aktualny stan homelab

Homelab v2 Homelab v2

Na moment pisania tego postu homelab wygląda następująco:

W przypadku UDM SE, NAS i Raspberry Pi Zero nie zaszły żadne zmiany, więc w tej części skupię się na przejściu na Dell Precision 3240.

Główny serwer

Już podczas zakupu Dell Optiplex wiedziałem, że to tylko tymczasowe rozwiązanie, ponieważ ta platforma była zbyt ograniczona w możliwościach rozbudowy. Dlatego przez długi czas szukałem czegoś, co byłoby jednocześnie kompaktowe i podatne na rozbudowę. Najważniejsze wymagania to:

Wybór Dell Precision 3240 Compact

Pewnego dnia, przeglądając Allegro, trafiłem na ofertę Dell Precision 3240 Compact z procesorem i7-10700. Komputer był mocno przeceniony z powodu wgniecenia obudowy. Nie przejmowałem się tym, ponieważ wgniecenie i tak nie jest widoczne, gdy komputer znajduje się w szafie. Cena zato była bardzo atrakcyjna – udało się go kupić za 1700 zł.

Dell Precision 3240 Compact Dell Precision 3240 Compact

Model ten spełniał wszystkie moje oczekiwania:

Problem z chłodzeniem

Po zakupie okazało się, że model posiada ten sam system chłodzenia co wersje z procesorem i3, co skutkowało wysokimi temperaturami. W stanie spoczynku CPU osiągało 60 stopni, a podczas pracy Jellyfin – nawet 100 stopni. Zaskoczyło mnie to, ponieważ spodziewałem się lepszego systemu chłodzenia, takiego jak w modelach z procesorem i9. Kilka lat temu miałem PC z 10700k i do jego chłodzenia używałem AiO. Więc ten sam system chłodzenia co jest używany do i3 trochę mnie zdziwił.

Pierwszym upgradem było więc zamontowanie nowego chłodzenia. Po przeszukaniu internetu jedyną opcją był zakup oryginalnego chłodzenia do i9 z USA za około 220 zł (z dostawą). Po jego zamontowaniu temperatury znacznie spadły – w spoczynku nie przekraczają 55 stopni, a pod obciążeniem osiągają maksymalnie 92–96 stopni. Dodatkowo poprawiła się kultura pracy, co ma znaczenie, ponieważ cały homelab znajduje się w salonie.

Finalna konfiguracja serwera

Od samego początku szukam karty graficznej do niego, ale przez to że jedyną opcję jest Low-Profile nie jest to latwe zadanie. W rozsądnych cenach jest tylko intel A380 lub nvidia A1000. Tylko że te karty mają za mało pamięci, więc cały czas szukam… (A2000 12GB byłaby idealnym rozwiązaniem, ale ceny na nich są zbyt wysokie na ten moment)

Proxmox

Na komputerze od razu został zainstalowany Proxmox, który uważam za najlepszy sposób organizacji zasobów w domu. System został zainstalowany na dysku 250 GB, a 500 GB jest przeznaczone na pliki (choć aktualnie dysk jest wypełniony w mniej niż 1%).

Podział kontenerów LXC

Proxmox LXC Proxmox LXC

Wszystkie aplikacje działają w kontenerach LXC, które są podzielone według funkcji:

Wszystkie kontenery LXC są:

Dodatkowo kontener media ma dostęp do iGPU, co umożliwia transkodowanie w Jellyfin. Każdy kontener LXC ma zainstalowanego Dockera, a aplikacje są uruchamiane za pomocą Docker Compose.

Organizacja danych w aplikacjach

Większość aplikacji potrzebuje przestrzeni dyskowej na dane. Ponieważ wszystkie aplikacje są uruchamiane w dockerze to na początku wykorzystywałem lokalne katalogi którę było podpinane pod kontenery. Ale po kilku migracjach i nieudanych testach doświadczyłem tego że trzymanie danych w lokalnych katalogach LXC nie jest do końca dobrym rozwiązaniem. W sensie jeżeli te dane nie mają żadnej wartości to może i ok. Ale jakby coś się stało z proxmox lub kontenerem LXC to traci się minimum dostęp do danych a czasami i same dane. Więc w nowym serwerze chciałem mieć oddzielny dysk na którym będę trzymał tylko dane aplikacji. Więc jakby nawet coś się wydarzyło z samym proxmox to wystarczy tylko wymienić sam proxmox i ponownie go skonfigurować.

Pierwszą rzeczą było stworzenie foldera w samym proxmox na dysku. Ten folder zostanie automatycznie podpięty pod proxmox host w /mnt/pve/data. To chyba jest najlepszy i najbardziej zalecany sposób dodania dysku do proxmox. No więc teraz mam katalog który mogę podpinać pod kontenery LXC… I tutaj pojawią się problem. Ten katalog będzie read only w LXC. Ponieważ właścicielem tego katalogu będzie root w proxmox. Wszystkie moje LXC są nieuprzywilejowane, więc nie mają tego samego poziomu dostępu co root w proxmox.

Dzięki temu w przypadku awarii wystarczy wymienić dysk z Proxmox i ponownie go skonfigurować.

Procedura montowania katalogu do LXC

  1. Proxmox Host:

    • Stwórz nową grupę:
      groupadd -g 10100 lxc_shared_data
    • Dodaj użytkownika root do tej grupy:
      usermod -aG lxc_shared_data root
    • Zmień uprawnienia do katalogu:
      chown -R 101000:101000 /mnt/pve/data
    • Zamontuj katalog do LXC:
      pct set 100 -mp0 /mnt/pve/data,mp=/data
  2. Kontener LXC:

    • Stwórz nową grupę:
      addgroup --gid 1000 shared_data
    • Dodaj użytkownika root do tej grupy:
      addgroup root shared_data
    • Zrestartuj kontener:
      reboot
    • Sprawdź, czy katalog ma poprawne uprawnienia:
      ls -ln / – katalog data powinien mieć grupę 1000.

Warto przygotować szablon LXC z tą konfiguracją, aby nie trzeba było powtarzać tych kroków za każdym razem jak dodaje się nowy kontener LXC.

Dostęp do iGPU w kontenerze LXC

Kolejnym krokiem było dodanie wbudowanej iGPU (Intel HD 630) do kontenera media żeby można było używać jej w jellyfin do transkodowania filmów. W sumie to często z tego nie korzystam, ale kilka razy się przydało. Przerzucenie grafiki jest bardzo podobne do poprzedniego punktu z katalogiem. Tylko że ten wymaga trochę więcej zabiegu. Oto kroki:

  1. Weryfikacja dostępności grafiki:
    lspci | grep VGA

VGA response

Jeśli grafika nie jest widoczna, upewnij się, że iGPU jest włączone w BIOS.

  1. Instalacja sterowników:
    apt-get install i965-va-driver
    Możesz zweryfikować instalację za pomocą vainfo.

  2. Ustawienie uprawnień:

    • Sprawdź dostępne urządzenia:
      ls -l /dev/dri

renderD128

  1. Dodanie iGPU do kontenera:

    • Edytuj konfigurację kontenera:
      nano /etc/pve/lxc/100.conf
      Dodaj:
      lxc.cgroup2.devices.allow: c 226:0 rwm
      lxc.cgroup2.devices.allow: c 226:128 rwm
      lxc.cgroup2.devices.allow: c 29:0 rwm
      lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
      lxc.mount.entry: /dev/dri/renderD128 dev/renderD128 none bind,optional,create=file
      
  2. Dodanie grafiki do Jellyfin:
    W pliku docker-compose dodaj:

    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
    

Podsumowanie

Dzięki migracji na Dell Precision 3240 Compact udało się znacznie poprawić wydajność i organizację homelabu. Najważniejsze zmiany to:

Homelab w tej konfiguracji jest bardziej elastyczny, wydajny i gotowy na kolejne ewolucje.