Dark n Black

Plano Operacional — Postiz + Easypanel | Atualizações e Manutenção

2026-10·Ativo·infraestruturapostizeasypaneldockergithubrenovateautomacaoseguranca
Progresso geral0 / 127 tarefas (0%)

PLANO OPERACIONAL — Postiz no Easypanel: instalação, versionamento e atualizações seguras

Formato: plano de execução com tarefas verificáveis, checklists, dependências, evidências e gates de aprovação.
Versão do documento: 1.0 · Revisado em: 11/10/2026
Projeto: dnb-postiz-infra · Stack: Postiz + PostgreSQL + Redis + Temporal + PostgreSQL Temporal + Elasticsearch
Ambiente: Easypanel com serviço Docker Compose conectado a um repositório privado no GitHub.
Estado inicial: todas as tarefas pendentes até serem executadas e verificadas no ambiente real.
Objetivo: implantar e manter o Postiz atualizado, com propostas de atualização automáticas, aprovação humana, credenciais fora do Git e restauração comprovadamente possível.


0. Decisões e regras obrigatórias

ItemDecisão
Fonte canônica da configuraçãoRepositório GitHub privado, independente, dnb-postiz-infra
ImplantaçãoEasypanel → Compose → origem Git
CredenciaisEasypanel → Environment → Create .env file; nunca no Git
Atualizações de imagensRenovate cria PRs; sem automerge
Atualizações de infraestruturaComparação manual com o Compose oficial do Postiz
Entrada em produçãoBackup validado → revisão → aprovação → deploy manual → smoke tests
Auto-deploy ao fazer mergeDesativado até existir homologação e rollback testado
Imagens de produçãoVersões explícitas, sem latest
TemporalManter sob revisão especial: o Compose de referência utiliza temporalio/auto-setup, marcado como descontinuado
Banco e volumesNunca remover com docker compose down -v; upgrades de versões principais exigem plano próprio

Importante: o Renovate acompanha versões de imagens referenciadas no Compose, mas não sincroniza automaticamente as mudanças estruturais do repositório oficial. E um PR aprovado no GitHub não equivale a um deploy: o Easypanel só muda os contêineres quando um deployment é disparado.

Escopo deste plano

Pré-requisito documental: este plano acompanha o guia anterior guia-postiz-easypanel.md e o pacote postiz-easypanel-kit.zip. Os comandos abaixo consideram o Compose daquele pacote, no qual a imagem Postiz originalmente usa ${POSTIZ_IMAGE_TAG}.


1. Roadmap e gates

FaseBloco de trabalhoPrioridadeDepende deGate para concluir
0Segurança e levantamentoP0—Riscos e estado atual documentados
1Preparar Git privadoP00Repo sem credenciais; Compose versionado
2Tornar tags detectáveisP01Imagem Postiz com tag literal no YAML
3Instalar/configurar RenovateP02Dashboard/PR do Renovate confirmados
4Acompanhar upstreamP11Processo de comparação manual operacional
5Integridade do EasypanelP01–3Stack saudável, domínio e testes passam
6Ciclo de atualizaçãoP0, recorrente3, 5Release aprovada e testada, sem perda de dados
7Backups e recuperaçãoP0, recorrente5Restauração testada e documentada
8Revisão mensalP1, recorrente3–7Pendências, riscos e versões revisados
9Aceite e documentaçãoP0Todas aplicáveisEvidências e runbook atualizados

Legenda: P0 = obrigatório para produção; P1 = importante para operação contínua.
Regra dos gates: não marcar uma fase como concluída por ter apenas criado arquivos; concluída significa executada e validada.


FASE 0 — Inventário, segurança e proteção do estado atual

Objetivo: identificar o que existe, evitar perda de contas/postagens e decidir com segurança se haverá migração ou instalação nova.

Tarefas

Comandos úteis na VPS:

uname -m
free -h
df -h
docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}'

Gate F0 — Pode avançar se:


FASE 1 — Repositório privado como fonte canônica

Objetivo: guardar configuração e histórico sem versionar credenciais.

