Raspberry Pi jako główna maszyna hostingowa

Raspberry Pi 5, jako lokalny serwer i następca VPS

Stało się coś, co od dawna chciałem osiągnąć, ale zrzucałem to na drugi plan. Z jednej strony dyktowane to było zwykłymi względami ekonomicznymi, z drugiej – chęci posiadania i eksperymentowania. Do tej pory mój blog przechodził przez różne platformy i hostingi, m.in. przez Joggera, hosting dzielony w LinuxPL, VPS w nieistniejącym już hostineuro, czy ostatecznie po VPS w OVH. Stan tej rzeczy uległ zmianie na początku tego miesiąca.

Wybór maszyn/ki

Od początku ukierunkowany byłem na malinkę, bardzo chciałem spróbować tego rozwiązania na własnej skórze i gdzieś z tyłu głowy miałem „marzenie, by ją mieć„. Z racji na fakt, że domyślnie tylko Raspberry Pi5 obsługuje dyski M2 – wybór padł na tą generację. Parę osób polecało mi wziąć ThinPC zamiast malinki, bo architektura x64, lecz została malinka…

Od razu zakupiłem pełny zestaw w wersji 8 GB, w skład którego wchodzi:

  • Metalowa obudowa
  • Karta pamięci 64 GB (zbędna dla mnie obecnie)
  • Dedykowany oryginalny zasilacz
  • Płytka do zamontowania dysku M2
  • Dodatkowe chłodzenie

Celowo chciałem też malinę ze względu na mały pobór prądu (27W) i wysoką funkcjonalność.

Montowanie całości, stawianie systemu1 (Ubuntu) – czysta przyjemność. Całkiem niepotrzebnie obawiałem się, że może być z czymś problem. Po uruchomieniu nadszedł czas na

Przywrócenie wszystkiego z backupu

Do dziś dzień korzystam z kopii zapasowych robionych ręcznie przez ten skrypt, bo jeszcze nigdy się nie zawiodłem. Nie mogło być inaczej i tym razem. Po wykonaniu pełnej kopii z VPS w OVH, po prostu odtworzyłem ją na malinie. Wcześniej oczywiście ręczna instalacja wszystkich niezbędnych pakietów do funkcjonowania serwera.

Z racji na to, że przenosiłem dane z Ubuntu na Ubuntu wraz z gotowymi konfigami – nie było wielu problemów. Bo jednak pewne były.

Problem z domeną na dynamicznym publicznym IP

Pierwszy problem, z którym musiałem się zmierzyć, a był dla mnie czymś obcym, było sprawienie by domena działała na dynamicznym publicznym adresie IP. Szczęście w nieszczęściu, że obecny ISP zmienia mi IP średnio raz na miesiąc, więc w ostateczności mógłby to robić ręcznie, ale skoro można to zautomatyzować, to dlaczego by nie.

Krótki research i cyk, gotowe rozwiązanie od kazuko. Co godzinę w CRON ustawione jest uruchomienie w/w skryptu w celu ewentualnej zmiany adresu IP w OVH (domena nadal tam zostaje).

Czy automatyczne uruchamianie co godzinę, nie jest za rzadkie – nie wiem, przekonam się jak doczekam się pierwszej zmiany IP, ile przerwy mi ona dostarczy ;). Domyślny TTL dla domeny to 60.

A gdy już backup został odtworzony i domena zaczęła działać, to rozpocząłem konfigurację usług, z których korzystałem. No i tutaj zatrzymałem się na…

Wypuszczenie w świat VPN przez WireGuard

Z tunelu dostarczanego przez WireGuard korzystam już jakiś czas, więc konfig oczywiście miałem gotowy, migracja dokonana, pacjent (czyli ja, przez komputer, czy telefon) łączy się z dawcą (malina) prawidłowo, ale dawca nie chce puścić dalej w świat. Fuck yeah :P.

W OVH przerabiałem podobne tematy po aktualizacjach systemu, kiedy to nadpisywany został resolv.conf domyślną zawartością i VPN głupiał z tłumaczeniem domen (DNS). Tutaj było podobnie, co nawet naświetliłem Jakubowi w trakcie jednej rozmowy szukając rozwiązania problemu.

Po pierwsze primo odwiązałem2 /etc/resolv.conf od /run/systemd/resolve/stub-resolv.conf i wpisałem sobie takie serwery, jakie chciałem.
Po drugie primo to nie rozwiązało problemu do końca. Po długich kombinacjach, rozwiązanie było mega proste i szybkie. Dodałem sobie ręcznie serwer DNS do konfiguracji WireGuard poprzez wartość:
DNS = <ADRES IP DNS>

Dawca przesyła buziaczki w świat i cały ruch teraz odbywa się tak, jak zaplanowane: telefon/komputer<>malina<>sieć lokalna<>świat.

Ustawienie RevDNS

