Από Σκονισμένο Raspberry Pi σε Παραγωγικό Server: Γιατί Εξαρτόμαστε με το Self-Hosting
Ο Raspberry Pi Σου Στο Στυλ Production Server
Φαντάσου να τρέχεις έναν πλήρη ιστότοπο από hardware που κοστίζει όσο δυο freddo. Οι cloud υπηρεσίες όπως το Vercel λύνουν τα περισσότερα, αλλά ο self-hosting σε Raspberry Pi έχει σοβαρά πλεονεκτήματα. Όχι μόνο νοσταλγία.
Πάρε ένα project σε Node.js – Astro, Svelte Kit, React. Αν έχει dependencies που δεν ταιριάζουν με serverless, όπως παλιό i18n module ή ανάγκη για runtime tweaks, ο Pi γίνεται ιδανική λύση. Φθηνός και πλήρως δικός σου.
Βήμα 1: Άνοιξε Πόρτες Στο Router
Πρώτα, ρύθμισε port forwarding στο router. Σύνδεσε το public IP σου με τον Pi που βουίζει στο ράφι.
Εγκατέστησε Caddy, τον εύκολο reverse proxy. Φτιάξε config έτσι:
yoursite.com {
root * /home/username/projects/yoursite
file_server
reverse_proxy localhost:4321
}
Ο port εξαρτάται: Astro στο 4321, Svelte Kit 5173, Node συνήθως 3000. Reload και προχώρα.
Βήμα 2: Σύνδεσε Domain Με A Record
Σε registrar όπως NameOcean, πρόσθεσε απλό DNS A record:
A Record: yoursite.com → your.public.ip.address
Ο router κάνει τα υπόλοιπα. Η κίνηση φτάνει κατευθείαν στον Pi.
Βήμα 3: Build Και PM2 Για Σταθερότητα
Τρέξε build:
npm run build
Βγαίνει folder dist με το entry point (entry.cjs ή mjs).
Εισάγει PM2 για μόνιμη εκτέλεση:
npm install -g pm2
cd dist/
pm2 start entry.mjs
Τελείωσε. Δεν χρειάζεσαι ανοιχτό terminal.
Βήμα 4: GitHub Actions Για Αυτόματα Deploy
Ξέχνα SSH κάθε φορά. Με GitHub Actions γίνεται μαγικό.
Φτιάξε .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
Βάλε IP και credentials στα secrets. Δημιούργησε script deploy.sh:
#!/usr/bin/env bash
set -euo pipefail
BASE_DIR="$HOME/projects"
PORTS=(4321 4322)
PORT_INDEX=0
echo "Ενημέρωση κώδικα..."
for dir in "$BASE_DIR"/*/ ; do
if [[ -d "$dir/.git" ]]; then
(cd "$dir" && git pull)
fi
done
echo "Build projects..."
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 "Restart PM2..."
pm2 restart all
Κάθε push ενημερώνει, buildάρει και restart – μόνος του.
Τα Υπολογιστικά
Δεν είναι για όλους. Χάνεις redundancy, CDN, απεριόριστο bandwidth. Αν πέσει το ίντερνετ, πέφτει και ο site. Αλλά για control, εξοικονόμηση και ιδιοκτησία stack, δουλεύει άψογα.
Και μαθαίνεις βαθιά: DNS, proxies, PM2, CI/CD. Πέρα από κουμπιά cloud.
Ο παλιός σου Pi δεν είναι παιχνίδι. Είναι real infrastructure για production. Δεν χρειάζεσαι πάντα enterprise.