Raspberry Pi 5: Migracja na NVMe i konteneryzację usług

Mój poprzedni serwer przez lata spełniał swoją funkcję, jednak ograniczenia wydajnościowe oraz brak wsparcia dla nowszych technologii skłoniły mnie do modernizacji. Głównym celem była przesiadka na architekturę opartą o kontenery oraz wyeliminowanie kart SD na rzecz standardu NVMe.

Specyfikacja sprzętowa

Nowy zestaw został skompletowany z myślą o maksymalnej responsywności i stabilności:

  • Jednostka: Raspberry Pi 5 (8GB RAM).
  • Obudowa: Argon NEO 5 M.2 NVMe – zapewnia skuteczne chłodzenie i bezpośrednią obsługę dysków SSD przez dedykowany interfejs.
  • Pamięć masowa: Dysk Lexar 1TB M.2 PCIe NVMe NM620. Rezygnacja z kart micro SD na rzecz NVMe znacząco redukuje opóźnienia i zwiększa trwałość nośnika.

Energooszczędność

Jednym z kluczowych argumentów za wyborem Raspberry Pi w roli serwera 24/7 jest niski pobór mocy. W obecnej konfiguracji parametry prezentują się następująco:

  • Idle (bezczynność): Zapotrzebowanie na poziomie 3W (potwierdzone odczytem z zasilacza).
  • Stress (obciążenie): Pobór mocy wzrasta do przedziału 9-12W.

Stosunek wydajności do zużytej energii czyni tę jednostkę niezwykle efektywnym rozwiązaniem pod kątem kosztów eksploatacji.

System i usługi systemowe

Całość pracuje pod kontrolą Raspberry Pi OS. Na poziomie systemu operacyjnego (poza Dockerem) skonfigurowałem kluczowe usługi zarządzania i dostępu:

  • Dostęp zdalny: VPN oparty na protokole Wireguard (PiVPN) zapewnia bezpieczny tunel do sieci domowej.
  • Zarządzanie: Do obsługi graficznego interfejsu wykorzystuję VNC.
  • Współdzielenie plików: Standardowa usługa Samba do szybkiego dostępu do danych w sieci lokalnej.

Środowisko Docker

Kluczową zmianą w stosunku do poprzedniego serwera jest pełna konteneryzacja usług sieciowych. Za routing i automatyczne wystawianie certyfikatów SSL odpowiada Traefik.

W ramach Dockera utrzymuję obecnie:

  1. holas.pl – moja strona internetowa.
  2. Nextcloud – prywatna chmura do synchronizacji danych.
  3. Immich – rozwiązanie do backupu i zarządzania biblioteką zdjęć.
  4. Traefik – reverse proxy zarządzające ruchem przychodzącym.

Potencjał rozwojowy

Mimo uruchomienia kilku wymagających usług, Raspberry Pi 5 w wersji 8GB wykazuje spory zapas mocy obliczeniowej oraz pamięci RAM. Obecne obciążenie pozwala na swobodne wdrażanie kolejnych kontenerów bez ryzyka spadku wydajności działających już systemów. Przejście na standard NVMe sprawiło, że operacje na bazach danych (szczególnie w Immich i Nextcloud) są wykonywane natychmiastowo.

Zabezpiecz swoją stronę www za darmo certyfikatem SSL od Let’s Encrypt

Jakiś czas temu pisałem o starcie usługi dostarczające darmowe certyfikaty SSL dla stron internetowych – Let’s Encrypt.

Usługa wyszła już z fazy beta, nadal jest w fazie beta jednak działa naprawdę dobrze i otrzymanie certyfikatu przebiega bez żadnych problemów.

holas.pl z certyfikatem z Let's Encrypt

Aby z niej skorzystać trzeba pobrać klienta i postąpić zgodnie z jego instrukcją. Niestety aktualnie nie ma paczki na Debiana Jessie więc postanowiłem użyć jednego z alternatywnych klientów, który jest skryptem w bashu i jest prosty jak „konstrukcja cepa” – https://github.com/Neilpang/acme.sh

