Od starého haraburdí k produkčnímu serveru: Proč jsme blázni do self-hostingu na Raspberry Pi
Nečekaný server schovaný v zásuvce
Běhat plnohodnotný web z hardware, co stojí méně než dobrá káva? To má své kouzlo. Cloudové služby jako Vercel zvládnou většinu projektů, ale občas chcete vše pod kontrolou. Raspberry Pi se stává reálnou volbou – ne kvůli nostalgii, ale protože to prostě funguje.
Představte si: máte Node.js framework jako Astro, Svelte Kit nebo React. Nějaká závislost nefunguje na serverless platformách. Třeba stará i18n knihovna, která bundlování odmítá. Nebo potřebujete upravit runtime podle sebe. Pi se najednou vyplatí víc než drahý cloud.
Krok 1: Nastavte směrování sítě – cesta na internet
Nejdřív otevřete port forwarding na routeru. To spojí vaši veřejnou IP s Pi na poličce.
Pak si nainstalujte Caddy. Tenhle moderní reverse proxy je mnohem jednodušší než staré řešení. Konfigurace vypadá takto:
yoursite.com {
root * /home/username/projects/yoursite
file_server
reverse_proxy localhost:4321
}
Port si upravte podle frameworku: Astro jede na 4321, Svelte Kit na 5173, Node.js app často na 3000. Načtěte config a polovina práce je hotová.
Krok 2: Namířte doménu na Pi
Registrátor jako NameOcean to zvládne rychle. Vytvořte A záznam v DNS:
A Record: yoursite.com → your.public.ip.address
Dost. Router to zbytek zařídí. Trafik na doménu se automaticky pošle na Pi.
Krok 3: Postavte jednou, spusťte navěky
Sestavte projekt klasicky:
npm run build
Vznikne složka dist s hotovou app a entry pointem (např. entry.cjs nebo entry.mjs).
Teď přijde PM2 – manažer procesů, co udrží Node.js app v chodu donekonečna:
npm install -g pm2
cd dist/
pm2 start entry.mjs
Web běží. Žádné držení konzole, žádná závislost na terminálu.
Krok 4: Automatizujte nasazení přes GitHub Actions
Self-hosting bez SSH při každé změně? Žádný problém. GitHub Actions to udělá plynule.
V repo vytvořte .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
Do secrets repo přidejte IP a přihlašovací údaje Pi. Pak napište skript deploy.sh, co vše zvládne:
#!/usr/bin/env bash
set -euo pipefail
BASE_DIR="$HOME/projects"
PORTS=(4321 4322)
PORT_INDEX=0
echo "Táhnu nejnovější kód..."
for dir in "$BASE_DIR"/*/ ; do
if [[ -d "$dir/.git" ]]; then
(cd "$dir" && git pull)
fi
done
echo "Sestavuju 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 "Restartuju služby..."
pm2 restart all
Každý git push spustí stahování kódu, build a restart. Automaticky.
Skutečné plusy i mínusy
Pi není pro každého. Žádná redundance, žádný globální CDN. Pásmo je omezené, výpadek netu = výpadek webu. Ale pokud chcete kontrolu, nízké náklady a radost z vlastního stacku, jde to.
Navíc se naučíte DNS, reverse proxy, process management a CI/CD pořádně. Tlačítka v cloudu to nenahradí.
Ten zapomenutý Pi v zásuvce? Není to hračka. Je to pořádná infrastruktura. Důkaz, že enterprise řešení nepotřebujete vždycky.