Atualização Segura de Componentes Críticos da Infraestrutura¶
Manter sua infraestrutura de servidor doméstico atualizada é vital para a segurança (recebendo os últimos patches de vulnerabilidade) e para ter acesso a novas funcionalidades e correções de bugs. No entanto, atualizar componentes críticos como o sistema operacional do host Proxmox VE, o Docker Engine, ou os pilares da nossa rede como Traefik e Authelia, requer mais cautela do que simplesmente atualizar uma aplicação Docker comum. Falhas durante essas atualizações podem ter um impacto significativo em todos os seus serviços.
Este guia fornece estratégias, princípios e pontos de atenção para abordar a atualização desses componentes críticos de forma mais segura e controlada.
Princípios Gerais para Atualizações Críticas¶
Antes de iniciar qualquer atualização em um componente fundamental, siga estes princípios:
-
LEIA AS NOTAS DE RELEASE (Release Notes) e Documentação de Migração:
-
Este é o Passo MAIS IMPORTANTE!
Antes de atualizar qualquer software crítico (Proxmox VE, Docker, Traefik, Authelia, versões maiores de bancos de dados, etc.), SEMPRE procure e leia as notas de release oficiais para a nova versão para a qual você está atualizando. Preste atenção especial a:- "Breaking Changes" (Mudanças Quebradiças): Alterações que são incompatíveis com versões anteriores e que podem quebrar sua configuração existente ou exigir modificações manuais.
- Procedimentos de Upgrade Específicos: Alguns softwares podem ter um processo de atualização recomendado ou passos manuais que precisam ser executados antes, durante ou depois da atualização.
- Problemas Conhecidos (Known Issues): A comunidade ou os desenvolvedores podem ter identificado problemas com a nova versão que você deve estar ciente.
- Mudanças de Dependência: A nova versão pode requerer uma versão mais nova de outra dependência (e.g., uma nova versão do Docker pode requerer um kernel Linux mais recente, ou uma nova versão de um app pode requerer uma nova versão de um banco de dados).
- Caminhos de Migração: Para saltos de versão maiores, pode haver um caminho de migração recomendado (e.g., atualizar da v1 para v2, depois v2 para v3, em vez de pular direto da v1 para v3).
-
-
FAÇA BACKUP COMPLETO PRIMEIRO: Não se pode enfatizar o suficiente. Antes de tocar em qualquer componente crítico:
- Host Proxmox VE: Faça um backup completo da configuração do host Proxmox e, mais crucialmente, backups atualizados de TODAS as suas máquinas virtuais (VMs) usando o sistema de backup do Proxmox.
- Volumes Docker (Dados Persistentes): Para os datasets ZFS que contêm os volumes dos seus containers (e.g.,
data/docker-volumes,data/media), crie snapshots ZFS no host Proxmox antes de atualizar o Docker Engine, Traefik, Authelia, ou qualquer container que gerencie dados críticos. Veja o Guia de Snapshots ZFS. - Arquivos de Configuração Específicos: Faça uma cópia manual dos arquivos de configuração relevantes que podem ser afetados (e.g.,
traefik.yml,authelia/configuration.yml,prometheus.yml) antes de uma atualização que possa alterá-los ou introduzir um novo formato. (Seus arquivos Ansible já estão no Git, o que é um backup da definição da configuração).
-
ATUALIZE EM UM AMBIENTE DE TESTE (Se Possível):
- Para um homelab, ter um ambiente de teste idêntico pode ser inviável. No entanto, se você tiver recursos, considere:
- Clonar uma VM crítica (e.g.,
core-services-vm) no Proxmox para um ambiente de teste. - Restaurar backups recentes em uma VM de teste.
- Tentar a atualização primeiro neste ambiente de teste para identificar problemas potenciais.
- Clonar uma VM crítica (e.g.,
- Para um homelab, ter um ambiente de teste idêntico pode ser inviável. No entanto, se você tiver recursos, considere:
-
ATUALIZE UM COMPONENTE CRÍTICO POR VEZ:
- Evite atualizar múltiplos componentes críticos (e.g., Proxmox, Docker e Traefik) todos ao mesmo tempo. Se algo quebrar, será muito mais difícil identificar a causa raiz. Atualize um, teste exaustivamente, e só então passe para o próximo.
-
MONITORE CUIDADOSAMENTE DURANTE E APÓS A ATUALIZAÇÃO:
- Acompanhe de perto os logs do processo de atualização.
- Após a atualização, verifique os logs do serviço atualizado e teste sua funcionalidade minuciosamente.
- Verifique também os logs e a funcionalidade dos serviços que dependem do componente atualizado.
-
TENHA UM PLANO DE ROLLBACK (Reversão):
- Antes de começar, saiba como você reverteria para a versão anterior se a atualização falhar catastroficamente ou introduzir problemas inaceitáveis. O plano de rollback pode envolver:
- Restaurar a VM a partir de um backup do Proxmox.
- Reverter para um snapshot ZFS dos seus volumes de dados.
- Reinstalar a versão anterior do software (se os formatos de configuração e dados forem compatíveis com downgrade, o que nem sempre é o caso).
- Antes de começar, saiba como você reverteria para a versão anterior se a atualização falhar catastroficamente ou introduzir problemas inaceitáveis. O plano de rollback pode envolver:
Atualizando o Host Proxmox VE¶
Atualizar o Proxmox VE pode trazer novas features, melhorias de performance, correções de segurança e atualizações para o Debian base, KVM/QEMU e LXC.
- Fontes de Informação Primárias:
- Fórum Oficial do Proxmox VE (forum.proxmox.com).
- Wiki do Proxmox VE, especialmente a página de Roadmap e Notas de Release.
- Procedimento Geral:
- Leia as Notas de Release para a versão do Proxmox VE para a qual você está atualizando. Preste atenção especial a quaisquer mudanças no ZFS, QEMU, LXC, ou rede que possam impactar seu setup.
- Faça backup de TODAS as suas VMs e da configuração do host Proxmox.
- (Opcional) Se você tem um cluster, atualize um nó por vez, migrando VMs se possível. (Não aplicável ao nosso setup de nó único).
- No shell do host Proxmox, como
root:# Sincronize os índices dos pacotes com os repositórios apt update # Simule a atualização para ver o que será alterado (recomendado) apt dist-upgrade --simulate # ou apt full-upgrade --simulate # Realize a atualização completa do sistema # 'dist-upgrade' ou 'full-upgrade' são recomendados para Proxmox, pois lidam melhor # com dependências e remoção de pacotes obsoletos do que um simples 'apt upgrade'. apt dist-upgrade -y # OU # apt full-upgrade -y - Leia atentamente a saída do
apt dist-upgradedurante o processo. Ele pode informar sobre pacotes que serão removidos, mudanças de configuração importantes, ou solicitar confirmações. - Reboot do Host Proxmox: Se a atualização incluiu um novo kernel Linux, atualizações do PVE-kernel, QEMU, ou outras bibliotecas de sistema críticas, um reboot do host Proxmox será necessário para que as mudanças tenham efeito. O sistema geralmente informa se um reboot é recomendado.
- Verificações Pós-Atualização:
- Após o reboot, verifique se a interface web do Proxmox está acessível e funcionando.
- Confirme se todas as suas VMs iniciam corretamente.
- Verifique se os serviços do host (ZFS, NFS, rede) estão operacionais.
- Examine os logs do sistema (
journalctl -xe,dmesg) no host Proxmox por quaisquer novos erros ou avisos.
Atualizando o Docker Engine e Componentes (nas VMs)¶
Manter o Docker Engine, containerd, e docker-compose-plugin atualizados na core-services-vm (e na ai-desktop-vm se estiver usando Docker nela) é importante para segurança e novas features do Docker.
- Fonte de Informação: Notas de Release do Docker Engine, documentação do Docker.
- Procedimento (executado dentro da VM relevante, e.g.,
core-services-vm):- Leia as Notas de Release do Docker Engine para a versão para a qual você está atualizando. Preste atenção a quaisquer mudanças que possam afetar a compatibilidade com suas imagens Docker ou configurações do
docker-compose.yml. - Faça Backup dos Volumes Docker Críticos: Crie snapshots ZFS dos seus datasets de volumes (e.g.,
data/docker-volumes) no host Proxmox. - (Opcional, mas Mais Seguro) Pare todos os containers Docker em execução na VM:
Isso garante que os containers não estejam tentando usar o Docker Engine enquanto ele é atualizado, e previne problemas se a atualização exigir um reinício do daemon Docker que não seja totalmente transparente.
- Via Portainer: Vá em cada Stack e clique em "Stop".
- Via Linha de Comando (na VM):
- Atualize os Pacotes Docker usando
apt: O repositório Docker que configuramos com Ansible deve fornecer as versões mais recentes.O comandosudo apt update # Veja quais pacotes Docker seriam atualizados (opcional) # apt list --upgradable | grep -E 'docker-ce|containerd.io|docker-compose-plugin' # Atualize os pacotes Docker para a versão mais recente disponível no repositório sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginapt installcom os nomes dos pacotes (se já instalados) atuará como um comando de atualização para eles. - Reinicie o Serviço Docker (geralmente feito automaticamente pelo
apt, mas para garantir): - Verifique as Versões Instaladas:
- Reinicie seus Containers Docker:
- Via Portainer: Vá em cada Stack e clique em "Start".
- Via Linha de Comando (na VM):
- Verifique os Logs dos Containers: Após reiniciar os containers, verifique seus logs no Portainer para garantir que todos iniciaram corretamente e estão funcionando com a nova versão do Docker Engine.
- Leia as Notas de Release do Docker Engine para a versão para a qual você está atualizando. Preste atenção a quaisquer mudanças que possam afetar a compatibilidade com suas imagens Docker ou configurações do
Atualizando Traefik e Authelia (Containers Docker)¶
Traefik e Authelia são componentes críticos da nossa camada de rede e segurança. Eles rodam como containers Docker, então sua atualização envolve puxar uma nova tag de imagem e recriar os containers.
- Fonte de Informação:
- Procedimento Geral (para Traefik ou Authelia):
- Leia as Notas de Release com ATENÇÃO para a nova versão da imagem que você planeja usar. Procure por:
- Breaking changes na configuração estática (
traefik.ymlpara Traefik,configuration.ymlpara Authelia). - Mudanças na interpretação de labels Docker (para Traefik).
- Mudanças em middlewares ou provedores (para Traefik).
- Mudanças no schema do banco de dados (Authelia geralmente lida com migrações de schema automaticamente para seu DB PostgreSQL, mas é bom verificar).
- Breaking changes na configuração estática (
- Faça Backup:
- Arquivos de Configuração: Faça uma cópia dos seus arquivos de configuração atuais (e.g.,
traefik.yml,authelia/configuration.ymle o diretório de config dinâmica do Traefik) que estão nos volumes NFS. Seus templates Ansible.j2já estão no Git, mas o arquivo renderizado no volume é o que está em uso. - Dados Persistentes:
- Para Traefik: Faça backup do
acme.json(contém seus certificados SSL!). - Para Authelia: Faça um dump do banco de dados PostgreSQL do Authelia (ver estratégia de backup de DB).
- Para Traefik: Faça backup do
- Crie um snapshot ZFS do dataset
data/docker-volumesno host Proxmox.
- Arquivos de Configuração: Faça uma cópia dos seus arquivos de configuração atuais (e.g.,
- Adapte Suas Configurações (SE NECESSÁRIO):
- Se as notas de release indicarem breaking changes que afetam sua configuração, atualize seus templates Ansible (
.j2paratraefik.ymlouauthelia/configuration.yml) e/ou os arquivos de configuração dinâmica do Traefik, ou as labels Docker nosdocker-compose.ymlde outros serviços (se as mudanças do Traefik as afetarem). - Execute os playbooks Ansible relevantes para aplicar essas mudanças de configuração aos volumes NFS ANTES de atualizar a imagem do container.
- Se as notas de release indicarem breaking changes que afetam sua configuração, atualize seus templates Ansible (
- Atualize a Tag da Imagem Docker no
docker-compose.yml:- Edite o arquivo
docker-compose.ymlda stack relevante (core/docker-compose.ymlpara Traefik,authelia/docker-compose.ymlpara Authelia). - Altere a tag da imagem para a nova versão desejada (e.g., de
image: traefik:v2.10.5paraimage: traefik:v2.11.2).
- Edite o arquivo
- Atualize a Stack no Portainer:
- Vá para a stack relevante ("core" ou "authelia") no Portainer.
- Clique em "Editor".
- Cole o conteúdo do
docker-compose.ymlatualizado (com a nova tag da imagem). - Clique em "Update the stack". Certifique-se de que a opção "Re-pull image and redeploy" (ou similar) esteja marcada para que o Portainer puxe a nova versão da imagem.
- Monitore os Logs do Container Atualizado:
- Imediatamente após a atualização, verifique os logs do container Traefik ou Authelia no Portainer. Procure por erros de inicialização, problemas ao carregar a configuração, ou falhas de conexão com dependências (como o DB do Authelia).
- Teste Exaustivamente:
- Traefik: Verifique se todos os seus serviços roteados pelo Traefik ainda estão acessíveis, se o SSL está funcionando para todos eles, e se o dashboard do Traefik está operacional.
- Authelia: Tente logar em um serviço protegido por Authelia. Verifique se o 2FA funciona. Teste diferentes cenários de acesso definidos nas suas políticas.
- Leia as Notas de Release com ATENÇÃO para a nova versão da imagem que você planeja usar. Procure por:
Atualizando Aplicações Docker Individuais (e.g., Nextcloud, Plex, Sonarr)¶
Este processo é geralmente menos arriscado que os componentes de infraestrutura, mas ainda requer cuidado.
- Usando Watchtower (com
WATCHTOWER_LABEL_ENABLE=true):- Se você configurou o Watchtower para atualizar apenas containers com a label
com.centurylinklabs.watchtower.enable=true, ele cuidará de puxar as imagens mais recentes (respeitando a tag que você especificou nodocker-compose.yml- se você usoulatest, ele pegará alatest; se usouapp:v1.2, ele não atualizará paraapp:v1.3a menos quev1.2seja atualizada no registro). - Monitore os logs do Watchtower para ver o que foi atualizado.
- Se você configurou o Watchtower para atualizar apenas containers com a label
- Atualização Manual (Recomendado para Controle Fino ou Tags de Versão Específicas):
- Leia as Notas de Release da aplicação específica para a nova versão. Algumas aplicações (especialmente complexas como Nextcloud) podem ter passos de migração ou comandos
occque precisam ser executados após uma atualização. - Faça Backup dos Volumes de Dados da Aplicação: Crie um snapshot ZFS do subdiretório relevante em
data/docker-volumes(e.g.,data/docker-volumes/nextcloud). Se a aplicação usa um banco de dados dedicado (como o PostgreSQL para Nextcloud), faça um dump desse banco de dados. - Atualize a Tag da Imagem no
docker-compose.ymlda stack da aplicação. - Atualize a Stack no Portainer, marcando "Re-pull image and redeploy".
- Verifique os Logs do Container da aplicação para quaisquer erros de inicialização ou migração.
- Execute quaisquer Passos de Migração Pós-Atualização se especificado pela documentação da aplicação.
- Teste a Aplicação Exaustivamente.
- Leia as Notas de Release da aplicação específica para a nova versão. Algumas aplicações (especialmente complexas como Nextcloud) podem ter passos de migração ou comandos
Lembre-se, a regra de ouro é: Backup antes de qualquer mudança significativa, e leia a documentação! Uma abordagem cautelosa e metódica para atualizações manterá seu servidor doméstico rodando de forma suave e segura.