Używając powyższego skryptu można wszystko zrobić dosłownie w 5 minut :). Wspomnę tylko, że skrypt ma instalator (pkt. 1 lub 2 ze strony na githubie) i inne ułatwiacze ale ja lubię mieć kontrolę nad tym co się dzieje więc z nich nie korzystałem.

Na wstępie ustalmy do celów poradnika, że wszystko będziemy wykonywać z root’a (oczywiście nie trzeba ale zakładamy tak w celu uproszczenia) oraz:

/root/.acme.sh/acme.sh – miejsce składowania skryptów klienta
mojastrona.pl – strona, dla której chcemy uzyskać certyfikat
/mnt/www/mojastrona.pl – katalog na dysku naszej strony
/etc/apache2 – lokalizacja apache wraz z plikami konfiguracji

Pierwszym naszym krokiem powinno być pobranie wymaganych plików klienta. W tym celu przechodzimy (zakładamy w razie potrzeby) do katalogu

/root/.acme.sh/acme.sh

i wykonujemy komendę

git clone https://github.com/Neilpang/acme.sh

Jeśli nie mamy gita to go instalujemy lub wchodzimy na stronę projektu, ręcznie pobieramy pliki i je wypakowujemy.

Następnym krokiem (dla wygody tylko) jest zrobienie symlinka z katalogu gdzie będą nasze certyfikaty do katalogu apache. Wykonujemy to komendą

ln -s /root/.acme.sh/ /etc/apache2/letsencrypt

Po wykonaniu powyższych kroków oraz upewnieniu się, że nasza strona jest dostępna z internetu należy pobrać certyfikat

./acme.sh issue /mnt/www/mojastrona.pl/ mojastrona.pl

lub jeśli mamy jakieś aliasy (np. www.mojastrona.pl) to

./acme.sh issue /mnt/www/mojastrona.pl/ mojastrona.pl www.mojastrona.pl

Jeśli nasza strona była dostępna z internetu to powinniśmy otrzymać certyfikat, a potrzebne pliki zapisane zostaną w katalogu

/root/.acme.sh/mojastrona.pl/

Pozostało nam już tylko poprawić konfigurację apache aby wskazać nasze certyfikaty (dobry poradnik jak skonfigurować SSL w apache znajduje się tu – krok 3 i 4). W tym celu w pliku konfiguracyjnym należy wskazać tak aby opcja

SSLCACertificateFile  kierowała do ca.cer
SSLCertificateFile kierowała do pliku .cer
SSLCertificateKeyFile kierowała do pliku .key

np.

SSLCACertificateFile /etc/apache2/letsencrypt/mojastrona.pl/ca.cer
SSLCertificateFile /etc/apache2/letsencrypt/mojastrona.pl/mojastrona.pl.cer
SSLCertificateKeyFile /etc/apache2/letsencrypt/mojastrona.pl/mojastrona.pl.key

oraz przeładować apache

service apache2 reload

O tego momentu strona powinna zgłaszać się z certyfikatem od Let’s Encrypt.

Dodatkowo warto ustawić automatyczne odnawianie certyfikatów gdyż mają one ważność 90 dni.

W tym celu najprościej stworzyć wykonywalny skrypt, np.

acme.sh_cron

z zawartości np.

#!/bin/sh
/root/.acme.sh/acme.sh/acme.sh cron >> /var/log/le-renew.log
service apache2 reload

i przenieść go do

/etc/cron.daily

Jak widać proces nie jest przesadnie skomplikowany i po wstępnej konfiguracji raczej banalny. Docelowo prawdopodobnie i tak wybiorę oficjalnego klienta ale pierw musi w repozytoriach Debiana Jessie zostać udostępniona oficjalna paczka.

Powodzenia w szyfrowaniu! 🙂

EDIT:
Skrypt zmienił nazwę więc powyższy opis został odpowiednio dostosowany.

Własny domowy serwer – Banana Pi

Jakiś czas temu zostałem posiadaczem mini komputera Banana Pi jako mocniejszej i lepiej wyposażonej wersji Raspberry Pi.

Za przemawiało:

  • CPU: 2x1GHz
  • RAM: 1GB DDR3
  • Gigabit Ethernet
  • port SATA (dla mnie to wisienka na torcie)

