Da un Raspberry Pi in soffitta al server in produzione: l'ossessione per l'hosting fai-da-te
Il Server Nascosto nel Tuo Cassetto
Niente batte la soddisfazione di far girare un sito in produzione su un hardware che costa meno di un caffè al bar. Le piattaforme cloud come Vercel risolvono tanti problemi, ma a volte l'hosting fai-da-te su un Raspberry Pi ha senso. Non è solo romanticismo: ci sono motivi pratici che lo rendono una scelta solida.
Pensa a un'app Node.js con Astro, SvelteKit o React. Magari hai dipendenze ostiche per i serverless, tipo una libreria i18n vecchia ma perfetta che non si bundleggia. O serve controllo totale sul runtime. Ecco che il tuo Pi diventa un'opzione low-cost contro i colossi cloud.
Passo 1: Apri le Porte al Web
Per collegare il Pi al mondo, configura il port forwarding sul router. È il canale che porta il traffico dal tuo IP pubblico al dispositivo in casa.
Scegli Caddy, un reverse proxy moderno e intuitivo. Prepara un file di config semplice:
yoursite.com {
root * /home/username/projects/yoursite
file_server
reverse_proxy localhost:4321
}
Adatta la porta: 4321 per Astro, 5173 per SvelteKit, 3000 per molte app Node. Ricarica Caddy e sei a buon punto.
Passo 2: Collega il Domain al Tuo Pi
Con registrar come NameOcean è facile. Basta un record DNS A:
A Record: yoursite.com → your.public.ip.address
Il router fa il resto. Il traffico sul domain arriva dritto al Pi.
Passo 3: Compila e Avvia per Sempre
Lancia il build classico:
npm run build
Otterrai una cartella dist con l'app pronta e l'entry point (tipo entry.cjs o entry.mjs).
Entra in scena PM2, il gestore di processi che tiene tutto vivo:
npm install -g pm2
cd dist/
pm2 start entry.mjs
Ora il sito è online. Niente terminale aperto, niente crash improvvisi.
Passo 4: Deployment Automatico con GitHub Actions
L'hosting fai-da-te deve essere comodo. GitHub Actions elimina gli SSH manuali.
Crea .github/workflows/deploy.yml nel repo:
name: Deploy su 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
Salva IP e credenziali nei secrets del repo. Poi lo script deploy.sh che fa tutto:
#!/usr/bin/env bash
set -euo pipefail
BASE_DIR="$HOME/projects"
PORTS=(4321 4322)
PORT_INDEX=0
echo "Aggiorno il codice..."
for dir in "$BASE_DIR"/*/ ; do
if [[ -d "$dir/.git" ]]; then
(cd "$dir" && git pull)
fi
done
echo "Ricompilo i progetti..."
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 "Riavvio i servizi..."
pm2 restart all
Ogni git push aggiorna, ricompila e riavvia. Zero fatica.
I Conti Veri
Non è per tutti. Niente ridondanza cloud, niente CDN globale. Banda limitata, e se salta internet salta il sito. Ma se vuoi controllo totale, costi bassissimi e il gusto di gestire tutto, funziona alla grande.
È pure una scuola pratica: padroneggi DNS, reverse proxy, PM2 e CI/CD come non faresti con un dashboard cloud.
Quel Raspberry Pi polveroso? Non è un gingillo. È infrastruttura vera, che dimostra come basti poco per siti in produzione.