Pular para conteúdo

Scripts operacionais

Esta página documenta os scripts administrativos instalados em:

/usr/local/bin

Eles controlam ferramentas auxiliares e atualizam serviços Docker da VPS.

Inventário

Script Finalidade
quiet_mode.sh Desliga ferramentas administrativas não essenciais
tools_mode.sh Religa ferramentas administrativas
update_n8n.sh Atualiza somente o serviço n8n
update_portainer.sh Atualiza o Portainer
update_kuma.sh Atualiza o Uptime Kuma
update_dozzle.sh Atualiza o Dozzle
update_pgadmin.sh Atualiza o pgAdmin
update_traefik.sh Atualiza o Traefik principal
update_traefik_dashboard.sh Atualiza o container do dashboard do Traefik

Todos estão marcados como executáveis e pertencem ao usuário root.

Verificar os scripts

ls -lah /usr/local/bin/*mode*.sh /usr/local/bin/update_*.sh

Validar sintaxe

Essa validação não executa atualizações nem altera containers:

for script in \
  /usr/local/bin/quiet_mode.sh \
  /usr/local/bin/tools_mode.sh \
  /usr/local/bin/update_n8n.sh \
  /usr/local/bin/update_portainer.sh \
  /usr/local/bin/update_kuma.sh \
  /usr/local/bin/update_dozzle.sh \
  /usr/local/bin/update_pgadmin.sh \
  /usr/local/bin/update_traefik.sh \
  /usr/local/bin/update_traefik_dashboard.sh
do
  if bash -n "$script"; then
    echo "OK   $script"
  else
    echo "ERRO $script"
  fi
done

Resultado registrado:

Todos os scripts passaram na validação bash -n.

Modos operacionais

Modo silencioso

Script:

/usr/local/bin/quiet_mode.sh

Finalidade:

  • Reduzir consumo de CPU e memória.
  • Desligar interfaces administrativas.
  • Manter os serviços principais de automação funcionando.

Executar

/usr/local/bin/quiet_mode.sh

Serviços afetados

Serviço Ação
Portainer stop
Traefik Dashboard stop
Uptime Kuma stop
Dozzle stop
pgAdmin down

Serviços que continuam ativos

Normalmente permanecem ativos:

  • n8n
  • PostgreSQL
  • Redis
  • Traefik principal
  • MkDocs
  • Docker

Mensagem do script

A mensagem antiga dizia que apenas o n8n permaneceria ativo. Isso não era literalmente correto, pois banco, cache, proxy e documentação também continuam funcionando.

Comandos usados

docker compose -f /opt/stacks/infra/compose.yml stop portainer
docker compose -f /opt/stacks/reverse-proxy/compose.yml stop traefik-dashboard
docker compose -f /opt/stacks/infra/compose.yml stop uptime-kuma
docker compose -f /opt/stacks/infra/compose.yml stop dozzle
docker compose -f /opt/stacks/pgadmin/compose.yml down

Impacto do down no pgAdmin

O comando:

docker compose -f /opt/stacks/pgadmin/compose.yml down

remove o container e a rede criada pela stack, mas preserva o volume nomeado:

pgadmin_pgadmin-data

Ele não deve ser executado com -v, pois isso removeria o volume persistente.


Modo ferramentas

Script:

/usr/local/bin/tools_mode.sh

Finalidade:

  • Religar as interfaces administrativas.
  • Disponibilizar ferramentas de monitoramento e manutenção.

Executar

/usr/local/bin/tools_mode.sh

Serviços iniciados

Serviço Stack
Traefik Dashboard reverse-proxy
Portainer infra
Uptime Kuma infra
Dozzle infra
pgAdmin pgadmin

Correção realizada

O script usava anteriormente:

docker compose -f /opt/stacks/infra/compose.yml up -d kuma

O nome correto do serviço é:

uptime-kuma

O comando foi corrigido para:

docker compose -f /opt/stacks/infra/compose.yml up -d uptime-kuma

Confirmar os serviços

docker compose -f /opt/stacks/infra/compose.yml ps
docker compose -f /opt/stacks/reverse-proxy/compose.yml ps
docker compose -f /opt/stacks/pgadmin/compose.yml ps

Estado das versões

Verificação realizada em julho de 2026.

Serviço Instalada Versão estável consultada Tag no Compose
n8n 1.121.3 2.31.7 latest
Portainer CE 2.33.5 2.39.5 LTS latest
Uptime Kuma 1.23.17 2.3.2 latest
Dozzle 8.14.6 10.6.13 latest
pgAdmin 9.9 9.16 latest
Traefik principal 3.7.1 3.7.9 v3.7.1
Traefik Dashboard 3.7.1 3.7.9 v3.7.1

Fontes oficiais consultadas:

https://github.com/n8n-io/n8n/releases
https://docs.portainer.io/release-notes
https://github.com/louislam/uptime-kuma/releases
https://github.com/amir20/dozzle/releases
https://www.pgadmin.org/news/
https://github.com/traefik/traefik/releases

Informação temporal

Versões mais recentes mudam com frequência. Consulte as fontes oficiais novamente antes de atualizar.


Funcionamento comum dos atualizadores

Os scripts de atualização seguem aproximadamente este fluxo:

  1. Recebem uma tag opcional.
  2. Criam backup do arquivo compose.yml.
  3. Alteram a tag da imagem.
  4. Executam docker compose pull.
  5. Recriam somente o serviço selecionado.
  6. Testam uma URL pública.
  7. Restauram o Compose anterior se o teste falhar.

Exemplo:

/usr/local/bin/update_dozzle.sh v10.6.13

Sem argumento, a maioria usa:

latest

Latest

A tag latest pode atravessar versões principais e introduzir mudanças incompatíveis. Para produção, use uma versão explícita.


Backup criado pelos scripts

Os scripts copiam o Compose para arquivos no mesmo diretório da stack.

Formato:

compose.yml.bak.AAAAMMDD-HHMMSS

Exemplo:

/opt/stacks/infra/compose.yml.bak.20260728-143000

Localizar backups

find /opt/stacks \
  -type f \
  -name 'compose.yml.bak.*' \
  -printf '%TY-%Tm-%Td %TH:%TM %p\n' \
  | sort

Limitação

O backup automático inclui apenas o compose.yml.

Ele não inclui:

  • Bancos de dados
  • Volumes Docker
  • Arquivos .env
  • Credenciais
  • Configurações persistentes
  • Estado interno das aplicações

Rollback não é máquina do tempo

Restaurar a imagem anterior não desfaz migrações realizadas dentro de PostgreSQL, SQLite ou outros volumes persistentes.


Atualizador do n8n

Script:

/usr/local/bin/update_n8n.sh

Versão atual

1.121.3

Verificar

docker exec n8n-n8n-1 n8n --version

Executar com tag explícita

/usr/local/bin/update_n8n.sh 1.123.67

Executar com latest

/usr/local/bin/update_n8n.sh

Não usar latest neste momento

A versão instalada está na linha 1.x, enquanto latest atualmente aponta para a linha 2.x. Essa atualização contém mudanças incompatíveis e deve seguir o guia oficial de migração.

Fluxo do script

  • Backup de /opt/stacks/n8n/compose.yml
  • Alteração da imagem n8nio/n8n
  • Pull da imagem
  • Recriação apenas do serviço n8n
  • Teste em /rest/settings
  • Até 15 tentativas
  • Intervalo de 6 segundos
  • HTTP 200 considerado saudável
  • Restauração do Compose em caso de falha

Healthcheck externo

https://DOMINIO_DO_N8N/rest/settings

Riscos

  • O script não faz backup do PostgreSQL.
  • O script não faz backup dos dados persistentes do n8n.
  • Migrações de banco podem impedir downgrade.
  • A tag latest pode instalar uma versão principal diferente.
  • O rollback restaura o Compose, mas não o banco.

Procedimento mínimo antes de atualizar

docker exec n8n-postgres-1 \
  pg_dump -U n8n -d n8n -Fc \
  > "/opt/backups/n8n/n8n-pre-update-$(date +%Y%m%d-%H%M%S).dump"

Validar o arquivo:

ls -lh /opt/backups/n8n

Atualizador do Portainer

Script:

/usr/local/bin/update_portainer.sh

Versão atual

2.33.5

Healthcheck

https://portainer.cloud.hometecseg.com/api/status

Resposta esperada:

200

Executar com versão explícita

/usr/local/bin/update_portainer.sh 2.39.5

Fluxo

  • Backup do Compose da stack infra
  • Alteração de portainer/portainer-ce
  • Pull da imagem
  • Recriação apenas do Portainer
  • Até 20 tentativas
  • Intervalo de 5 segundos
  • Rollback do Compose em caso de falha

Backup adicional recomendado

O Portainer usa:

infra_portainer-data

Antes da atualização:

mkdir -p /opt/backups/portainer
docker compose -f /opt/stacks/infra/compose.yml stop portainer
docker run --rm \
  -v infra_portainer-data:/source:ro \
  -v /opt/backups/portainer:/backup \
  alpine \
  tar -czf "/backup/portainer-pre-update-$(date +%Y%m%d-%H%M%S).tar.gz" \
  -C /source .

Atualizador do Uptime Kuma

Script:

/usr/local/bin/update_kuma.sh

Versão atual

1.23.17

Versão estável consultada

2.3.2

Migração principal

A atualização da linha 1.x para 2.x contém mudanças importantes. Leia o guia oficial antes de executá-la.

Guia:

https://github.com/louislam/uptime-kuma/wiki/Migration-From-v1-To-v2

Healthcheck atual do script

https://status.cloud.hometecseg.com/

O script aceita somente:

302

Limitação do teste

Uma versão pode responder 200 na página inicial e estar saudável. Nesse caso, o script declararia falha indevidamente.

Uma condição mais tolerante seria:

if [[ "$code" =~ ^(2|3)[0-9][0-9]$ ]]; then
  OK=1
  break
fi

Melhoria ainda não aplicada

Essa alteração deve ser feita e validada separadamente.

Executar

/usr/local/bin/update_kuma.sh 2.3.2

Não executar antes de:

  • Criar backup do volume
  • Ler o guia de migração
  • Testar restauração
  • Confirmar compatibilidade dos monitores

Volume

infra_kuma-data

Atualizador do Dozzle

Script:

/usr/local/bin/update_dozzle.sh

Versão atual

8.14.6

Versão estável consultada

10.6.13

Executar

/usr/local/bin/update_dozzle.sh 10.6.13

Healthcheck

https://logs.cloud.hometecseg.com/

Resposta esperada:

200

Observação

O Dozzle não possui volume persistente na configuração atual.

O risco de perda de dados é menor, pois ele atua como visualizador de logs em tempo real. Mesmo assim, alterações entre versões principais podem modificar opções e comportamento.


Atualizador do pgAdmin

Script:

/usr/local/bin/update_pgadmin.sh

Versão atual

9.9

Versão estável consultada

9.16

Executar

/usr/local/bin/update_pgadmin.sh 9.16

Healthchecks

Primeira tentativa:

https://pgadmin.cloud.hometecseg.com/misc/ping

Alternativa:

https://pgadmin.cloud.hometecseg.com/

Resposta esperada:

200

Volume

pgadmin_pgadmin-data

Backup recomendado

mkdir -p /opt/backups/pgadmin
docker compose -f /opt/stacks/pgadmin/compose.yml stop pgadmin
docker run --rm \
  -v pgadmin_pgadmin-data:/source:ro \
  -v /opt/backups/pgadmin:/backup \
  alpine \
  tar -czf "/backup/pgadmin-pre-update-$(date +%Y%m%d-%H%M%S).tar.gz" \
  -C /source .

Atualizador do Traefik principal

Script:

/usr/local/bin/update_traefik.sh

Versão atual

3.7.1

Versão estável consultada

3.7.9

Tag padrão do script

v3.1

Tag padrão desatualizada

O script usa v3.1 quando nenhum argumento é informado. Isso poderia substituir a versão atual 3.7.1 por uma versão da linha 3.1.

Sempre informe a versão explicitamente:

/usr/local/bin/update_traefik.sh v3.7.9

Healthcheck

O script usa o domínio do n8n para confirmar que o roteamento continua funcionando.

Aceita:

HTTP 200 até 399

Impacto

A atualização do Traefik pode afetar simultaneamente:

  • n8n
  • MkDocs
  • Portainer
  • Uptime Kuma
  • Dozzle
  • pgAdmin
  • Dashboard do Traefik
  • Certificados TLS
  • Roteamento HTTPS

Serviço crítico

Uma falha no Traefik pode tornar todos os domínios externos inacessíveis, mesmo que os containers internos continuem funcionando.

Arquivos importantes

/opt/stacks/reverse-proxy/compose.yml
/opt/stacks/reverse-proxy/.env
/opt/stacks/reverse-proxy/letsencrypt/acme.json

Atualizador do Traefik Dashboard

Script:

/usr/local/bin/update_traefik_dashboard.sh

Versão atual

3.7.1

Executar

/usr/local/bin/update_traefik_dashboard.sh v3.7.9

Comportamento

  • Altera apenas o serviço traefik-dashboard
  • Aceita HTTP 200–399
  • Aceita HTTP 401 quando há autenticação
  • Encerra sem erro se o serviço não existir
  • Preserva o Traefik principal

Observação arquitetural

Existem dois containers Traefik:

reverse-proxy-traefik-1
reverse-proxy-traefik-dashboard-1

Eles usam atualmente a mesma versão:

3.7.1

Para evitar incompatibilidades, mantenha os dois na mesma versão.


Melhorias recomendadas

Instalar ShellCheck

O ShellCheck encontra problemas que o bash -n não detecta.

apt update
apt install -y shellcheck

Executar:

shellcheck /usr/local/bin/*.sh

Corrigir o healthcheck do Kuma

Aceitar qualquer resposta entre 200 e 399, em vez de apenas 302.

Alterar a tag padrão do Traefik

No update_traefik.sh:

TARGET_TAG="${1:-v3.7.9}"

Ou, mais seguro, exigir argumento:

: "${1:?Informe a versão, por exemplo: v3.7.9}"
TARGET_TAG="$1"

Exigir versão explícita

Para evitar atualizações acidentais para versões principais diferentes, os scripts podem rejeitar execução sem argumento.

Exemplo:

: "${1:?Informe uma tag explícita}"
TARGET_TAG="$1"

Criar backups de dados

Cada script deveria criar ou exigir backup do volume antes da atualização.

Validar o Compose antes do pull

Adicionar:

docker compose -f "$COMPOSE" config >/dev/null

Verificar versão após atualização

Cada script deveria imprimir:

  • versão anterior
  • versão solicitada
  • versão instalada
  • imagem usada
  • ID da imagem

Preservar modo silencioso

Um atualizador pode iniciar um serviço que estava parado intencionalmente.

O script ideal deve:

  1. Registrar se o serviço estava ativo.
  2. Atualizar.
  3. Retornar ao estado original.

Consultar conteúdo dos scripts

sed -n '1,260p' /usr/local/bin/quiet_mode.sh
sed -n '1,260p' /usr/local/bin/tools_mode.sh
sed -n '1,320p' /usr/local/bin/update_n8n.sh
sed -n '1,280p' /usr/local/bin/update_portainer.sh
sed -n '1,280p' /usr/local/bin/update_kuma.sh
sed -n '1,280p' /usr/local/bin/update_dozzle.sh
sed -n '1,320p' /usr/local/bin/update_pgadmin.sh
sed -n '1,340p' /usr/local/bin/update_traefik.sh
sed -n '1,360p' /usr/local/bin/update_traefik_dashboard.sh

Ordem segura de atualização

Uma ordem conservadora é:

  1. Criar backups.
  2. Validar os scripts.
  3. Atualizar ferramentas auxiliares.
  4. Testar cada domínio.
  5. Atualizar pgAdmin.
  6. Planejar migração do Kuma.
  7. Planejar migração do n8n.
  8. Atualizar Traefik por último.

Não atualize vários serviços simultaneamente. Quando tudo quebra junto, cada log aponta para outro log e nasce o polvo do caos.


Checklist antes de executar

[ ] Versão atual confirmada
[ ] Versão de destino confirmada
[ ] Release notes lidas
[ ] Mudanças incompatíveis verificadas
[ ] Compose validado
[ ] Backup do Compose criado
[ ] Backup do .env criado
[ ] Backup do volume criado
[ ] Espaço em disco verificado
[ ] Procedimento de rollback definido
[ ] Janela de manutenção disponível

Ver espaço em disco

df -h

Ver espaço usado pelo Docker

docker system df

Ver estado geral

docker ps -a

Validar todas as stacks

docker compose -f /opt/stacks/n8n/compose.yml config >/dev/null &&
docker compose -f /opt/stacks/infra/compose.yml config >/dev/null &&
docker compose -f /opt/stacks/pgadmin/compose.yml config >/dev/null &&
docker compose -f /opt/stacks/reverse-proxy/compose.yml config >/dev/null &&
echo "Todas as stacks: OK"