Pular para conteúdo

Uptime Kuma

O Uptime Kuma é a ferramenta de monitoramento da VPS. Ele verifica serviços, domínios e endpoints e registra disponibilidade, tempo de resposta e incidentes.

Nesta VPS, ele é uma ferramenta administrativa não essencial e pode permanecer desligado durante o quiet_mode.

Informações desta VPS

Item Valor
Stack /opt/stacks/infra/compose.yml
Serviço Compose uptime-kuma
Container infra-uptime-kuma-1
Imagem configurada louislam/uptime-kuma:latest
Versão registrada 1.23.17
Domínio https://status.cloud.hometecseg.com
Porta interna 3001
Rede Docker proxy
Volume infra_kuma-data
Diretório no container /app/data
Banco de dados SQLite
Versão do SQLite registrada 3.41.1
Operação contínua Não obrigatória

Modo econômico

O Uptime Kuma pode aparecer como parado porque é desligado propositalmente pelo script quiet_mode.sh. Isso não significa necessariamente falha.

Estado atual

Ver o estado do serviço

docker compose -f /opt/stacks/infra/compose.yml ps -a uptime-kuma

Ver somente containers em execução

docker ps --filter name=infra-uptime-kuma-1

Ver containers ativos ou parados

docker ps -a --filter name=infra-uptime-kuma-1

Ver o estado detalhado

docker inspect infra-uptime-kuma-1 \
  --format 'Status={{.State.Status}} ExitCode={{.State.ExitCode}} FinishedAt={{.State.FinishedAt}} OOMKilled={{.State.OOMKilled}}'

Ver o healthcheck

docker inspect infra-uptime-kuma-1 \
  --format '{{json .State.Health}}'

Iniciar e parar

Iniciar o Uptime Kuma

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

Caso o container não exista:

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

Parar o Uptime Kuma

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

Reiniciar o Uptime Kuma

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

Recriar o container

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

Confirmar o estado após iniciar

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

Acesso

Endereço:

https://status.cloud.hometecseg.com

Testar o domínio

curl -I https://status.cloud.hometecseg.com

Verificar o DNS

getent hosts status.cloud.hometecseg.com

Ver detalhes da conexão HTTPS

curl -v https://status.cloud.hometecseg.com

Serviço desligado

O domínio ficará indisponível enquanto o Uptime Kuma estiver parado pelo modo econômico.

Logs

Ver os últimos 100 registros

docker logs infra-uptime-kuma-1 --tail 100

Acompanhar os logs em tempo real

docker logs -f infra-uptime-kuma-1

Procurar erros

docker logs infra-uptime-kuma-1 2>&1 \
  | grep -Ei "error|fatal|panic|exception"

Procurar avisos

docker logs infra-uptime-kuma-1 2>&1 \
  | grep -Ei "warn|warning"

Ver informações de versão

docker logs infra-uptime-kuma-1 2>&1 \
  | grep -Ei "Version:|SQLite Version:|database version" \
  | tail -10

Versão

Ver a versão registrada nos logs

docker logs infra-uptime-kuma-1 2>&1 \
  | grep "Version:" \
  | tail -1

Mostrar somente o número da versão

docker logs infra-uptime-kuma-1 2>&1 \
  | grep "Version:" \
  | tail -1 \
  | sed -E 's/.*Version:[[:space:]]*//'

Ver a imagem configurada

grep -n "louislam/uptime-kuma" /opt/stacks/infra/compose.yml

Ver a imagem associada ao container

docker inspect infra-uptime-kuma-1 \
  --format '{{.Config.Image}}'

Ver o identificador da imagem utilizada

docker inspect infra-uptime-kuma-1 \
  --format '{{.Image}}'

Versões disponíveis

A instalação atual pertence à linha antiga:

1.23.17

A linha recomendada atualmente é a versão principal 2.

A imagem oficial recomendada é:

louislam/uptime-kuma:2

A atualização da versão 1 para a versão 2 é uma migração de versão principal e pode conter mudanças incompatíveis. Por isso, ela exige backup e leitura da documentação de migração antes da execução. :contentReference[oaicite:0]{index=0}

Migração principal

Não substitua simplesmente latest por 2 sem backup. A mudança da versão 1 para a 2 deve ser tratada como migração planejada, não como um alegre docker pull disparado no escuro.

Verificar atualização disponível

Baixar a imagem da linha 2

docker pull louislam/uptime-kuma:2

Esse comando baixa a imagem, mas não altera o container atual.

Ver o identificador da imagem baixada

docker image inspect louislam/uptime-kuma:2 \
  --format '{{.Id}}'

Ver o identificador da imagem usada pelo container

docker inspect infra-uptime-kuma-1 \
  --format '{{.Image}}'

