Exemplo de migração de auto-hospedagem — VPS para VPS

Estou compartilhando minha experiência recente de migrar uma instalação auto-hospedada do Discourse de um VPS para outro, como uma forma de dizer “obrigado!” aos criadores do Discourse e à sua comunidade de administradores. Esta migração preserva as configurações de SSL do LetsEncrypt e de e-mail.

A instalação original estava em uma instância do tipo g1-small do Google Cloud Platform (GCP) (1 vCPU, 1,7 GB de RAM), usando o guia oficial (INSTALL-cloud.md) e rastreando a branch tests-passed.

A nova instalação está em um VPS KVM do tipo “Developer” da Evolution Host (2 núcleos de CPU, 2 GB de RAM, 40 GB de SSD, tempo de reconstrução de 7m23s, €10/mês). O Ubuntu Server 18.04.4 minimal foi instalado com uma partição de swap de 1 GB (provavelmente baseada em um modelo).

Se o seu host foi instalado com software adicional, certifique-se de remover softwares desnecessários, como servidores web, e garanta a segurança do seu host (nomes de usuário padrão, senhas, configurações do sshd, etc.).

A seguir estão os comandos do terminal executados como root, com dados específicos da instalação removidos (substitua as partes em LETRAS MAIÚSCULAS pelos seus próprios dados). Por favor, comente com correções ou dúvidas!

Preparação do novo host

apt update && apt -y dist-upgrade
apt install -y byobu mosh htop iotop hugepages curl git && byobu-enable

hugeadm --thp-never

fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
echo '/swapfile       swap    swap    auto      0       0' | tee -a /etc/fstab
echo 'vm.swappiness = 10' > /etc/sysctl.d/30-discourse-swap.conf

git clone https://github.com/discourse/discourse_docker.git /var/discourse

reboot

Preparação do host antigo e backup dos arquivos do Discourse

cd /var/discourse
./launcher rebuild app

./launcher enter app
discourse backup
exit

(anote o nome do arquivo do seu backup do Discourse)

cp -v containers/app.yml ~
cd shared/standalone
cp -v settings.yml ~
tar cvf ~/ssl.tar ssl
tar cvf ~/letsencrypt.tar letsencrypt

cd ~
scp -C ssl.tar letsencrypt.tar app.yml settings.yml NOME_DE_USUARIO@NOVO_IP_DO_HOST:~
scp /var/discourse/shared/standalone/backups/default/SEU_BACKUP_DO_DISCOURSE.tar.gz NOME_DE_USUARIO@NOVO_IP_DO_HOST:~
exit

Restauração do Discourse no novo host

(mova os arquivos copiados com scp acima para o diretório home do usuário root)

echo 'NOVO_IP_DO_HOST SEU_FQHN_DO_DISCOURSE' | tee -a /etc/hosts

cd /var/discourse
cp -v ~/app.yml containers

mkdir -v shared/standalone
cd shared/standalone
cp -v ~/settings.yml .   
tar xvf ~/ssl.tar
tar xvf ~/letsencrypt.tar

cd /var/discourse
./discourse-setup

(discourse-setup deve ser concluído sem erros, permitindo que você verifique todas as informações de configuração relevantes)

mkdir -v shared/standalone/backups/default
cp -v ~/SEU_BACKUP_DO_DISCOURSE.tar.gz shared/standalone/backups/default

./launcher enter app
discourse enable_restore
discourse restore SEU_BACKUP_DO_DISCOURSE.tar.gz
discourse disable_restore

Testes a partir da sua máquina local

echo 'NOVO_IP_DO_HOST SEU_FQHN_DO_DISCOURSE' | tee -a /etc/hosts

Navegue até https://SEU_FQHN_DO_DISCOURSE/admin/email

Na parte inferior da página, insira seu endereço de e-mail para testar o envio de e-mails e navegue pelo seu site do Discourse para confirmar o status de funcionamento.

Quando estiver satisfeito de que tudo está funcionando, altere o registro DNS A para SEU_FQHN_DO_DISCOURSE para apontar para o endereço IP do seu novo host.

6 curtidas