Self-hosting num mini PC com Docker + Cloudflare Tunnel
Como expor vários serviços web com segurança usando um único mini PC em casa. HTTPS via Cloudflare Tunnel sem abrir portas, e tudo rodando com Docker Compose.
Resumo
Suba os serviços com Docker Compose no mini PC e conecte domínio e HTTPS com o Cloudflare Tunnel (cloudflared), sem abrir nenhuma porta. Não precisa configurar o roteador, nem de IP fixo, nem de renovação de certificado.
Nesta página
A conta da nuvem pesa mais do que parece para projetos pequenos. Eu rodo alguns serviços, incluindo este blog, num único mini PC aqui de casa. Vou compartilhar como.
Por que um mini PC
- Fica sempre ligado, e a conta de luz é de alguns trocados por mês
- Com Docker, o ambiente de deploy é idêntico ao da nuvem
- Se o tráfego crescer, é só migrar quando chegar a hora
O problema é um só: "como expor a rede de casa para fora com segurança".
Não abra portas
O jeito tradicional é port forwarding no roteador + DDNS + renovação de certificado. É trabalhoso e perigoso, porque na prática você abre a sua rede doméstica direto para a internet.
Em vez disso, use o Cloudflare Tunnel. No mini PC, o cloudflared abre uma conexão de dentro para fora com a Cloudflare, e o tráfego entra por esse túnel. O número de portas de entrada abertas para o mundo é 0.
사용자 → Cloudflare(HTTPS) → 터널 → 미니 PC 의 컨테이너
- Não precisa de IP público nem de port forwarding
- O certificado HTTPS é gerenciado automaticamente pela Cloudflare
- IP dinâmico não faz diferença nenhuma
Agrupando serviços com Docker Compose
Cada serviço sobe como um container. Se for um app Next.js, faça o build com output: "standalone" para gerar uma imagem leve.
services:
blog:
build:
context: .
dockerfile: apps/blog/Dockerfile
container_name: why-next-blog
restart: unless-stopped
networks: [api]
networks:
api:
external: true # cloudflared 와 같은 네트워크
O ponto principal é colocar tudo na mesma rede Docker do cloudflared. É assim que o túnel encontra o serviço pelo nome do container.
Conectando o domínio
No dashboard da Cloudflare (ou na configuração do túnel), adicione um Public Hostname.
blog.example.com → http://why-next-blog:3001
E é isso. Rode docker compose up -d --build e, alguns minutos depois, o site abre no seu domínio.
Resumo
- Mini PC + Docker = deploy barato e idêntico ao da nuvem
- Cloudflare Tunnel traz HTTPS e domínio sem abrir portas
- Coloque os containers na mesma rede do cloudflared
- Mapeie
domínio → container:portacom Public Hostname
Para serviços pequenos, essa combinação aguenta por muito tempo. É assim que eu rodo vários apps e vou expandindo as coisas que eu criei.
Perguntas frequentes
Meu IP residencial é dinâmico, tem problema?
Nenhum problema. No Cloudflare Tunnel é o mini PC que abre a conexão de saída para a Cloudflare, então IP público, port forwarding e DDNS são totalmente desnecessários.
Tem algum custo?
O Cloudflare Tunnel em si é gratuito. Só com o custo do domínio você já consegue começar.
Artigos relacionados
- 💻 Dev
Criando um blog MDX do zero com Next.js - como este blog foi feito
O processo de criar um blog que roda só com arquivos markdown, sem CMS, usando o App Router do Next.js 16. Estrutura de pastas, configuração do MDX e SEO, tudo organizado com o fluxo de código real.
- 💻 Dev
5 apps num único repositório - o monorepo Turborepo de um dev solo
Como montar um monorepo Turborepo para gerenciar vários apps e sites num único repositório. Compartilhamento de configurações, economia de build com cache e deploy por app, tudo do ponto de vista prático.
- 📚 Aprendizado
Palavras em inglês: por que você deve transformá-las em 'frases suas' em vez de decorar
O verdadeiro motivo pelo qual as palavras não saem na hora de falar, por mais que você decore listas, e como fixar na memória transformando o que você viu hoje em frases suas.