Comparar automaticamente

CONTAINER_IMAGE="$(docker inspect infra-uptime-kuma-1 --format '{{.Image}}')" &&
NEW_IMAGE="$(docker image inspect louislam/uptime-kuma:2 --format '{{.Id}}')" &&
if [ "$CONTAINER_IMAGE" = "$NEW_IMAGE" ]; then
  echo "O container já utiliza a imagem baixada."
else
  echo "Existe uma imagem diferente da usada pelo container."
fi

Volume persistente

Ver as montagens

docker inspect infra-uptime-kuma-1 \
  --format '{{range .Mounts}}{{println .Type "|" .Name "|" .Source "|" .Destination}}{{end}}'

Inspecionar o volume

docker volume inspect infra_kuma-data

Ver o espaço utilizado

du -sh /var/lib/docker/volumes/infra_kuma-data/_data

Listar os arquivos persistentes

ls -lah /var/lib/docker/volumes/infra_kuma-data/_data

Localizar o banco SQLite

find /var/lib/docker/volumes/infra_kuma-data/_data \
  -maxdepth 2 \
  -type f \
  -name '*.db' \
  -ls

Não editar diretamente

Não altere manualmente o banco SQLite do Uptime Kuma enquanto o container estiver ativo. O caminho mais curto entre curiosidade e corrupção costuma ser um editor de texto aberto no arquivo errado.

Backup

Criar diretório de backup

mkdir -p /opt/backups/uptime-kuma

Parar o Uptime Kuma antes do backup

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

Criar backup compactado do volume

docker run --rm \
  -v infra_kuma-data:/source:ro \
  -v /opt/backups/uptime-kuma:/backup \
  alpine \
  tar -czf "/backup/uptime-kuma-data-$(date +%Y%m%d-%H%M%S).tar.gz" \
  -C /source .

Iniciar novamente

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

Listar os backups

ls -lh /opt/backups/uptime-kuma

Verificar o conteúdo do backup

tar -tzf /opt/backups/uptime-kuma/NOME_DO_BACKUP.tar.gz | head -50

Restauração

Operação destrutiva

A restauração substitui os dados existentes. Preserve um backup do estado atual antes de continuar.

Parar o serviço

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

Criar backup de segurança do estado atual

docker run --rm \
  -v infra_kuma-data:/source:ro \
  -v /opt/backups/uptime-kuma:/backup \
  alpine \
  tar -czf "/backup/uptime-kuma-before-restore-$(date +%Y%m%d-%H%M%S).tar.gz" \
  -C /source .

Limpar o volume atual

docker run --rm \
  -v infra_kuma-data:/data \
  alpine \
  sh -c 'rm -rf /data/* /data/.[!.]* /data/..?*'

Restaurar o backup

docker run --rm \
  -v infra_kuma-data:/data \
  -v /opt/backups/uptime-kuma:/backup:ro \
  alpine \
  tar -xzf /backup/NOME_DO_BACKUP.tar.gz \
  -C /data

Iniciar novamente

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

Verificar os logs

docker logs infra-uptime-kuma-1 --tail 100

Migração da versão 1 para a 2

O procedimento oficial para Docker utiliza a imagem:

louislam/uptime-kuma:2

e preserva o mesmo volume montado em /app/data. :contentReference[oaicite:1]{index=1}

Criar backup antes da migração

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

Criar backup do Compose

cp /opt/stacks/infra/compose.yml \
  /opt/backups/uptime-kuma/compose-pre-v2-$(date +%Y%m%d-%H%M%S).yml

Alterar a imagem no Compose

No arquivo:

/opt/stacks/infra/compose.yml

Substituir:

image: louislam/uptime-kuma:latest

por:

image: louislam/uptime-kuma:2

Validar o Compose

docker compose -f /opt/stacks/infra/compose.yml config

Baixar a nova imagem

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

Recriar somente o Uptime Kuma

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

Acompanhar a migração

docker logs -f infra-uptime-kuma-1

Verificar o estado

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

Confirmar a versão

docker logs infra-uptime-kuma-1 2>&1 \
  | grep "Version:" \
  | tail -1

Testar o domínio

curl -I https://status.cloud.hometecseg.com

Não interromper a migração

Durante a primeira inicialização, o Uptime Kuma pode atualizar o banco. Não encerre o container enquanto essa migração estiver ocorrendo.

Rollback da migração

Caso a versão 2 não funcione, o rollback deve restaurar:

  1. o Compose anterior;
  2. o backup do volume criado antes da migração.

Parar o serviço

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

Restaurar o Compose anterior

cp /opt/backups/uptime-kuma/NOME_DO_COMPOSE_ANTERIOR.yml \
  /opt/stacks/infra/compose.yml

