Do Hardware Sobrando à Máquina de Produção: Por Que Somos Viciados em Self-Hosting no Raspberry Pi
O Servidor Surpreendente na Sua Gaveta
Rodar um site de produção em hardware mais barato que uma cafeteira de luxo tem um charme único. Plataformas na nuvem como Vercel resolvem a maioria dos casos, mas hospedar tudo em um Raspberry Pi faz sentido real – e vai além de saudosismo puro.
Imagine o caso prático: você usa um framework Node.js como Astro, SvelteKit ou React, com dependências que não encaixam bem em ambientes serverless. Pode ser uma biblioteca de i18n velha que funciona perfeitamente, mas não compila estaticamente. Ou quem sabe controle total no runtime. Aí seu Pi vira opção barata contra nuvens caras.
Passo 1: Roteamento de Rede – A Porta de Entrada para a Internet
Primeiro, libere portas no roteador para conectar seu Pi ao mundo. É o elo entre o IP público e o aparelhinho quieto na prateleira.
Instale Caddy, um proxy reverso moderno e descomplicado. Crie um config simples assim:
yoursite.com {
root * /home/usuario/projetos/yoursite
file_server
reverse_proxy localhost:4321
}
Ajuste a porta pelo framework: Astro usa 4321, SvelteKit 5173, apps Node.js geralmente 3000. Recarregue o Caddy e pronto, metade do caminho feito.
Passo 2: Apontar o Domínio para o Pi
Registradores como NameOcean facilitam isso. Basta um registro DNS A record:
A Record: yoursite.com → seu.ip.publico
O roteador cuida do resto via port forwarding. Todo tráfego pro domínio vai direto pro Pi.
Passo 3: Compile Uma Vez, Rode Para Sempre
Gere o build padrão:
npm run build
Isso cria a pasta dist com o app pronto e o entry point (geralmente entry.cjs ou entry.mjs).
Aí entra o PM2, gerenciador de processos que mantém tudo vivo:
npm install -g pm2
cd dist/
pm2 start entry.mjs
Site no ar, sem precisar de terminal aberto ou console rodando.
Passo 4: Deploy Automático com GitHub Actions
Hospedagem própria só vale se atualizar código for fácil, sem SSH toda hora. GitHub Actions muda isso de manual pra automático.
Crie .github/workflows/deploy.yml no repo:
name: Deploy no 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
Guarde IP e credenciais nos secrets do repo. Faça um script de deploy que resolve tudo:
#!/usr/bin/env bash
set -euo pipefail
BASE_DIR="$HOME/projetos"
PORTS=(4321 4322)
PORT_INDEX=0
echo "Baixando código novo..."
for dir in "$BASE_DIR"/*/ ; do
if [[ -d "$dir/.git" ]]; then
(cd "$dir" && git pull)
fi
done
echo "Compilando projetos..."
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 "Reiniciando serviços..."
pm2 restart all
Todo git push puxa o código, reconstrói e reinicia – sem esforço.
A Conta Real
Pi não serve pra todo mundo. Sem redundância ou CDN global da nuvem. Banda limitada. Internet cai, site some. Mas se você prefere controle total, economia e stack próprio, é opção séria.
E ensina na prática: DNS, proxies reversos, gerenciadores de processo e CI/CD de um jeito que dashboard de nuvem nunca mostra.
Seu Raspberry Pi sobrando não é só enfeite. É infraestrutura de verdade – prova que produção não precisa de soluções empresariais caras.