Projekt domowego serwera chodził mi po głowie już od dłuższego czasu, ale z różnych powodów ciągle go odkładałem na później. Projekt w końcu zrealizowałem w 2021/2022 na potrzeby pracy dyplomowej, której celem była budowa domowego serwera multimediów i plików. Promotorem pracy był dr inż. Zbigniew Fryźlewicz.

Wymagania pracy dyplomowej:

  • System operacyjny: Linux
  • Serwer multimediów (strumieniowanie muzyki/filmów)
  • Serwer e-booków
  • Serwer plików z możliwością konwersji audio i wideo

Hardware

Chciałem, żeby urządzenie było w miarę kompaktowe i energooszczędne, więc początkowo rozglądałem się za płytami głównymi w formacie mini i nano ITX, ale wtedy trafiłem na kilka artykułów i filmów przedstawiających realizację podobnych projektów na RaspberryPi. Wcześniej nie miałem okazji „pobawić” się SBC – zawsze uważałem je za gadżet więc i nie wiedziałem jak bardzo pod względem możliwości rozwinęła się ta część IT. Wybór SBC powodował, że jednocześnie miałem załatwioną kwestię niskiego zużycia energii i zachowania kompaktowych wymiarów, z drugiej strony SBC często wykorzystują procesory o architekturze ARM a ta poza telefonami z androidem była dla mnie zupełnie nieznana. Zmiana architektury nie byłaby dla mnie minus a wręcz plusem, w końcu mógłbym zrobić coś nowego niż złożenie kolejnego zestawu na x86-64, poprzedni raz taką zmianę w architekturze dokonałem w okolicach 2000r gdzie przesiadłem się z Amigi 600 na PC. Dużym minusem wszystkich SBC, jakie oglądałem była mała liczba (max 2) lub całkowity brak portów SATA, co uniemożliwiało utworzenie sensownej macierzy dyskowej, a którą mimo braku w wymaganiach chciałem mieć. Szukając informacji jak sensownie podłączyć (nie przez USB!) większą ilość dysków trafiłem na SBC RockPi4 i nakładki Quad i Penta SATA Kit, obie nakładki pozwalają na podłączenie 4 dysków(5 w przypadku Penta) co już pozwala na utworzenie macierzy RAID 5, a to już mnie zadowalało. Kolejnym elementem był wybór twardych dysków, chciałem, żeby były to dyski 2,5” i żeby cena za 1GB była jak najmniejsza. Wybór padł więc na dedykowane dla systemów NAS dyski WD Red Plus o pojemności 1TB z myślą o przyszłej wymianie na pojemniejsze dyski SSD – gdy ich ceny będą korzystniejsze.

Do realizacji projektu wybrałem:

  • Rock Pi 4 Model A z 4GB RAM
  • Penta SATA KIT
  • Moduł eMMC 64GB
  • 4x NAS WD Red™ Plus 2,5” WD10JFCX

schemat hardware

Software

Wymagania pracy były dosyć jasne wystarczyło więc tylko dobrać odpowiednie oprogramowanie. Do realizacji wykorzystałem:

Kontenery zostały utworzone na podstawie konfiguracji dostępnych w repozytorium

schemat software

Montaż

Po otrzymaniu wszystkich zamówionych podzespołów zabrałem się za montaż, który przebiegł bez – jak początkowo myślałem – najmniejszego problemu. Na etapie konfiguracji systemu operacyjnego okazało się, że nie działa wyświetlacz w TOP HAT, po zbadaniu sprawy wyszło, że dołączony został nieprawidłowy kabelek łączący SATA HAT i TOP HAT (Tematy 1 i 2), który przepalił wyświetlacz po otrzymaniu prawidłowego kabelka i nowej TOP HAT wszystko zadziałało.

serwerek

Konfiguracja systemu operacyjnego

System Armbian został zainstalowany na module eMMC, na dyskach HDD utworzyłem macierz RAIDZ – odpowiednik RAID 5 z systemem plików ZFS. Trochę czasu zajęło mi odpowiednie doszlifowanie plików z konfiguracją dla Docker Compose, skonfigurowanie wszystkich aplikacji na potrzeby prezentacji pracy i zabezpieczenie serwera gdzie pomocny był artykuł How to Secure A Web Server i książka Unix i Linux Przewodnik administratora systemów. Po zabezpieczeniu utworzyłem w moim routerze TP-Link przekierowania na odpowiednie porty i ustawiłem domenę DDNS. Jedynie czego mi brakowało to uruchomienie szyfrowania SSL w usługach, szukając informacji jak najlepiej to zrobić i kilka nieudanych prób spowodowało, że musiałem pomysł zarzucić — połączenie pracy zawodowej, zbliżającego się terminu oddania pracy dyplomowej i realizacja projektu na zaliczenie przedmiotu Programowanie urządzeń mobilnych sprawiło, że nie miałem już więcej czasu na doszlifowanie tego brakującego elementu (jak się później okazało, to było bardzo łatwe i szybkie do realizacji!).

Obronę pracy dyplomowej zaliczyłem na 5!🥳

Dalsze losy serwera

Po obronie pracy dyplomowej zgodnie z zaleceniem promotora serwer w obecnej konfiguracji pracował jeszcze 3 miesiące, po których upływie zaorałem wszystko. Debian, na którym bazował Armbian choć stabilny to jednak posiada starszą wersję pakietów, chciałem czegoś „nowszego”. Bazując na różnych źródłach próbowałem uruchomić Fedora Server, ale niestety po paru dniach walk nie udało mi się, przywróciłem kopię Armbiana na eMMC i uruchomiłem jedynie kontener z Nextcloud. Mając wolny czas szukałem informacji jak uruchomić szyfrowanie SSL i testując różne rozwiązania w końcu trafiłem na projekt Nginx Proxy Manager! Po jego uruchomieniu jako kontener dockerowy wystarczy tylko go skonfigurować i zmienić parę opcji w ustawieniach kontenera Nextcloud a wszystkie problemy z SSL jakie miałem same się rozwiązały! Proste i skuteczne rozwiązanie, przy którym spędziłem jeden wieczór. Kolejnym kontenerem, jaki dodałem, a na który trafiłem zupełnie przypadkiem jest Portainer co bardzo ułatwia mi życie przy zarządzaniu 😄

Przygoda z snapshotami ZFS

Wszystko działało pięknie, ale po jakimś czasie zauważyłem, że mam coraz mniej dostępnego miejsca na serwerku z 3TB zostało niecałe 150GB, postanowiłem trochę posprzątać – myśląc, że pewnie automatyczne kopie kilku moich PC zaszalały i spuchły 😉, jakie było moje zdziwienie, gdy po usunięciu niektórych danych ilość wolnego miejsca jeszcze zmalała! Badając temat znalazłem przyczynę, moja macierz ZFS ma ponad 13000 snapshotów! Po krótkiej konsultacji na Reedicie (Tematy 1 i 2) zrobiłem odpowiednią konfiguracje i prostym skrypcikiem udało mi się temat ogarnąć 😄 najwyraźniej moje zabawy sprawiły, że docker sobie potworzył wiele zbędnych snapshotów pożerając całe miejsce 😄

Dalsze plany

Chciałbym zmigrować swoją instancję Nextcloud na kontener AIO oraz dodać do niego Proton Bridge, aby przekonfigurować wysyłkę maili z gmaila na moją domenę w proton mail.