Limpar e restaurar o volume

docker run --rm \
  -v infra_kuma-data:/data \
  alpine \
  sh -c 'rm -rf /data/* /data/.[!.]* /data/..?*'
docker run --rm \
  -v infra_kuma-data:/data \
  -v /opt/backups/uptime-kuma:/backup:ro \
  alpine \
  tar -xzf /backup/NOME_DO_BACKUP_V1.tar.gz \
  -C /data

Recriar a versão anterior

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

Atualização pelo script

Existe um script dedicado:

/usr/local/bin/update_kuma.sh

Ele será analisado e documentado posteriormente na página de scripts.

Visualizar o script

sed -n '1,260p' /usr/local/bin/update_kuma.sh

Verificar permissões

ls -l /usr/local/bin/update_kuma.sh

Não executar sem revisão

O script pode ter sido criado para a versão 1 e usar a tag latest. Ele precisa ser revisado antes da migração para a versão 2.

Healthcheck

O container possui o seguinte teste:

extra/healthcheck

Configuração registrada:

Item Valor
Intervalo 60 segundos
Timeout 30 segundos
Período inicial 180 segundos
Tentativas 5

Ver o healthcheck configurado

docker inspect infra-uptime-kuma-1 \
  --format '{{json .Config.Healthcheck}}'

Ver o resultado atual

docker inspect infra-uptime-kuma-1 \
  --format '{{json .State.Health}}'

Traefik

Ver as labels

docker inspect infra-uptime-kuma-1 \
  --format '{{json .Config.Labels}}'

Verificar a rede proxy

docker network inspect proxy

Confirmar as redes do container

docker inspect infra-uptime-kuma-1 \
  --format '{{json .NetworkSettings.Networks}}'

Ver logs do Traefik

docker logs reverse-proxy-traefik-1 --tail 100

Troubleshooting

Uptime Kuma aparece como parado

Verificar:

docker compose -f /opt/stacks/infra/compose.yml ps -a uptime-kuma

Se foi parado pelo modo econômico:

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

Caso o container não exista:

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

Código de saída 137

O código 137 normalmente significa que o processo recebeu SIGKILL.

Nesta VPS, isso pode ocorrer durante o desligamento planejado pelo quiet_mode. Ainda assim, confirme se houve falta de memória:

docker inspect infra-uptime-kuma-1 \
  --format 'ExitCode={{.State.ExitCode}} OOMKilled={{.State.OOMKilled}} Error={{printf "%q" .State.Error}}'

Verificar mensagens do kernel:

journalctl -k \
  | grep -Ei "out of memory|oom|killed process" \
  | tail -50

Serviço inicia como unhealthy

docker inspect infra-uptime-kuma-1 \
  --format '{{json .State.Health}}'
docker logs infra-uptime-kuma-1 --tail 200
docker compose -f /opt/stacks/infra/compose.yml ps uptime-kuma

Erro 404

docker inspect infra-uptime-kuma-1 \
  --format '{{json .Config.Labels}}'
getent hosts status.cloud.hometecseg.com
docker logs reverse-proxy-traefik-1 --tail 100

Erro 502 ou Gateway Timeout

docker compose -f /opt/stacks/infra/compose.yml ps uptime-kuma
docker network inspect proxy
docker logs infra-uptime-kuma-1 --tail 100
docker logs reverse-proxy-traefik-1 --tail 100

A porta interna esperada é:

3001

Banco SQLite bloqueado

Procurar:

docker logs infra-uptime-kuma-1 2>&1 \
  | grep -Ei "SQLITE_BUSY|database is locked"

Verificar uso de disco:

df -h

Verificar permissões:

ls -lah /var/lib/docker/volumes/infra_kuma-data/_data

Interface abre, mas não atualiza

O Uptime Kuma utiliza WebSocket. O proxy reverso precisa aceitar conexões persistentes e os cabeçalhos de upgrade. :contentReference[oaicite:2]{index=2}

Verificar:

docker logs infra-uptime-kuma-1 --tail 100
docker logs reverse-proxy-traefik-1 --tail 100
curl -I https://status.cloud.hometecseg.com

Boas práticas

  • Manter o Uptime Kuma desligado quando o monitoramento não for necessário.
  • Fazer backup antes da migração para a versão 2.
  • Usar uma tag de versão principal, como :2, em vez de latest.
  • Não remover o volume infra_kuma-data.
  • Não editar diretamente o banco SQLite.
  • Não publicar diretamente a porta 3001.
  • Verificar logs e healthcheck após atualizações.
  • Testar a restauração dos backups.
  • Revisar o script update_kuma.sh antes de utilizá-lo.