Quase todo tutorial de self-hosting hoje começa com "suba o contêiner Docker". Se essa frase te trava, este guia é para você. Docker é a habilidade que torna o self-hosting fácil — e a ideia por trás dele é mais simples do que parece.
O problema que o Docker resolve
Instalar um app "na unha" no servidor é uma dor: ele precisa da versão certa de PHP, de tal biblioteca, de tal configuração — e isso conflita com outro app que quer versões diferentes. Você mexe numa coisa e quebra outra. É o clássico "na minha máquina funciona".
O Docker resolve empacotando cada app com tudo que ele precisa para rodar, isolado dos demais.
Os conceitos, sem jargão
Contêiner
Pense num contêiner como uma caixa isolada que já contém o app e todas as suas dependências, prontinho para rodar. Ele não "suja" o servidor nem briga com outros apps. Cada app vive na sua caixa.
Não é uma máquina virtual: o contêiner é muito mais leve e rápido, porque compartilha o núcleo do sistema em vez de emular um computador inteiro.
Imagem
A imagem é o "molde" do contêiner — o pacote pronto que você baixa (ex.: a imagem oficial do Nextcloud). A partir de uma imagem, você cria um ou vários contêineres.
Volume
Contêiner é descartável: se você apagar, os dados de dentro vão junto. O volume é onde você guarda os dados que precisam sobreviver (arquivos, banco de dados) fora do contêiner. Regra de ouro: dados importantes sempre em volumes.
Porta
O contêiner é isolado, então você mapeia portas para acessá-lo (ex.: a porta 8080 da VPS aponta para a porta interna do app).
Docker Compose: vários contêineres, um arquivo
A maioria dos apps precisa de mais de um contêiner: o Nextcloud quer um banco de dados e um Redis; o n8n quer um PostgreSQL. Subir cada um na mão é chato.
O Docker Compose resolve com um único arquivo, o docker-compose.yml, onde você descreve todos os serviços, volumes e portas. Um comando sobe tudo junto:
services:
app:
image: nome-da-imagem:latest
ports:
- "8080:80"
volumes:
- dados:/caminho/no/container
environment:
- VARIAVEL=valor
restart: unless-stopped
volumes:
dados:
E para colocar tudo no ar:
docker compose up -d
O -d roda em segundo plano. Pronto: o app está no ar. É por isso que quase todo tutorial de self-hosting entrega um docker-compose.yml — você só cola, ajusta e sobe.
Os comandos que você vai usar 90% do tempo
docker compose up -d # sobe os serviços (segundo plano)
docker compose down # derruba os serviços
docker compose ps # lista o que está rodando
docker compose logs -f app # acompanha os logs de um serviço
docker compose pull # baixa versões novas das imagens
docker compose up -d # aplica a atualização
Atualizar um app self-hosted normalmente é isto: pull + up -d. Simples assim.
Uma interface gráfica ajuda (Portainer)
Não curte terminal? O Portainer é um painel web para gerenciar contêineres, imagens e volumes pelo navegador — ótimo para visualizar o que está rodando e dar manutenção sem decorar comandos.
Por que isso pede uma VPS (e não hospedagem compartilhada)
Docker precisa de acesso root e controle do sistema — coisas que a hospedagem compartilhada não dá. É exatamente para isso que serve uma VPS: seu ambiente, seu root, seus contêineres. Instalar o Docker é um comando; a partir daí, o mundo do self-hosting se abre.
A fundação está pronta
Com Docker e Docker Compose você instala praticamente qualquer app self-hosted em minutos. Tudo que você precisa é uma VPS com root:
Agora escolha o primeiro app: Nextcloud, Vaultwarden, n8n ou veja o guia de self-hosting.

