Servidor Doméstico Self-Hosted

Servidor Doméstico Self-Hosted

Raspberry Pi 4 (2GB) Raspberry Pi OS Lite (64-bit) Docker Nginx Proxy Manager Cloudflare Tunnel Tailscale Python systemd Geekworm X703 UPS SSD

Servidor doméstico construído de raiz numa Raspberry Pi 4, sempre ligado, que aloja este portefólio e outros serviços pessoais em contentores Docker, com uma UPS e um serviço próprio que protege os dados em falhas de energia.


Detalhes do Projeto

Este servidor aloja o portefólio que está a ver neste momento, entre outros serviços: o ntfy para notificações no telemóvel (incluindo as mensagens do formulário de contacto deste site), o Navidrome como servidor de música pessoal, o HedgeDoc para notas e um webmail (SnappyMail) acessível apenas pela rede privada do Tailscale.

Cada serviço corre no seu próprio contentor Docker, com a configuração guardada num SSD externo, e todos partilham uma rede interna. O acesso público é feito através de um Cloudflare Tunnel até ao Nginx Proxy Manager, que encaminha cada subdomínio para o serviço certo, sem abrir portas no router. A administração remota é feita por SSH através do Tailscale.

No hardware, um UPS hat Geekworm X703 com bateria 18650 mantém o servidor ligado quando falha a energia. Como esta UPS não permite ao sistema ler o nível da bateria, escrevi um serviço em Python (systemd) que deteta a falha de forma indireta: se o router deixar de responder durante 3 minutos, para os contentores de forma ordenada e grava tudo no disco antes de a bateria acabar; quando a energia volta, arranca-os outra vez. Tudo está montado numa caixa com entradas de ar, que mantém a ventilação passiva para evitar 'thermal throttling' sob carga.