Du matos qui traîne au serveur de prod : notre obsession pour l’hébergement Raspberry Pi
Le Serveur Surprise dans Ton Tiroir
Rien de tel que faire tourner un site en prod sur du matos qui coûte moins cher qu'un expresso chez le barista. Les clouds comme Vercel gèrent la plupart des projets. Mais l'auto-hébergement sur Raspberry Pi a de vrais arguments. Pas juste pour le fun rétro.
Imagine : ton app Node.js avec Astro, SvelteKit ou React a des dépendances incompatibles avec le serverless. Une lib i18n oubliée qui marche nickel, mais impossible à bundler. Ou tu veux un contrôle total sur l'exécution. Ton Pi devient alors une option sérieuse face aux factures cloud salées.
Étape 1 : Routage Réseau, la Porte vers le Web
D'abord, ouvre les ports sur ton routeur. C'est le lien entre ton IP publique et ton Pi qui ronronne sur l'étagère.
Installe Caddy, un reverse proxy ultra-simple. Voici un config basique :
yoursite.com {
root * /home/user/projets/yoursite
file_server
reverse_proxy localhost:4321
}
Adapte le port : 4321 pour Astro, 5173 pour SvelteKit, 3000 pour un classique Node. Recharge Caddy, et hop, c'est parti pour la moitié du boulot.
Étape 2 : Vise Ton Domaine sur le Pi
Avec un registrar comme NameOcean, c'est fastoche. Ajoute un enregistrement DNS A :
A Record: yoursite.com → ton.ip.publique
Ton routeur redirige tout le trafic. Fin de l'histoire.
Étape 3 : Une Seule Build, et Ça Tourne Indéfiniment
Lance la build habituelle :
npm run build
Ça crée un dossier dist avec ton app compilée et son point d'entrée (entry.cjs ou entry.mjs).
PM2 prend le relais pour garder le process en vie :
npm install -g pm2
cd dist/
pm2 start entry.mjs
Ton site est en ligne. Plus besoin de terminal ouvert.
Étape 4 : Déploys Auto via GitHub Actions
L'auto-hébergement sans automatisation, c'est la galère. GitHub Actions change la donne.
Crée .github/workflows/deploy.yml dans ton repo :
name: Déploy sur Raspberry Pi
on: [push]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Déploy SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.PI_HOST }}
username: ${{ secrets.PI_USER }}
password: ${{ secrets.PI_PASSWORD }}
script: |
~/bin/deploy.sh
Stocke l'IP et les creds en secrets repo. Puis un script deploy.sh qui gère le reste :
#!/usr/bin/env bash
set -euo pipefail
BASE_DIR="$HOME/projets"
PORTS=(4321 4322)
PORT_INDEX=0
echo "Récup code récent..."
for dir in "$BASE_DIR"/*/ ; do
if [[ -d "$dir/.git" ]]; then
(cd "$dir" && git pull)
fi
done
echo "Build des projets..."
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 "Redémarrage services..."
pm2 restart all
Chaque git push met à jour, rebuild et relance. Zéro effort.
Le Calcul Réaliste
Pas pour tout le monde. Pas de redondance cloud ni CDN mondial. Bande passante limitée. Panne internet = site HS. Mais si tu préfères le contrôle, les économies et le plaisir de tout maîtriser, ça marche grave.
Surtout, c'est une école : DNS, reverse proxy, process manager, CI/CD. Bien plus concret qu'un dashboard cloud.
Ton vieux Pi n'est pas un gadget. C'est de l'infra sérieuse. Preuve qu'on n'a pas toujours besoin de solutions enterprise pour du prod.