Tarefas

Estrutura esperada:

dnb-postiz-infra/
├── docker-compose.yaml
├── dynamicconfig/
│   └── production-sql.yaml
├── .env.example
├── .gitignore
├── renovate.json            # criado na Fase 3
├── README.md
└── docs/
    └── PLANO-POSTIZ-EASYPANEL-ATUALIZACOES.md

.gitignore mínimo:

.env
.env.*
!.env.example
*.pem
*.key
*.dump
*.sql.gz
backups/

Auditoria rápida antes do push:

git status --short
git ls-files | grep -E '(^|/)(\.env$|.*\.pem$|.*\.key$|.*\.dump$)' || true

A auditoria por extensão não detecta segredos escritos diretamente em YAML/README. Revisar o diff e, idealmente, executar também um scanner de secrets antes do push. Não cole outputs completos de docker compose config em issues ou chats, pois podem conter senhas expandidas.

Gate F1 — Pode avançar se:


FASE 2 — Corrigir a origem da versão do Postiz para o Renovate

Objetivo: permitir que o Renovate detecte a versão da imagem, sem tocar nas secrets.

O pacote inicial possui:

services:
  postiz:
    image: ghcr.io/gitroomhq/postiz-app:${POSTIZ_IMAGE_TAG:?Defina_POSTIZ_IMAGE_TAG}

Alterar para uma tag explícita já validada e instalada (o valor abaixo é a tag de referência do kit, não uma afirmação de que seja a versão mais recente):

services:
  postiz:
    image: ghcr.io/gitroomhq/postiz-app:v2.25.0

A configuração ${POSTIZ_IMAGE_TAG} depende do ambiente para determinar a versão. O gerenciador Docker Compose do Renovate identifica imagens com tags no YAML, mas não deve ser usado como se atualizasse automaticamente a versão que está somente no .env do Easypanel.

Tarefas

Comandos (na cópia local do repositório):

git checkout -b chore/renovate-versionamento
git diff -- docker-compose.yaml .env.example
# Depois de editar e revisar:
git add docker-compose.yaml .env.example
git commit -m "chore: fixa imagem do Postiz no compose para Renovate"
git push -u origin chore/renovate-versionamento

Abra um PR, revise e faça merge. Se a stack já está em produção, trate qualquer deploy subsequente com a mesma cautela da Fase 6, ainda que a imagem de fato não tenha mudado.

Gate F2 — Pode avançar se:


FASE 3 — Renovate: PRs automáticos, deploy manual

Objetivo: receber sugestões de upgrade sem aplicar mudanças diretamente em produção.

3.1 Criar configuração

Na raiz do repositório, criar renovate.json:

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": ["config:recommended"],
  "enabledManagers": ["docker-compose"],
  "dependencyDashboard": true,
  "automerge": false,
  "prConcurrentLimit": 5,
  "labels": ["dependencies", "review-required"]
}

Esse arquivo instrui o Renovate a procurar tags de imagens Docker em arquivos Compose, abrir PRs e não mesclar automaticamente. PR criado não é garantia de compatibilidade, principalmente em atualizações de banco e Temporal.

3.2 Instalar o GitHub App

Abrir: https://github.com/apps/renovate

Tarefas

Gate F3 — Pode avançar se:


FASE 4 — Revisão do upstream oficial (sem merge cego)

Objetivo: acompanhar mudanças estruturais que o Renovate não cobre, como novas variáveis, serviços e migrações.

Fonte: https://github.com/gitroomhq/postiz-docker-compose

Como o repositório dnb-postiz-infra nasceu independente do oficial, os históricos são diferentes. Não faça git merge upstream/main automaticamente: isso pode reintroduzir portas públicas, senhas de exemplo, container_name e configurações incompatíveis com Easypanel.

Preparação (uma vez, na cópia local):

git clone git@github.com:SEU_USUARIO/dnb-postiz-infra.git
cd dnb-postiz-infra
git remote add upstream https://github.com/gitroomhq/postiz-docker-compose.git
git fetch upstream