Doszliśmy do przedostatniego punktu spotkania – ustawienie RevDNS. Będzie krótko, zwięźle i na temat: nie zrobię. Chciałem, ale to się nie uda, bo od ISP nie dostanę takiej funkcji i muszę się obejść smakiem. Ale nic to, nie jest to coś, co muszę mieć… fajnie by było, ale dam radę bez tego. Jedynie może występować problem z powiadomieniami mailowymi o komentarzach, które mogą zostać odrzucane przez serwery dostawców mimo, że domena jest zweryfikowana.

Na razie widzę po swoich powiadomieniach, że na gmail dochodzi wszystko ok.

Przekierowanie portów na routerze

Ostatnim punktem jest port forwarding, by ruch odbywał się do maliny. Tu bez większych problemów, bo na zewnątrz mam i tak puszczony tylko ruch na kilku portach, więc wklepanie ręcznie kilku wartości – bez problemu. Dodatkowo na malinie też stoi firewall blokujący niepożądany ruch.

Czy było warto?

Nie wiem, okaże się ile malina podziała. Z pkt widzenia ekonomicznego jej zakup/utrzymanie zwróci mi się po około 2 latach, bo średnio za rok płaciłem 400 zł za VPS. Zużycie prądu niewielkie, a za internet i tak płacę… Koszt domeny jest najniższym kosztem z całości i nie wliczam go „w straty”, ponieważ i tak muszę ją przedłużać.

Z pkt. widzenia samego posiadania sprzętu – tak, było warto. Jaram się dalej jak dziecko, jak przychodzi zrobić coś na niej, bo jest to dla mnie nowość, żeby mieć serwer w domu. Odnoszę też wrażenie, że blog działa zdecydowanie szybciej, ale nie ma się też co dziwić, bo jest mocniejsza konfiguracja.

A… i na koniec wisienka na torcie. Zmieniłem logo. W końcu przesiadka na self-host jest czymś wielkim i musi temu towarzyszyć jeszcze zmiana wizualna ;). Mimo, że zapierałem się przed kolorowym logo i nie chciałem takiego, tak na razie mi się podoba efekt i zostanie na bliżej nieokreślony czas.

  1. Do tworzenia obrazu systemu w Raspberry Pi służy Pi Imager []
  2. Usunięcie dowiązania pliku unlink. []

Komentarze

9 odpowiedzi na „Raspberry Pi 5, jako lokalny serwer i następca VPS”

  1. Masz swój dzień 4. lipca ;-) Gratulacje :-)

    1. O tak tak xd. Dodatkowo jeden dzień sierpnia będę musiał ustalić na rocznicę i święto „własnego serwera” ;)

  2. Gratulacje. Na pewno warto się pobawić dla nauki i satysfakcji. Czy jest sens ekonomiczny – wątpię. VPS w chmurze będzie tańszy, niż prąd do malinki. I nie mam na myśli free tier. Chociaż tak, malinka pewnie sporo szybsza.

    Dyndns – godzina to trochę sporo. Celowałbym w 5 minut, góra kwadrans.

    Z rzeczy na które warto spojrzeć: cloudflare (potrafią zapewnić cache przy niedostępnym backendzie, choć nie wiem czy w darmowym pakiecie) oraz IPv6. Tunel IPv6 dawał he.net. I wtedy masz stały adres IP (v6) oraz możliwość ustawiania revDNS (dla v6).

    1. Po 2 latach wchodzę tylko na koszty prądu, które rocznie będą o połowę niższe aniżeli utrzymanie vps. Wg obecnej opłaty taryfowej w tauronie, miesiąc pracy maliny na najwyższym poborze prądu, to 20 zł. https://dl.keepmind.eu/Screenshot_20240817-105108.png

      W ciągu tego miesiąca pracy 24/7, nie ma aż tak dużego obciążenia, więc nie dojdę do takich wartości. Trochę żałuję, że nie mam urządzenia do pomiaru zużycia (pomysł na najbliższy miesiąc żeby wpiąć malinę do czegoś takiego i sprawdzić realne zużycie).

      Tak mówisz, żeby zrobić co 15 min… Hmm…

      O, dzięki! Obadam temat he.net w przyszłym tygodniu.

    2. Porównujesz z poprzednim VPS. Tymczasem są dostępne VPSy poniżej 20 zł, w zupełności wystarczające na blog. I różne free tier, które są zupełnie za darmo.

      27W to bardzo dużo w kategorii lekkie maszynki. Stawiam na mniej niż 10 W, z talerzowym dyskiem. Watomierz warto mieć w domu. Majątku nie kosztuje.

      1. Wiem że jest dość popularny mikr.us, ale poza blogiem używam jeszcze znc (bouncer do irc) i synching, który wyklucza się z regulaminem (p2p).

        Na przyszły miesiąc myślę o watomierzu. Może w postaci inteligentnego gniazdka.

  3. Nie boisz się CGNATu Vetry? Bo z tego co widzę, tracert do ciebie jest okropny.

    1. Hm szczerze – nie wiem. Nie sprawdzałem nigdy tego tematu, ba! Pierwsze słyszę o tym.

  4. […] sądziłem, że kilka dni po publikacji Raspberry Pi 5, jako lokalny serwer i następca VPS dotknie mnie awaria sieci – a tak się stało. Była sobie burza, był sobie piorun, był […]

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *