🖥️ VPS recomendada
O Postiz roda confortavelmente em uma VPS pequena, mas não em um shared hosting. O processo Node + Postgres + Redis consomem RAM e exigem controle root para Docker. O mínimo viável é 2 GB de RAM, 2 vCPUs e 20 GB de disco — abaixo disso, OOM kill é questão de tempo.
Duas escolhas óbvias e baratas: Hetzner CX22 (€4/mês, datacenter na Alemanha/Finlândia) ou DigitalOcean Basic Droplet ($6/mês, várias regiões). Ambas dão Ubuntu 24.04 LTS em poucos cliques.
# Após criar a VPS, conectar via SSH (substitua o IP)
ssh root@198.51.100.42
# Atualizar o sistema antes de qualquer instalação
apt update && apt upgrade -y
# Criar usuário não-root (boa prática mínima)
adduser deploy
usermod -aG sudo deploy
# Verificar recursos disponíveis
free -h # RAM
df -h # disco
nproc # vCPUs
✓ O que FAZER
- ✓Escolher provedor com snapshot/backup nativo (Hetzner, DO, Vultr).
- ✓Começar com Ubuntu LTS — 24.04 tem suporte até 2029.
- ✓Dimensionar com folga: 4 GB de RAM evita surpresas no primeiro mês.
- ✓Habilitar firewall do provedor (libere só 22, 80, 443).
✗ O que NÃO fazer
- ✗Usar shared hosting / cPanel — Docker não roda.
- ✗Escolher 1 GB de RAM "pra economizar" — Postgres + Node estouram.
- ✗Rodar tudo como
rootsem criar usuário deploy. - ✗Esquecer de fechar a porta 5432 (Postgres) no firewall público.
Conceitos-chave
Servidor virtual privado com root e IP dedicado.
Núcleo virtual mapeado a uma thread física.
Imagem do disco para restaurar em segundos.
Long Term Support — releases com 5+ anos de patches.
🐳 Docker e Docker Compose v2
O Postiz é distribuído como imagem Docker oficial. Você precisa do Docker Engine 24+ e do plugin Compose v2 (docker compose, sem hífen). Compose v1 está deprecado e falha em features novas como condition: service_healthy.
Não use o apt install docker.io dos repositórios padrão do Ubuntu — vem desatualizado e sem o plugin Compose. Instale pelo repositório oficial da Docker.
# Instalação oficial no Ubuntu 24.04
curl -fsSL https://get.docker.com | sh
# Adicionar usuário ao grupo docker (evita sudo)
sudo usermod -aG docker $USER
newgrp docker
# Verificar versão do engine
docker --version
# Docker version 27.3.1, build ce12230
# Verificar plugin Compose v2
docker compose version
# Docker Compose version v2.29.7
# Teste rápido (puxa imagem hello-world)
docker run --rm hello-world
💡 Dica prática
Se você vê docker-compose com hífen funcionando, é o legacy v1. Desinstale e use o plugin v2 — todo o Postiz e seus exemplos assumem docker compose (espaço).
Conceitos-chave
Daemon que executa containers no host.
Plugin nativo escrito em Go, integrado ao CLI.
Snapshot read-only com app + dependências.
Permite rodar containers sem sudo.
🌐 Domínio próprio e DNS
Você precisa de um domínio para: (1) gerar certificado HTTPS, (2) registrar callback OAuth nas redes sociais (Twitter/X, LinkedIn etc. não aceitam IP cru) e (3) ter URL estável que não muda quando você recriar a VPS.
Compre em qualquer registrar barato — Cloudflare Registrar (preço de custo, sem markup), Namecheap ou Registro.br (.com.br). Use um subdomínio dedicado tipo postiz.seudominio.com em vez do apex.
# No painel de DNS, criar registro A:
# Tipo: A
# Nome: postiz
# Valor: 198.51.100.42 (IP da sua VPS)
# TTL: 300 (5 min, facilita ajustes)
# Confirmar propagação (pode levar até 30 min)
dig +short postiz.seudominio.com
# 198.51.100.42
# Alternativa rápida
nslookup postiz.seudominio.com
# Testar conectividade reversa
curl -I http://postiz.seudominio.com
⚡ Dica prática
Se usa Cloudflare, comece com proxy desligado (nuvem cinza) até o Postiz estar respondendo no domínio. Proxy ativo (nuvem laranja) pode mascarar erros de configuração e atrapalha o desafio HTTP-01 do Let's Encrypt no Traefik.
Conceitos-chave
Mapeia nome → IPv4. Base de todo apontamento.
Tempo de cache no resolver — menor = mudanças rápidas.
Prefixo (postiz.) que isola por serviço.
Tempo até resolvers globais aprenderem o registro.
📧 E-mail transacional (Resend)
O Postiz envia e-mails de signup, reset de senha e notificações de falha de post. Sem provedor configurado, esses fluxos quebram silenciosamente. Resend é a escolha mais simples: 3 000 e-mails/mês grátis, API moderna, sem o pesadelo de configurar SMTP na mão.
Alternativas válidas: Postmark (excelente entregabilidade), Amazon SES (barato em volume) ou SMTP genérico. Em qualquer caso, você precisa verificar o domínio com SPF e DKIM, senão cai no spam.
# Passos no resend.com:
# 1. Criar conta (free tier, 3000 emails/mês)
# 2. Domains → Add Domain → seudominio.com
# 3. Copiar os 3 registros DNS que aparecem (SPF, DKIM, Return-Path)
# 4. Colar no seu provedor de DNS
# 5. Aguardar verificação automática (5-15 min)
# 6. API Keys → Create API Key → guardar como RESEND_API_KEY
# Testar a chave via curl
curl -X POST https://api.resend.com/emails \
-H "Authorization: Bearer re_seu_token_aqui" \
-H "Content-Type: application/json" \
-d '{
"from": "postiz@seudominio.com",
"to": "voce@gmail.com",
"subject": "Teste Resend",
"text": "Funcionou!"
}'
📨 Dica prática
Antes de migrar para produção, mande 2-3 e-mails de teste e cheque os cabeçalhos do destinatário: spf=pass, dkim=pass, dmarc=pass. Qualquer fail = e-mails indo para spam.
Conceitos-chave
E-mail acionado por evento (não marketing).
Autoriza IPs que podem enviar pelo seu domínio.
Assinatura criptográfica que prova autenticidade.
Token secreto para autenticar chamadas HTTP.
📦 Storage S3-compatible (R2 / MinIO)
O Postiz precisa guardar imagens e vídeos que você anexa aos posts. Salvar no disco da VPS funciona em dev, mas em produção você quer storage S3-compatible: sobrevive a reboots, cresce sem refazer partição e serve direto via CDN.
Duas opções pragmáticas: Cloudflare R2 (10 GB grátis, zero egress fee — o killer feature) ou MinIO self-hosted (roda no mesmo Docker Compose, dado fica em casa). AWS S3 funciona mas cobra egress, evita.
# Opção A: Cloudflare R2
# 1. dash.cloudflare.com → R2 → Create bucket → "postiz-uploads"
# 2. Manage R2 API Tokens → Create token → permission "Object Read & Write"
# 3. Anotar:
# - Account ID
# - Access Key ID
# - Secret Access Key
# - Endpoint: https://.r2.cloudflarestorage.com
# Opção B: MinIO self-hosted (adiciona ao docker-compose.yml depois)
docker run -d --name minio \
-p 9000:9000 -p 9001:9001 \
-e MINIO_ROOT_USER=admin \
-e MINIO_ROOT_PASSWORD=senha_forte_aqui \
-v minio-data:/data \
quay.io/minio/minio server /data --console-address ":9001"
# Testar credenciais com mc (MinIO Client)
mc alias set r2 https://acc.r2.cloudflarestorage.com ACCESS_KEY SECRET_KEY
mc ls r2/postiz-uploads
✓ Quando usar R2
- ✓Você quer simplicidade e free tier generoso.
- ✓Mídia é servida ao público (zero egress).
- ✓Não quer pensar em backup do storage.
- ✓Já usa Cloudflare para DNS/CDN.
✓ Quando usar MinIO
- ●Política interna exige dado on-premise.
- ●Volume alto (TB) onde free tier não cobre.
- ●Quer evitar dependência de cloud externa.
- ●Você está disposto a cuidar de backup do volume.
Conceitos-chave
API igual à AWS S3 — drivers reaproveitáveis.
Container lógico que agrupa objetos (arquivos).
Tráfego de saída — onde S3 cobra caro, R2 não.
URL base para chamadas API do storage.
💻 Conhecimento mínimo de terminal
Você não precisa ser sysadmin sênior, mas tem que sobreviver no SSH sem GUI. Editar arquivo de config, ler log, mover arquivo, reiniciar serviço — tudo via teclado. Se cada um desses comandos exige Google, o módulo 2.2 vai ser doloroso.
Use tmux (ou screen) para que sessões SSH sobrevivam a desconexão — fundamental quando o boot do Postiz leva 1-2 min e você fecha o laptop sem querer.
# Conexão SSH com chave (gere uma se não tiver: ssh-keygen -t ed25519)
ssh -i ~/.ssh/id_ed25519 deploy@postiz.seudominio.com
# Comandos de sobrevivência
ls -la # listar com permissões
cd ~/postiz # navegar
nano docker-compose.yml # editar (ou vim, se conhecer)
cat .env # ver conteúdo
grep -r "DATABASE" . # buscar
tail -f /var/log/syslog # log ao vivo
ps aux | grep postiz # processos
# tmux: sessão que sobrevive ao SSH cair
tmux new -s postiz # criar sessão chamada "postiz"
# Ctrl+B depois D → detach (sai sem fechar)
tmux attach -t postiz # reconectar
tmux ls # listar sessões
# Transferir arquivo do seu laptop para a VPS
scp ./backup.sql deploy@postiz.seudominio.com:~/postiz/
🔑 Dica prática
Configure SSH por chave pública e desabilite login por senha em /etc/ssh/sshd_config (PasswordAuthentication no). Bots escaneiam a porta 22 24/7 — sem senha como vetor, eles vão embora.
Conceitos-chave
Shell remoto criptografado — porta 22 padrão.
Par cripto — login sem senha, muito mais seguro.
Multiplexador de terminal — sessões persistentes.
Cópia de arquivos sobre SSH, com ou sem delta.
🎯 Resumo do Módulo
Próximo Módulo:
2.2 — Setup com Docker Compose: subir o Postiz do zero