Varaosista tuotantopalvelimeksi: Miksi olemme piin vaivaamana itsehostauksessa

Varaosista tuotantopalvelimeksi: Miksi olemme piin vaivaamana itsehostauksessa

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

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.

Read in other languages:

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