Od złomu w szufladzie do serwera na full gazie: Dlaczego szalejemy na self-hostingu na Raspberry Pi

Od złomu w szufladzie do serwera na full gazie: Dlaczego szalejemy na self-hostingu na Raspberry Pi

Maj 07, 2026 self-hosting raspberry-pi node.js devops dns github-actions astro web-infrastructure

Raspberry Pi jako serwer pod ręką

Uruchomienie prawdziwej strony WWW na sprzęcie tańszym niż dobra kawiarka? To możliwe i daje frajdę. Chmury jak Vercel ułatwiają życie większości projektów, ale czasem własny hosting na Raspberry Pi wygrywa. Zwłaszcza gdy masz powody, które idą poza sentyment.

Wyobraź sobie: budujesz stronę na Astro, Svelte Kit czy React z Node.js. A tu nagle jakaś stara biblioteka do tłumaczeń blokuje serverless – nie da się jej spakować na statycznie. Albo chcesz pełną kontrolę nad serwerem w locie. Twój Pi z szuflady staje się realną opcją zamiast drogich usług w chmurze.

Krok 1: Routing sieciowy – otwórz drzwi do świata

Najpierw router. Skonfiguruj przekierowanie portów, by publiczny IP łączył się z Pi na półce.

Weź Caddy – prosty reverse proxy, o niebo lepszy od starych narzędzi. Konfiguracja wygląda tak:

yoursite.com {
    root * /home/username/projects/yoursite
    
    file_server
    reverse_proxy localhost:4321
}

Port dobierz do frameworka: Astro lubi 4321, Svelte Kit 5173, a Node.js często 3000. Odśwież Caddy i masz połowę roboty za sobą.

Krok 2: Podłącz domenę do Pi

W panelu rejestratora jak NameOcean dodaj rekord DNS A:

A Record: yoursite.com → your.public.ip.address

Gotowe. Router zrobi resztę – ruch z domeny poleci prosto na Pi.

Krok 3: Zbuduj raz, uruchom na zawsze

Zrób build projektu:

npm run build

Powstanie folder dist z gotową apką i punktem wejścia, np. entry.mjs.

Tu wkracza PM2 – menedżer procesów, który trzyma Node.js w ruchu non-stop:

npm install -g pm2
cd dist/
pm2 start entry.mjs

Strona działa. Bez wiszącego terminala czy konsoli.

Krok 4: Automatyzacja z GitHub Actions

Bez łatwych aktualizacji self-hosting to mordęga. GitHub Actions zmienia to w bajkę.

Stwórz plik .github/workflows/deploy.yml:

name: Deploy to Raspberry Pi
on: [push]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Deploy via SSH
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.PI_HOST }}
          username: ${{ secrets.PI_USER }}
          password: ${{ secrets.PI_PASSWORD }}
          script: |
            ~/bin/deploy.sh

W secrets repo wrzuć IP Pi i dane logowania. Potem skrypt deploy.sh, który ogarnia całość:

#!/usr/bin/env bash
set -euo pipefail

BASE_DIR="$HOME/projects"
PORTS=(4321 4322)
PORT_INDEX=0

echo "Pobieram nowy kod..."
for dir in "$BASE_DIR"/*/ ; do
    if [[ -d "$dir/.git" ]]; then
        (cd "$dir" && git pull)
    fi
done

echo "Buduję projekty..."
for dir in "$BASE_DIR"/*/ ; do
    if [[ -f "$dir/package.json" ]]; then
        CURRENT_PORT=${PORTS[$PORT_INDEX]}
        (
            cd "$dir"
            npm run build -- --port "$CURRENT_PORT"
        )
        PORT_INDEX=$(( (PORT_INDEX + 1) % ${#PORTS[@]} ))
    fi
done

echo "Restartuję serwisy..."
pm2 restart all

Teraz każdy git push ściąga kod, buduje i restartuje – bez dotykania Pi.

Rachunek zysków i strat

Pi nie jest dla wszystkich. Brak redundancji, globalnego CDN, prądu z netem. Pasmo ograniczone, awaria netu = strona w dół. Ale jeśli cenisz kontrolę, oszczędności i pełną władzę nad stackiem – to działa.

Do tego uczysz się DNS, reverse proxy, PM2 i CI/CD na serio. Nie z paneli chmurowych.

Twój stary Raspberry Pi to nie zabawka. To prawdziwa infrastruktura. Dowód, że produkcja nie zawsze wymaga korpo-gigantów.

Read in other languages:

RU BG EL CS UZ TR SV FI RO PT NB NL HU IT FR ES DE DA ZH-HANS EN