Adaptando a Infraestrutura para Novo Hardware ou Mudanças de Rede¶
Com o tempo, você pode se deparar com a necessidade de migrar seu servidor doméstico para um novo hardware físico ou de adaptar sua configuração existente a mudanças significativas na sua rede local, como um novo roteador que impõe um esquema de endereçamento IP diferente.
Este guia aborda as principais considerações e os passos envolvidos nesses dois cenários, sempre com o objetivo de minimizar o downtime e manter a consistência da sua Infraestrutura como Código (IaC) gerenciada pelo Ansible.
A. Migração para Novo Servidor Físico (Novo Host Proxmox)¶
Mover toda a sua configuração Proxmox VE, juntamente com suas máquinas virtuais (VMs) e dados, para uma nova máquina física é uma tarefa complexa, mas totalmente viável com planejamento cuidadoso e o poder da sua configuração Ansible.
Considerações Prévias Essenciais Antes da Migração:
- Compatibilidade de Hardware do Novo Servidor:
- CPU: Deve suportar virtualização (AMD-V para processadores AMD, Intel VT-x para Intel) e, crucialmente, IOMMU (AMD-Vi ou Intel VT-d) se você utiliza ou planeja utilizar passthrough de dispositivos PCI (como a sua GPU RX 5600XT).
- RAM: Idealmente, o novo servidor deve ter uma quantidade de RAM igual ou superior à do servidor antigo. Se for menor, você precisará reavaliar e possivelmente reduzir a alocação de RAM para suas VMs.
- Armazenamento:
- Um SSD (preferencialmente NVMe) com capacidade suficiente para o sistema operacional Proxmox VE e os discos virtuais das suas VMs.
- Conectores SATA/SAS e espaço físico para os HDDs do seu pool ZFS
/data(se você planeja movê-los fisicamente) ou para novos HDDs se for recriar o pool e restaurar os dados a partir de um backup.
- Rede: Pelo menos uma porta Ethernet Gigabit. Se você usa VLANs ou bonding no Proxmox, garanta que o novo hardware de rede suporte isso.
- IDs de Dispositivos PCI (para Passthrough):
Se você usa passthrough de GPU (para a
ai-desktop-vm) ou quaisquer outros dispositivos PCI (placas de rede dedicadas, controladoras HBA), os IDs PCI desses dispositivos no novo hardware serão diferentes. Você precisará:- Identificar os novos IDs PCI no novo host Proxmox usando o comando
lspci -nnapós a instalação básica do Proxmox. - Atualizar as configurações de passthrough nas definições das suas VMs. Isso é feito no seu playbook Ansible
vm-deploy.yml(na variávelvm_host_pci_devices).
- Identificar os novos IDs PCI no novo host Proxmox usando o comando
- Nomes de Interfaces de Rede Físicas:
O nome da interface de rede principal no novo host Proxmox pode ser diferente do antigo (e.g.,
enp3s0em vez deeno1). Isso afetará a configuração da bridgevmbr0no arquivo/etc/network/interfacesdo novo host Proxmox. Esteja preparado para ajustar isso durante a instalação do Proxmox ou via Ansible.
Processo de Migração Sugerido para Novo Hardware:
-
BACKUP COMPLETO E VERIFICADO DO SERVIDOR ANTIGO:
-
Este é o Passo Mais Importante e Não Pode Ser Ignorado!
Antes de iniciar qualquer migração:- Garanta que você tem backups completos e recentes de todas as suas VMs Proxmox, salvos em um local acessível (idealmente no seu pool
/data/backups/vmse também uma cópia off-site). Verifique se os backups foram concluídos com sucesso. - Faça um backup completo dos seus dados do pool ZFS
/data(que contémdocker-volumes,media,downloads, etc.). A melhor forma é usar BorgBackup para um destino externo. Se não usa Borg, pelo menosrsyncpara um HD externo. Dumps de banco de dados também devem estar incluídos ou feitos separadamente. - Faça um backup da configuração do seu host Proxmox antigo (arquivos de
/etc/). - Certifique-se de que seu repositório Ansible
home-server/está totalmente atualizado e enviado (pushed) para seu Git remote (GitHub, GitLab, etc.). - Tenha sua senha do Ansible Vault em local seguro.
- Teste a restauração de uma VM e de alguns dados importantes de seus backups em um ambiente de teste, se possível, ANTES da migração.
- Garanta que você tem backups completos e recentes de todas as suas VMs Proxmox, salvos em um local acessível (idealmente no seu pool
-
-
Setup Inicial do Novo Servidor Físico com Proxmox VE:
- No novo hardware, instale o Proxmox VE no SSD NVMe, seguindo os passos da Seção 2.1 do Manual de Implementação.
- Configuração de Rede do Novo Host Proxmox:
- Durante a instalação, configure a rede do novo host Proxmox. Idealmente, e para simplificar MUITO a migração, tente usar o mesmo endereço IP estático, hostname e configurações de gateway/DNS que o servidor Proxmox antigo usava.
- Se não for possível usar o mesmo IP, anote cuidadosamente o novo IP estático. Você precisará atualizar o inventário Ansible (
ansible_hostparaproxmox_main_host) e potencialmente outras configurações que referenciem o IP do host Proxmox.
-
Migração do Pool ZFS
/data(Contendo Dados de Aplicações e Backups de VMs): Este pool é crucial. Você tem duas opções principais:- Opção A: Mover Fisicamente os HDDs do Pool ZFS Antigo para o Novo Servidor (Mais Rápido e Simples se os HDDs são compatíveis e saudáveis):
- Desligue ambos os servidores completamente e desconecte-os da energia.
- Com cuidado, remova os HDDs que compõem o pool ZFS
/datado servidor antigo. - Instale esses mesmos HDDs no novo servidor, conectando-os corretamente aos cabos SATA e de energia.
- Inicie o novo servidor Proxmox.
- No shell do novo host Proxmox (como
root), importe o pool ZFS: - Verifique o status do pool importado:
sudo zpool status data. Se o estado forONLINE, seus datasets (como/data/docker-volumes,/data/media,/data/backups/vms) devem estar acessíveis nos seus pontos de montagem usuais.
- Opção B: Recriar o Pool ZFS no Novo Servidor e Restaurar os Dados de um Backup Externo (Se não puder mover os HDDs, ou se os HDDs do novo servidor forem diferentes/novos):
- No novo host Proxmox, crie um novo pool ZFS
datacom os HDDs disponíveis no novo servidor, seguindo os passos da Seção 2.2 do Manual de Implementação. Use o mesmo nome de pool (data) e os mesmos nomes de datasets (data/docker-volumes,data/media,data/backups, etc.). - Agora, restaure o conteúdo de cada dataset a partir do seu backup externo (Borg, rsync de um HD externo, etc.) para os respectivos pontos de montagem no novo pool ZFS (e.g., restaure o conteúdo de
docker-volumesdo seu backup para/data/docker-volumesno novo servidor). Este processo pode ser bastante demorado, dependendo do volume de dados e da velocidade do seu backup/rede.
- No novo host Proxmox, crie um novo pool ZFS
- Opção A: Mover Fisicamente os HDDs do Pool ZFS Antigo para o Novo Servidor (Mais Rápido e Simples se os HDDs são compatíveis e saudáveis):
-
Configurar o Storage de Backup de VMs no Novo Proxmox:
- Na interface web do novo Proxmox VE, vá para Datacenter -> Storage.
- Certifique-se de que existe um storage do tipo "Directory" configurado para apontar para o local onde seus arquivos de backup de VMs estão armazenados (e.g.,
/data/backups/vms, que agora deve estar acessível no novo host). Se necessário, "Add" ou "Edit" o storage. O campo "Content" deve ter "VZDump backup file" selecionado.
-
Restaurar Suas Máquinas Virtuais (VMs) no Novo Host Proxmox:
- Usando a interface web do Proxmox, selecione o storage de backup que você acabou de configurar.
- A aba "Backups" listará os arquivos de backup de VM disponíveis.
- Para cada VM que você precisa restaurar (e.g.,
core-services-vm,ai-desktop-vm):- Selecione o arquivo de backup mais recente e apropriado.
- Clique no botão "Restore".
-
Manter os Mesmos VM IDs ao Restaurar!
Ao restaurar, é extremamente importante que você use os mesmos VM IDs que as VMs tinham no servidor antigo (e.g.,100paracore-services-vm,101paraai-desktop-vm). Seu inventário Ansible (hosts.ini) e várias configurações gerenciadas pelo Ansible (como regras de firewall PVE, configurações Cloud-Init passadas peloproxmox-vmrole, etc.) dependem desses IDs. Se você for forçado a usar um novo VM ID, precisará atualizar cuidadosamente todas as referências a esse ID no seu código Ansible. - Storage de Destino: Escolha o storage onde o disco da VM restaurada será armazenado (e.g.,
local-lvmno seu novo SSD NVMe). - Outras opções de restauração:
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, o Ansible cuidará de iniciar se necessário).
- Clique em "Restore". Monitore a tarefa na parte inferior da UI do Proxmox.
- Não inicie as VMs ainda após a restauração, a menos que o Ansible precise delas ligadas para alguma configuração inicial (o que não é o caso aqui para as tasks de
vm-deploy.ymlque ajustam hardware).
-
Atualizar Configurações Ansible (na sua Máquina de Controle Ansible):
- Inventário (
home-server/ansible/inventories/home/hosts.ini):- Se o endereço IP do seu novo host Proxmox mudou, atualize o valor de
ansible_hostparaproxmox_main_host. - Confirme se os endereços IP das VMs (definidos em
ansible_hostparacore-services-vmeai-desktop-vm) ainda são os que você planeja que elas usem (e que seu roteador/DHCP está configurado para atribuí-los ou que a config Cloud-Init os definirá).
- Se o endereço IP do seu novo host Proxmox mudou, atualize o valor de
- Passthrough de PCI (Playbook
vm-deploy.yml):- No novo host Proxmox, use o comando
lspci -nnno shell para encontrar os novos IDs PCI da sua GPU AMD RX 5600XT (e quaisquer outros dispositivos de passthrough, como placas de rede). Lembre-se de pegar tanto o ID do dispositivo de vídeo quanto o do dispositivo de áudio da GPU. - Edite o arquivo
home-server/ansible/playbooks/vm-deploy.yml. Na seção de deploy daai-desktop-vm(ou qualquer outra VM que use passthrough), atualize a listavm_host_pci_devicescom os novos IDs PCI corretos do novo hardware.
- No novo host Proxmox, use o comando
- Outras Variáveis Específicas do Host: Revise
home-server/ansible/inventories/home/group_vars/all/main.ymlpara quaisquer outras variáveis que possam ser dependentes do hardware específico do host (e.g., nomes de interface de rede se você os referenciou em algum lugar, embora o uso devmbr0como padrão deva minimizar isso).
- Inventário (
-
Executar os Playbooks Ansible para Configurar o Novo Ambiente:
- Prepare 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. - 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. (Estes são os mesmos passos da Seção 2.3: Ações Manuais Prévias).
- No shell do novo host Proxmox (como
- Execute o Playbook Mestre
full-deploy.yml(ou o scriptrestore.sh): Na raiz do seu projetohome-server/na máquina de controle Ansible:Isto irá:bash 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-pass- Configurar o novo host Proxmox (NFS, firewall, pacotes, Node Exporter, etc.).
- Aplicar/verificar as configurações das VMs restauradas (incluindo as novas configurações de passthrough de PCI).
- Configurar a base das VMs Ubuntu (cliente NFS, Docker, Portainer, etc.).
- Configurar a stack de rede core (Traefik, Cloudflared, Authelia).
- Preparar os diretórios e arquivos
.envpara as stacks Docker.
- Prepare o Novo Host Proxmox para ser Gerenciado pelo Ansible:
-
Verificar e (Re)Implantar/Atualizar Stacks Docker no Portainer:
- Acesse sua instância Portainer (e.g.,
https://portainer.{{ base_domain }}). - Como os dados do volume
/data/docker-volumes/portainer/dataforam migrados com o pool ZFS, suas configurações de stacks, endpoints e usuários do Portainer devem estar lá. - Navegue para "Stacks". Suas stacks devem estar listadas.
- Para cada stack, pode ser uma boa ideia:
- Clicar na stack.
- Ir para o "Editor".
- Sem fazer alterações no compose (a menos que necessário), clique em "Update the stack". Marque "Re-pull image and redeploy" se quiser garantir que as imagens estão corretas ou se houve alguma mudança na configuração da VM que possa afetar os containers (como IPs, se referenciados incorretamente).
- Isso força o Portainer a reconciliar o estado da stack com sua definição e com os arquivos
.envque o Ansible pode ter recriado/atualizado.
- Dados das Aplicações: Como o conteúdo dos seus datasets ZFS (e.g.,
/data/docker-volumes/nextcloud,/data/media) foi migrado, 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ê optou por restaurar os dados do pool ZFS de um backup que não era o mais recente, e você tem dumps de banco de dados mais recentes, restaure esses dumps manualmente agora (conforme descrito na Estratégia de Backup).
- Acesse sua instância Portainer (e.g.,
-
Testar Tudo Exaustivamente:
- Verifique o acesso a todos os seus serviços web através dos seus subdomínios.
- Teste a autenticação com Authelia.
- Verifique a funcionalidade de cada aplicação principal (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 ou avisos.
- Se você configurou GPU passthrough, teste-o na
ai-desktop-vm(e.g., rodando Ollama com um modelo que use a GPU).
B. Mudança de Esquema de Endereçamento IP da Rede Local¶
Se você precisar alterar o esquema de IP da sua rede doméstica (e.g., seu roteador mudou e agora usa uma sub-rede diferente, como 10.0.10.0/24 em vez de 192.168.15.0/24).
Locais Chave Onde os Endereços IP Precisam ser Atualizados:
- Roteador Doméstico:
- Configure o novo range de IP, o servidor DHCP (se usado para outros dispositivos da sua LAN) e, o mais importante, o novo endereço IP do gateway (que é o próprio roteador).
- Host Proxmox VE:
- Arquivo de Configuração de Rede: Edite
/etc/network/interfacesno host Proxmox.- Atualize o
address,netmask(ou CIDR), egatewaypara a bridgevmbr0(sua interface de gerenciamento e LAN).
- Atualize o
- Serviço de Rede: Reinicie o serviço de rede (
sudo systemctl restart networking) ou, de forma mais segura, reinicie o host Proxmox. !!! warning "Acesso ao Host Proxmox Após Mudança de IP" Após mudar o IP do host Proxmox, você precisará usar o novo IP para acessá-lo via SSH ou interface web.
- Arquivo de Configuração de Rede: Edite
- Inventário Ansible (
home-server/ansible/inventories/home/hosts.ini):- Atualize o valor de
ansible_hostparaproxmox_main_hostcom o novo IP do Proxmox. - Atualize os valores de
ansible_hostparacore-services-vmeai-desktop-vmcom os novos IPs estáticos que você planeja para elas na nova sub-rede. - Atualize as variáveis de referência de IP no final do arquivo (e.g.,
proxmox_host_ip_var,core_services_vm_ip_var,ai_desktop_vm_ip_var).
- Atualize o valor de
- Variáveis Globais Ansible (
home-server/ansible/inventories/home/group_vars/all/main.yml):vm_cloud_init_gateway: Atualize para o novo endereço IP do seu roteador/gateway.proxmox_ssh_allowed_cidrseproxmox_web_ui_allowed_cidrs: Atualize para o novo CIDR da sua LAN (e.g.,10.0.10.0/24).vm_nfs_allowed_clients_cidr: Atualize para o novo CIDR da sua sub-rede de VMs (geralmente o mesmo da LAN, e.g.,10.0.10.0/24).
- Configuração de Rede das Máquinas Virtuais (VMs):
As suas VMs (
core-services-vm,ai-desktop-vm) foram configuradas com IPs estáticos através do Cloud-Init, usando a variávelvm_ipconfigno playbookvm-deploy.yml. Esta variável, por sua vez, usahostvars[NOME_DA_VM]['ansible_host']do inventário para definir o IP da VM.- Após atualizar os IPs no inventário Ansible (
hosts.ini) e ovm_cloud_init_gatewayemmain.yml:- Execute o playbook
vm-deploy.yml: O módulocommunity.proxmox.proxmox_kvmtentará atualizar a configuração de Cloud-Init da VM. Para que a nova configuração de rede tenha efeito, a VM precisará ser reiniciada. O Ansible pode não forçar o reboot aqui, então você pode precisar fazer isso manualmente via UI do Proxmox ousudo rebootdentro da VM. - Verificação: Após o reboot da VM, verifique se ela obteve o novo IP estático, gateway e DNS.
- Execute o playbook
- Se a atualização via
vm-deploy.ymlnão for suficiente ou se você preferir fazer manualmente (menos recomendado para IaC):- Conecte-se a cada VM via console Proxmox (já que o SSH com o IP antigo provavelmente não funcionará).
- Edite o arquivo de configuração de rede. Para Ubuntu com Netplan, este é geralmente um arquivo YAML em
/etc/netplan/(e.g.,50-cloud-init.yamlou similar). Atualize os camposaddresses,gateway4(ougateway6), enameservers. - Aplique a nova configuração de rede:
sudo netplan apply. - Reinicie a VM se necessário.
- Após atualizar os IPs no inventário Ansible (
- Configurações de Firewall (PVE Firewall no Host e UFW nas VMs):
- Os playbooks Ansible (
setup-proxmox-host.ymlpara PVE Firewall esetup-base-ubuntu.ymlpara UFW nas VMs) usam as variáveisproxmox_*_allowed_cidrsevm_nfs_allowed_clients_cidr. - Após você ter atualizado essas variáveis no seu
group_vars/all/main.yml, re-execute esses playbooks para que o Ansible atualize as regras de firewall para permitir os novos CIDRs da sua rede.
- Os playbooks Ansible (
- Configurações de Aplicações Específicas que Referenciam IPs (Raro, mas Verifique):
- Idealmente, nenhuma das suas aplicações Docker deve ter sido configurada para usar IPs fixos da sua LAN diretamente em suas configurações. Elas devem usar nomes de serviço Docker para comunicação interna ou serem acessadas via Traefik/DNS para acesso externo.
- O único lugar onde um IP de VM é explicitamente usado em nossa configuração é no template
dynamic_rag_services.yml.j2para o Traefik File Provider, que usa{{ ai_desktop_vm_ip_var }}. Como esta variável vem do inventário Ansible (hosts.ini), ela será atualizada automaticamente quando o Ansible gerar o arquivo dinâmico do Traefik (durante a execução desetup-core-networking.yml, que está incluído nofull-deploy.yml).
- Cloudflare DNS e Tunnel:
- Geralmente, não precisam de mudanças diretas devido a uma alteração no esquema de IP da sua LAN. O Cloudflare Tunnel estabelece uma conexão de saída e não depende dos IPs internos da sua LAN para o acesso externo aos seus serviços (desde que o
cloudflaredagent e o Traefik consigam se comunicar dentro da VM).
- Geralmente, não precisam de mudanças diretas devido a uma alteração no esquema de IP da sua LAN. O Cloudflare Tunnel estabelece uma conexão de saída e não depende dos IPs internos da sua LAN para o acesso externo aos seus serviços (desde que o
Ordem Geral Recomendada para Mudança de Esquema de IP:
- Planeje Cuidadosamente os novos IPs para todos os dispositivos estáticos (host Proxmox, VMs).
- Faça Backup COMPLETO de Tudo antes de iniciar qualquer alteração.
- Atualize as Configurações no seu Roteador Doméstico (novo range de IP, DHCP, novo IP do gateway).
- Atualize as Configurações Ansible: Modifique
hosts.iniegroup_vars/all/main.ymlcom os novos IPs e CIDRs. Faça commit e push dessas mudanças no Git. - Atualize a Configuração de Rede do Host Proxmox VE:
- Edite
/etc/network/interfacesno host Proxmox. - Reinicie os serviços de rede do host (
sudo systemctl restart networking) ou, de forma mais segura, reinicie o host Proxmox. - Verifique se o host Proxmox está acessível na rede com seu novo endereço IP.
- Edite
- Atualize as Configurações de Rede das Máquinas Virtuais:
- Tente primeiro executar o playbook
ansible-playbook ansible/playbooks/vm-deploy.yml --ask-vault-pass. - Requisite um reboot das VMs após a execução do playbook para que as novas configurações de rede Cloud-Init tenham efeito.
- Verifique se as VMs estão acessíveis em seus novos IPs. Se não, ajuste manualmente via console Proxmox e
netplan apply.
- Tente primeiro executar o playbook
- Execute os Playbooks Ansible para Sincronizar o Resto da Configuração:
Rode
bash scripts/restore.sh(ou ofull-deploy.yml) para que o Ansible atualize todas as outras configurações que dependem dos novos IPs/CIDRs (regras de firewall PVE, regras UFW nas VMs, configurações NFS, arquivos dinâmicos do Traefik, etc.). - Teste Toda a Conectividade e o Acesso a Todos os Serviços: Verifique o acesso local e externo (via Cloudflare Tunnel) a todos os seus serviços. Verifique os logs por erros.
Migrações de hardware e mudanças de esquema de rede são operações significativas. Prossiga com cautela, divida o processo em etapas gerenciáveis, verifique cada etapa e, o mais importante, tenha backups confiáveis e testados para poder reverter se algo der muito errado. Sua Infraestrutura como Código com Ansible será uma aliada poderosa nesses processos.