Varaosista tuotantopalvelimeksi: Miksi olemme piin vaivaamana itsehostauksessa
Pi-kaappiisi yllättävä tuotanto-serveri
On jotain mahtavaa siinä, kun saat pyörittämään oikeaa sivustoa laitteella, joka maksoi vähemmän kuin hyvä kahvikone. Vaikka pilvipalvelut kuten Vercel hoitavat suurimman osan duunista, Raspberry Pi itsehostaukseen on aitoja syitä. Ne ylittävät pelkän haikeuden.
Todellinen tilanne: sinulla on Node.js-pohjainen juttu, kuten Astro, Svelte Kit tai React. Siinä on riippuvuuksia, jotka eivät mahdu serverless-maailmaan. Ehkä vanha i18n-kirjasto, joka toimii täydellisesti mutta ei paketu staattisesti. Tai kaipaat tarkkaa hallintaa suoritukseen. Pi muuttuu yhtäkkiä edulliseksi vaihtoehdoksi kalliille pilvelle.
Vaihe 1: Reititys verkkoon – portti maailmalle
Ensin Pi pitää liittää nettiin. Tee port forwarding reitittimessäsi. Se yhdistää julkisen IP:si pieneen koneeseen hyllylläsi.
Ota käyttöön Caddy, yksinkertainen reverse proxy. Konffaa näin:
yoursite.com {
root * /home/username/projects/yoursite
file_server
reverse_proxy localhost:4321
}
Portti riippuu frameworkista: Astro käyttää 4321, Svelte Kit 5173, Node.js usein 3000. Käynnistä Caddy uudelleen, ja olet puolivälissä.
Vaihe 2: Ohjaa domain Pi:lle
Rekisteröijät kuten NameOcean tekevät tästä helppoa. Lisää DNS A-tietue:
A Record: yoursite.com → your.public.ip.address
Valmista. Reitittimen forwarding hoitaa lopun. Liikenne domainiin menee suoraan Pi:lle.
Vaihe 3: Rakenna kertaalleen, pyöritä ikuisesti
Rakenna projekti normaalisti:
npm run build
Syntyy dist-kansio valmiilla sovelluksella ja entry-pisteellä, kuten entry.cjs tai entry.mjs.
Tässä astuu PM2 kuvaan – prosessien vartija, joka pitää Node.js-sovelluksen hengissä:
npm install -g pm2
cd dist/
pm2 start entry.mjs
Sivusto elää nyt itsenäisesti. Ei tarvetta pitää konsolia auki.
Vaihe 4: Automaattiset päivitykset GitHub Actionsilla
Itsehosting toimii vasta, kun päivitykset hoituvat ilman SSH-luukutusta. GitHub Actions tekee tästä vaivatonta.
Luo repoosi tiedosto .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
Lisää Pi:n IP ja tunnarit salaisuuksiksi repoosi. Tee deploy-skripti deploy.sh:
#!/usr/bin/env bash
set -euo pipefail
BASE_DIR="$HOME/projects"
PORTS=(4321 4322)
PORT_INDEX=0
echo "Hae uusin koodi..."
for dir in "$BASE_DIR"/*/ ; do
if [[ -d "$dir/.git" ]]; then
(cd "$dir" && git pull)
fi
done
echo "Rakenna projektit..."
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 "Käynnistä palvelut uudelleen..."
pm2 restart all
Nyt jokainen git push laukaisee Pi:llä koodin haun, rakennuksen ja uudelleenkäynnistyksen – täysin automaattisesti.
Laskelma rehellisesti
Pi ei sovi kaikille. Menetät pilven redundanssin ja CDN:n. Bändwidth on rajallinen. Netin kaatumista koko sivusto kaatuu. Mutta jos haluat kontrollia, säästöjä ja oman stäkin iloa, tämä on toimiva ratkaisu.
Se opettaa DNS:ää, reverse proxyt, prosessinhallintaa ja CI/CD:tä paremmin kuin pilven naputtelu. Pi ei ole pelkkä lelu – se on oikea infra tuotantoon. Et aina tarvitse isot enterprise-ratkaisut.