Całość postanowiłem wykorzystać jako działający na Debianie (dystrybucja Bananian) przez 24/7 serwer:

  • multimediów (minidlna – aby nie włączać innego komputera za każdym razem jak najdzie mnie ochota posłuchać muzyki czy coś zobaczyć na TV)
  • ssh (aby można było tym headless serverem zarządzać)
  • vpn (openvpn – aby bez obaw móc korzystać z publicznych sieci WiFi oraz mieć łatwy dostęp do domowej sieci lokalnej)
  • vnc (tightvnc  -jakby trzeba było coś uruchomić w trybie graficznym)
  • www (LAMP – strona, którą czytasz na nim się znajduje + parę innych na własne potrzeby)
  • backupu (tu akurat bez oprogramowania i tylko kilka skryptów bashowych odpalanych z crona)
  • downloadu plików (aria2 i curl – jeśli starczy proste pobieranie z konsoli lub jDownloader w trybie graficznym)
  • [w przyszłości] monitoringu (jak tylko uda się złapać w rozsądnej cenie kamerkę z trybem nocnym co działa pod Linuxem)

Całość działa bardzo szybko, sprawnie i co najważniejsze bardzo stabilnie. Jeśli chodzi o zużycie prądu to wydaje mi się, że nawet spadło gdyż nie potrzebuję już uruchamiać starego Core 2 Duo aby posłuchać muzyki czy zobaczyć coś na TV (pewno godzina jego chodzenia to z dzień pracy Banana Pi).

Banana Pi - gotowy zestaw
Banana Pi w obudowie oraz podłączonym dyskiem SATA i starym pendrive 4GB na backupy.

Banana Pi od strony konsoli administratora
Banana Pi od strony konsoli administratora

Jeśli, ktoś zastanawia się czy warto i ma podstawowe umiejętności zarządzania Linuxem to moim zdaniem warto gdyż do Debiania materiałów jest co niemiara i wszystko można wyczytać.

TV z DLNA i server z mediami (linux)

Niedawno nabyłem TV z obsługa DLNA i postanowiłem postawić sobie serwer, który mógłby serwować mi video, audio i obrazy do niego. Po długich bojach pod Windowsem doszedłem do wniosku, że to jakaś parodia (100% procka, ładowanie zawartości katalogu trwające z minutę etc). Powiedziałem sobie trudno, będę zgrywać z laptopa na serwer i zabrałem się do konfiguracji na linuxie (w moim wypadku ubuntu).
Jakież było moje zdziwienie gdy po 10 minutach wszystko działało jak należy i skoki procka były do max 2-3%.
Oto co zrobiłem:

  1. pobrałem paczkę z minidlna stąd,
  2. następnie najnormalniej w świecie zainstalowałem,

    sudo dpkg -i nazwa_pakietu.deb

  3. i to już praktycznie koniec, serwer sam się dodał to startu podczas boota i jedyne co musiałem zmienić to ścieżki z mediami.
    W pliku /etc/minidlna.conf jest kawałek, który brzmi tak

    # set this to the directory you want scanned.
    # * if have multiple directories, you can have multiple media_dir= lines
    # * if you want to restrict a media_dir to a specific content type, you
    # can prepend the type, followed by a comma, to the directory:
    # + „A” for audio (eg. media_dir=A,/home/jmaggard/Music)
    # + „V” for video (eg. media_dir=V,/home/jmaggard/Videos)
    # + „P” for images (eg. media_dir=P,/home/jmaggard/Pictures)

    Po nim ustawiłem taką linie

    media_dir=/mnt

    Mówi on, że serwer ma szukać wideo, audio i obrazów w katalogu /mnt

  4. I to już koniec. Czasem trzeba ubić serwer i uruchomić z opcja -R

    minidlna -R

    co spowoduje przeskanowanie wszystkich ustawionych katalogów w poszukiwaniu mediów i tyle – max 10 minut ustawiania i filmy + napisy srt chodzą mi na TV wyśmienicie.

Mam nadzieję, że ktoś także skorzysta z tego sposobu :). Oczywiście jak zawsze w ramach możliwości postaram się pomóc w razie problemów.

edit:
W aktualnych wersjach Ubuntu minidlna jest normalnie dostępne w repozytoriach więc można np. z konsoli wpisać

sudo apt-get install minidlna