Se upstream já existir, não execute remote add novamente; use apenas git fetch upstream.

Comparação na revisão mensal:

git fetch upstream
git log --oneline -n 12 upstream/main
git show upstream/main:docker-compose.yaml > /tmp/postiz-upstream-compose.yaml
git diff --no-index -- docker-compose.yaml /tmp/postiz-upstream-compose.yaml || true

A comparação mostra várias diferenças intencionais do seu Compose. O objetivo é identificar novos requisitos, não deixar os arquivos idênticos. git diff --no-index retorna status 1 quando encontra diferenças; isso é esperado.

Tarefas

Gate F4 — Pode avançar se:


FASE 5 — Validar a instalação no Easypanel

Objetivo: garantir que a base está saudável antes de aceitar PRs de atualização.

Tarefas

Verificação resumida na VPS:

docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}'

Gate F5 — Base pronta se:


FASE 6 — Procedimento padrão para CADA atualização

Não basta clicar em Merge. Cada versão pode modificar banco, workflows e integrações.

Passo A — Triagem do Pull Request

Passo B — Proteção antes do deploy

Passo C — Aprovação e implantação

Passo D — Smoke tests e encerramento

Gate F6 — Atualização aprovada

Se o deploy falhar

  1. Não apague volumes, não rode docker compose down -v e não recrie bancos às cegas.
  2. Preserve logs (sem secrets) e identifique o componente afetado.
  3. Se foi apenas mudança de imagem sem migração de dados, avaliar retorno ao commit/tag anterior.
  4. Se houve migração de schema incompatível com a versão anterior, não confiar em downgrade da tag. Recuperar a partir de backups consistentes, com procedimento planejado.
  5. Validar novamente login, agendamentos e serviços Temporal após a recuperação.

FASE 7 — Backups e teste real de recuperação

Objetivo: não depender de rollback de imagem quando banco/workflows são alterados.

Tarefas

Atenção: volume persistente não é backup. Snapshot de contêiner não substitui dump/backup consistente de banco. Backup apenas do PostgreSQL do Postiz não recupera necessariamente Temporal, mídia e tarefas.

Gate F7 — Backup aceito:


FASE 8 — Rotina recorrente de manutenção

Semanal — revisão curta (preferencialmente em janela fixa)

Mensal — revisão estrutural

Trimestral — riscos de infraestrutura


FASE 9 — Aceite de produção e registro final

Checklist de liberação

Registro de execução (preencher a cada mudança)

CampoValor a registrar
Data/hora da manutençãoAAAA-MM-DD HH:MM (America/Sao_Paulo)
Executor...
Pull RequestURL do PR
Commit aprovadoSHA
Imagem / versão anterior...
Imagem / nova versão...
Backupslocal/destino externo + evidência de integridade
Migração de banconão / sim: detalhes
Testes pós-deploylogin, API, uploads, agenda, publicação, logs
ResultadoSUCESSO / ROLLBACK / PENDENTE
Bloqueios/riscos...
Próxima ação...

Definição de pronto (DoD)

O processo está pronto quando o GitHub detecta propostas de atualização, nenhuma atualização entra automaticamente em produção, o Easypanel executa somente versões aprovadas, os serviços passam nos testes funcionais, os dados são preservados e existe um caminho testado para recuperá-los.


Fluxo operacional resumido

Postiz / dependência publica nova imagem
              ↓
Renovate identifica nova versão
              ↓
PR criado no GitHub privado
              ↓
Revisão de release notes, compatibilidade, migrações e segurança
              ↓
Backup off-server + validação de recuperação
              ↓
Aprovação humana + merge do PR
              ↓
Deploy MANUAL no Easypanel
              ↓
Healthchecks + login + uploads + teste real de agendamento
              ↓
Registrar evidências e encerrar

Referências verificadas em 11/10/2026

Observação de escopo: este plano é um procedimento documentado; não há confirmação de que o GitHub, o Renovate ou o Easypanel do usuário tenham sido configurados, nem de que o deploy e os backups tenham sido executados. Cada checkbox deve ser marcado com base em evidência real.