Van oude rommel tot powerhouse: waarom we verslaafd zijn aan Raspberry Pi self-hosting
De verrassende server in je la
Niets zo bevredigend als een live website draaien op hardware die goedkoper is dan een espresso-apparaat. Cloud-diensten als Vercel doen het gros van het werk, maar soms loont zelf hosten op een Raspberry Pi. En dat heeft niets met retro-gevoelens te maken.
Stel: je bouwt met Astro, SvelteKit of React, en er zit een dependency in die serverless niet slikt. Een oude i18n-module die perfect draait, maar niet statisch bundelt. Of je wilt totale grip op de runtime. Dan wordt je Pi plots een slimme optie, zonder de cloud-rekeningen.
Stap 1: Router instellen – deur naar het web openen
Eerst zorgt port forwarding op je router dat je Pi bereikbaar wordt vanaf buiten. Dat stuurt verkeer van je publieke IP naar het kastje op je plank.
Pak Caddy, een simpele reverse proxy die alles makkelijker maakt dan oude tools. Maak een config zoals deze:
yoursite.com {
root * /home/gebruiker/projecten/yoursite
file_server
reverse_proxy localhost:4321
}
Check de poort van je framework: Astro zit op 4321, SvelteKit op 5173, Node-apps vaak op 3000. Herlaad Caddy, en je bent halverwege.
Stap 2: Domein koppelen aan je Pi
Bij registrars als NameOcean fix je dit in een mum. Voeg een A-record toe:
A Record: yoursite.com → je.publieke.ip.adres
Klaar. De router-forwarding regelt de rest. Verkeer naar je domein landt vanzelf op de Pi.
Stap 3: Eenmalig bouwen, eeuwig draaien
Bouw je project met het gebruikelijke commando:
npm run build
Dat spuugt een dist-map uit met je gecompileerde app en een entry-point als entry.mjs of entry.cjs.
Hier komt PM2 om de hoek kijken, een manager die je Node-app altijd online houdt:
npm install -g pm2
cd dist/
pm2 start entry.mjs
Site draait. Geen terminal nodig, geen gedoe met afsluitende sessies.
Stap 4: Automatisch deployen via GitHub Actions
Zelf hosten mag geen SSH-marathon worden bij updates. GitHub Actions maakt het effortless.
Maak .github/workflows/deploy.yml aan in je repo:
name: Deploy naar 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
Stop je Pi-IP en logins in de repo-secrets. Maak een deploy-script dat het vuile werk doet:
#!/usr/bin/env bash
set -euo pipefail
BASE_DIR="$HOME/projects"
PORTS=(4321 4322)
PORT_INDEX=0
echo "Nieuwste code ophalen..."
for dir in "$BASE_DIR"/*/ ; do
if [[ -d "$dir/.git" ]]; then
(cd "$dir" && git pull)
fi
done
echo "Projecten bouwen..."
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 "Services herstarten..."
pm2 restart all
Elke git push laat je Pi updaten, bouwen en herstarten. Zonder ingrijpen.
De echte afweging
Een Pi is geen alleskunner. Geen cloud-redundancy of CDN. Bandbreedte is beperkt, en als je internet kakt, ligt je site stil. Maar wil je controle, besparingen en je stack in eigen hand? Dan werkt het prima.
Het is ook een top-leermoment. Je snapt DNS, proxies, process managers en CI/CD echt, veel dieper dan cloud-knoppen indrukken.
Die stoffige Raspberry Pi? Geen speelgoed. Serieuze infra. Bewijs dat production niet altijd enterprise-cloud vraagt.