Hosts móveis soa assustador e é principalmente rsync, DNS e paciência. O truque são duas passagens: uma lenta enquanto o servidor antigo ainda roda, e uma final rápida que leva segundos.
Ordem a Buran VPS, instalar a mesma versão do sistema operacional que o servidor antigo, e fazer o básico: Chaves SSH e firewall. Instale os mesmos serviços (nginx, PostgreSQL, Docker) nas mesmas versões — mas ainda não os inicie.
Do novo servidor, puxe os dados. Este passe pode levar o tempo que quiser; ninguém percebe.
rsync -avz --delete \
--exclude=/proc --exclude=/sys --exclude=/dev --exclude=/tmp \
--exclude=/var/lib/postgresql \
root@OLD_SERVER_IP:/etc /etc
rsync -avz --delete root@OLD_SERVER_IP:/var/www /var/www
rsync -avz --delete root@OLD_SERVER_IP:/root /root
Os diretórios de dados de banco de dados são excluídos de propósito — uma pasta viva PostgreSQL ou MySQL copiado arquivo por arquivo está quebrada. As bases de dados movem-se como lixo.
No servidor antigo:
pg_dumpall -U postgres > /root/all-databases.sql
# or per database, compressed:
pg_dump -Fc -U postgres appdb > /root/appdb.dump
Puxe as descargas para o novo servidor e importe-as:
rsync -avz root@OLD_SERVER_IP:/root/all-databases.sql /root/
sudo -u postgres psql < /root/all-databases.sql
Coloque o aplicativo no modo de manutenção, execute a sincronização final e inicie os serviços:
# on the old server
pg_dumpall -U postgres > /root/final.sql
# on the new server
rsync -avz --delete root@OLD_SERVER_IP:/var/www /var/www
rsync -avz root@OLD_SERVER_IP:/root/final.sql /root/
sudo -u postgres psql < /root/final.sql
systemctl enable --now nginx postgresql myapp
Primeiro teste localmente — antes de tocar em DNS:
curl -H "Host: example.com" http://127.0.0.1
Altere o registro A para o novo IP e baixe o TTL para 300 segundos por dia antes — o valor antigo expira rapidamente. Dentro de minutos a maioria dos visitantes estão no novo servidor; os retardatários chegam nas próximas horas.
Certificados: executar certbot --nginx no novo servidor após a resolução do DNS. Se você usar o proxy Cloudflare, inverta o registro e reedição como de costume — os comandos estão no Guia Nginx.
Verifique de vários lugares: site, API, correio, trabalhos de cron, backups. Assista os registros do servidor antigo por uma hora — qualquer tráfego deixado lá significa que algo ainda aponta para o IP antigo.
tail -f /var/log/nginx/access.log
crontab -l
systemctl list-timers
Mantenha o servidor antigo por uma semana após o interruptor. Então cancele — sem drama, e um retorno fácil se você perdeu algo.
Com o método rsync bipass, o tempo de inatividade é apenas a sincronização final mais a propagação DNS — tipicamente de 2 a 10 minutos. Uma página de manutenção no servidor antigo torna-a invisível.
Qualquer IP antigo codificado com código rígido tem que mudar: nginx upstreams, configs de aplicativo, firewall allowlists. Procurar as configurações com grep para o IP antigo antes da sincronização final.
Provisionamento é totalmente automático, e o painel lhe dá console e reinstalar acesso; migração é um trabalho padrão rsync que você pode executar em meia hora. Se algo não se encaixar, [email protected] responde em 30 minutos.