Reconstruindo a Infraestrutura Após uma Falha Grave¶
Apesar de todos os nossos esforços de manutenção preventiva e redundância (como o pool ZFS /data em RAID 1), falhas de hardware catastróficas podem ocorrer. O cenário mais impactante seria a falha do seu SSD NVMe principal, que hospeda o sistema operacional Proxmox VE e os discos virtuais das suas máquinas virtuais. Outros cenários podem incluir corrupção irreparável do sistema operacional do host Proxmox ou um desastre físico que afete o servidor.
Este guia descreve os passos gerais para reconstruir sua infraestrutura base do zero, assumindo que você implementou e manteve a Estratégia de Backup e Restauração e, portanto, possui:
- Backups recentes e testados das suas Máquinas Virtuais Proxmox (e.g., arquivos
.vma.zstdo sistema de backup integrado do Proxmox, armazenados no seu dataset ZFS/data/backups/vmsou em um backup off-site). - Backups dos seus dados persistentes de containers Docker:
- Idealmente, um backup completo dos seus datasets ZFS
/data/docker-volumes,/data/media, etc., feito com uma ferramenta como BorgBackup para um destino externo. - No mínimo, dumps recentes dos seus bancos de dados importantes (Authelia, Nextcloud, Grafana) salvos no dataset
/data/backups/db_dumps(ou em um backup off-site).
- Idealmente, um backup completo dos seus datasets ZFS
- Seu repositório Ansible
home-server/completo e atualizado, com todas as configurações da sua infraestrutura, seguramente armazenado em um serviço Git remoto (e.g., GitHub, GitLab). - Acesso seguro à sua senha do Ansible Vault.
A Importância dos Backups Off-Site
Se a falha grave afetar todos os discos do seu servidor Proxmox (incluindo os HDDs do pool /data), ter backups off-site (na nuvem, em um HD externo guardado em outro local) será sua única forma de recuperação completa. Este guia assume que você tem acesso a alguma forma de backup dos dados do pool /data se ele também for perdido.
Cenário de Exemplo Considerado¶
Vamos focar no cenário onde o SSD NVMe principal do seu servidor Proxmox falhou completamente, mas seus HDDs do pool ZFS /data (que contêm os backups das VMs e, idealmente, os dados dos containers ou backups deles) estão intactos e podem ser reutilizados. Se os HDDs do pool /data também falharem, o processo será similar, mas a etapa de restauração dos dados dos datasets ZFS dependerá inteiramente dos seus backups off-site.
Passos Detalhados para Reconstrução da Infraestrutura¶
Siga estes passos metodicamente:
-
Preparar Novo Hardware ou Substituir Componente Defeituoso:
- Se o SSD NVMe falhou, substitua-o por um novo SSD NVMe de capacidade igual ou superior.
- Verifique todas as conexões de hardware (cabos SATA para os HDDs do pool ZFS, RAM, CPU, etc.) para garantir que estão firmes.
-
Instalar o Proxmox VE Base no Novo SSD:
- Siga rigorosamente os passos da Seção 2.1: Instalação do Proxmox VE no Servidor Físico para instalar uma cópia limpa do Proxmox VE no novo SSD NVMe.
- Configuração de Rede do Host: Durante a instalação, configure a rede do novo host Proxmox com o mesmo endereço IP estático que o servidor Proxmox antigo usava (e.g.,
192.168.15.10). Isso simplificará enormemente a restauração das configurações Ansible e a conectividade. - Senha Root: Você pode usar a mesma senha
rootque usava antes (se lembrar e estiver no seu Ansible Vault) ou definir uma nova. Se definir uma nova, lembre-se de atualizar a variávelproxmox_api_passwordno seu Ansible Vault posteriormente.
-
Importar o Pool ZFS
/dataExistente (se os HDDs sobreviveram): Se os HDDs que compunham seu pool/dataestão intactos e foram reconectados ao novo sistema:- No shell do novo host Proxmox (como
root), tente listar pools ZFS que podem ser importados: Se o seu pooldataaparecer na lista, ele está pronto para ser importado. - Importe o pool
data: - Verifique o status do pool importado:
O estado deve ser
ONLINE, e seus datasets (docker-volumes,media,backups, etc.) devem agora estar acessíveis nos seus pontos de montagem usuais (e.g.,/data/docker-volumes). - Se os HDDs do pool
/dataforam perdidos e você precisa restaurar de um backup off-site:- Crie um novo pool ZFS
datacom os novos HDDs (ou os antigos formatados) seguindo a Seção 2.2. - Crie novamente os datasets ZFS principais (
data/docker-volumes,data/media,data/backups, etc.). - Restaure o conteúdo de cada dataset a partir do seu backup off-site (Borg, rsync, etc.) para os respectivos pontos de montagem no novo pool (e.g., restaure o conteúdo de
docker-volumespara/data/docker-volumes). Este será o passo mais demorado.
- Crie um novo pool ZFS
- No shell do novo host Proxmox (como
-
Configurar o Storage de Backup de VMs no Novo Proxmox:
- Na interface web do novo Proxmox VE, vá para Datacenter -> Storage.
- Se o storage que aponta para o diretório onde seus backups de VMs estão (e.g.,
/data/backups/vms) não existir ou estiver com a configuração incorreta, você precisará Adicionar ou Editar um storage do tipo "Directory".- ID: Dê um nome (e.g.,
local_zfs_vmbackups). - Directory: Especifique o caminho absoluto no host Proxmox (e.g.,
/data/backups/vms). - Content: Selecione APENAS "VZDump backup file".
- Clique em "Add" ou "OK".
- ID: Dê um nome (e.g.,
-
Restaurar Suas Máquinas Virtuais (VMs) a partir dos Backups:
- Com o storage de backup configurado e os arquivos de backup das suas VMs (e.g.,
.vma.zst) presentes nele:- Na UI do Proxmox, selecione o storage de backup na árvore à esquerda.
- A aba "Backups" listará os arquivos de backup de VM disponíveis.
- Para cada VM que você precisa restaurar (
core-services-vm,ai-desktop-vm):- Selecione o arquivo de backup mais recente e apropriado.
- Clique no botão "Restore".
- No diálogo "Restore":
-
VM ID
É extremamente importante que você restaure as VMs com os mesmos VM IDs que elas tinham originalmente (e.g.,100paracore-services-vm,101paraai-desktop-vm). Seu inventário Ansible (hosts.ini) e potencialmente outras configurações (como as regras de firewall PVE nosetup-proxmox-host.yml) dependem desses IDs. Se você não puder usar o mesmo ID por algum motivo, precisará atualizar cuidadosamente todas as referências a esse ID no seu código Ansible. - Storage: Escolha o storage de destino para o disco da VM restaurada (e.g.,
local-lvmno seu novo SSD NVMe). - Configure outras opções de restauração conforme necessário (e.g.,
MAC address- geralmente "generate new" é seguro, a menos que você tenha reservas DHCP baseadas no MAC antigo;Start after restore- pode deixar desmarcado por enquanto).
-
- Clique em "Restore". Monitore a tarefa na parte inferior da UI do Proxmox.
- Após a restauração, não inicie as VMs ainda. O Ansible fará a configuração final.
- Com o storage de backup configurado e os arquivos de backup das suas VMs (e.g.,
-
Preparar sua Máquina de Controle Ansible e o Repositório:
- Se sua máquina de controle Ansible original foi perdida ou não está configurada, prepare uma nova seguindo a Seção 1.1: Instalação do Ambiente de Controle (
scripts/bootstrap.sh). - Clone seu repositório
home-serverdo seu serviço Git remoto (GitHub, GitLab, etc.) para sua máquina de controle. - Certifique-se de que você tem acesso à sua senha do Ansible Vault.
- Se sua máquina de controle Ansible original foi perdida ou não está configurada, prepare uma nova seguindo a Seção 1.1: Instalação do Ambiente de Controle (
-
Executar os Playbooks Ansible para Reconfigurar a Infraestrutura: Este é o passo onde a mágica da Infraestrutura como Código acontece!
- Preparar o Novo Host Proxmox para ser Gerenciado pelo Ansible:
- No shell do novo host Proxmox (como
root), crie o usuário Ansible dedicado ({{ proxmox_ansible_user_on_host }}e.g.,proxmox_ansible_user). - Adicione-o ao grupo
sudoe configureNOPASSWDparasudo(conforme detalhado na Seção 2.3: Ações Manuais Prévias). - Na sua máquina de controle Ansible, copie sua chave SSH pública (
~/.ssh/id_ed25519_homelab.pub) para este novo usuário no host Proxmox usandossh-copy-id. - Teste a conexão SSH e a capacidade de
sudosem senha.
- No shell do novo host Proxmox (como
- Executar o Playbook
full-deploy.yml(ou o scriptrestore.sh): Na raiz do seu projetohome-server/na máquina de controle Ansible:O playbookbash scripts/restore.sh # Este script executa o full-deploy.yml e lida com a senha do vault # OU, se preferir executar diretamente: # ansible-playbook ansible/playbooks/full-deploy.yml --ask-vault-passfull-deploy.ymlirá:- Executar
setup-proxmox-host.yml: Reconfigurar o host Proxmox (NFS server, firewall, pacotes, Node Exporter, etc.) para o estado definido. - Executar
vm-deploy.yml: Verificar e aplicar as configurações definidas para as VMs restauradas (CPU, RAM, disco - que já devem estar corretos da restauração -, e crucialmente, re-aplicar configurações de passthrough PCI com os novos IDs se você atualizou o playbook). - Executar
setup-base-ubuntu.yml: Reconfigurar a base das VMs (NFS client, UFW, Node Exporter VM, Docker, Portainer nacore-services-vm). - Executar
setup-core-networking.yml: Re-deployar as configurações e containers para Traefik, Cloudflared e Authelia. - Executar os playbooks
setup-<stack>-volumes.yml: Garantir que os diretórios NFS para as stacks Docker estejam com as permissões corretas e que os arquivos.envsejam recriados nas VMs.
- Executar
- Preparar o Novo Host Proxmox para ser Gerenciado pelo Ansible:
-
Implantar (ou Verificar) as Stacks Docker via Portainer:
- Acesse sua instância Portainer (em
https://portainer.{{ base_domain }}). - Se os dados do volume
docker-volumes/portainer/dataforam restaurados com o pool ZFS, suas configurações de stacks, endpoints e usuários do Portainer podem já estar lá.- Navegue para "Stacks". Se suas stacks estiverem listadas, você pode precisar "Update the stack" para algumas delas (sem mudar o compose, apenas para forçar o Portainer a reconciliar com o estado atual do Docker e carregar os
.envrecriados).
- Navegue para "Stacks". Se suas stacks estiverem listadas, você pode precisar "Update the stack" para algumas delas (sem mudar o compose, apenas para forçar o Portainer a reconciliar com o estado atual do Docker e carregar os
- Se você está recriando as stacks do zero no Portainer (ou se a config do Portainer foi perdida):
Para cada stack de aplicação (mídia, produtividade, monitoramento, RAG):
- Vá para "Stacks" -> "+ Add stack".
- Cole o conteúdo do arquivo
docker-compose.ymlda respectiva stack. - Em "Environment variables" (Advanced mode), use "Load variables from .env file" para carregar o arquivo
.envcorrespondente que o Ansible recriou na VM (e.g.,/opt/portainer_stack_envs/media.env). - Adicione manualmente quaisquer SECRETS (senhas de DB, API keys específicas da aplicação) como variáveis de ambiente na UI do Portainer.
- Clique em "Deploy the stack".
- Dados das Aplicações: Como o conteúdo do dataset
/data/docker-volumes(e outros como/data/media) foi restaurado (seja pela importação do pool ZFS original ou de um backup off-site), suas aplicações Docker, ao serem reiniciadas com seus volumes corretamente mapeados, devem encontrar seus dados e configurações anteriores.- Restauração de Dumps de DB: Se você tem dumps de banco de dados mais recentes do que o estado dos volumes ZFS restaurados, ou se a restauração do volume do DB não foi perfeita, você pode precisar restaurar os dumps de banco de dados manualmente (conforme descrito na Estratégia de Backup).
- Acesse sua instância Portainer (em
-
Testar Tudo Exaustivamente:
- Verifique o acesso a cada serviço web via seu subdomínio Cloudflare.
- Teste a autenticação com Authelia.
- Verifique a funcionalidade de cada aplicação (Nextcloud, Plex/Jellyfin, Home Assistant, Grafana, etc.).
- Confirme que os dados estão presentes e corretos.
- Verifique os logs de todos os componentes (Proxmox, VMs, containers) por quaisquer novos erros.
Este processo de reconstrução, embora possa parecer complexo, é significativamente mais gerenciável e menos propenso a erros do que uma reconstrução totalmente manual, graças à sua Infraestrutura como Código com Ansible e a uma estratégia de backup bem definida. A chave é ter backups confiáveis e um repositório Ansible atualizado.