Fra gammel hardware til live-server: Hvorfor vi er vilde med Raspberry Pi self-hosting
Den lille server i skuffen
Det er ren tilfredsstillelse at køre en rigtig hjemmeside fra hardware, der koster mindre end en god kaffemaskine. Cloud-tjenester som Vercel løser det meste for os, men der er gode grunde til at sætte en Raspberry Pi i gang med self-hosting. Det handler ikke kun om nostalgi.
Tænk på dit Node.js-projekt med Astro, Svelte Kit eller React. Nogle dependencies passer ikke til serverless-platforme. Måske en gammel i18n-pakke, der virker perfekt, men ikke kan bundtes statisk. Eller du vil styre runtime præcist. Her bliver din Pi et billigt alternativ til dyr cloud.
Trin 1: Netværk og routing – vejen ud til nettet
Først skal din Pi ud på internettet. Sæt port forwarding op i din router. Det forbinder din offentlige IP med den lille maskine derhjemme.
Brug Caddy som reverse proxy. Den er enkel og moderne. Lav en config som denne:
yoursite.com {
root * /home/bruger/projekter/yoursite
file_server
reverse_proxy localhost:4321
}
Porten afhænger af dit framework: Astro kører på 4321, Svelte Kit på 5173, Node.js ofte på 3000. Genindlæs Caddy, og du er godt i gang.
Trin 2: Peg dit domain mod Pi'en
Hos registrarer som NameOcean er det nemt. Opret et simpelt DNS A-record:
A Record: yoursite.com → din.offentlige.ip.adresse
Routeren håndterer resten. Trafik til dit domain går automatisk til Pi'en.
Trin 3: Byg én gang, kør for evigt
Byg projektet med:
npm run build
Nu har du en dist-mappe med den kompilererede app og entrypoint som entry.cjs eller entry.mjs.
Her kommer PM2 ind. Den holder din Node.js-app kørende for altid:
npm install -g pm2
cd dist/
pm2 start entry.mjs
Din side er live. Ingen terminal, der skal holde den kørende.
Trin 4: Automatiser med GitHub Actions
Self-hosting bliver kedeligt uden nemme opdateringer. GitHub Actions gør det simpelt – ingen SSH hver gang.
Opret .github/workflows/deploy.yml i dit repo:
name: Deploy til 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
Tilføj Pi'ens IP og login i repo-secrets. Lav et deploy-script, der fikser alt:
#!/usr/bin/env bash
set -euo pipefail
BASE_DIR="$HOME/projekter"
PORTS=(4321 4322)
PORT_INDEX=0
echo "Henter ny kode..."
for dir in "$BASE_DIR"/*/ ; do
if [[ -d "$dir/.git" ]]; then
(cd "$dir" && git pull)
fi
done
echo "Bygger projekter..."
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 "Genstarter tjenester..."
pm2 restart all
Nu trigger hver git push en automatisk opdatering: pull, build og restart.
Den ærlige regning
En Pi er ikke til alle. Du mister cloudens redundans og globale CDN. Båndbredden er begrænset. Falder nettet, falder din side. Men hvis du vil have kontrol, lave penge og eje din egen stack, så virker det fint.
Det er også en super læringsrejse. Du forstår DNS, reverse proxies, process managers og CI/CD på en måde, cloud-knapper aldrig viser dig.
Din gamle Raspberry Pi er ingen legetøj. Den er rigtig infrastruktur – og bevis på, at du ikke altid skal bruge enterprise-løsninger til produktion.