# Migrando o Discourse de uma droplet DigitalOcean para outra sem tempo de inatividade

**URL:** https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528
**Category:** Self-hosting
**Created:** [Dezembro 29, 2020, 7:49pm UTC](https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528 "2020-12-29T19:49:59Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![mholt](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mholt/32/120935_2.png) [@mholt](https://meta.discourse.org/u/mholt)
#### Post date: [Dezembro 29, 2020, 7:49pm UTC](https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528/1 "2020-12-29T19:49:59Z")

</div>

Estamos migrando para um novo droplet da DigitalOcean e tentamos usar a imagem do marketplace. Ao executar o script de configuração, ele falha logo no início porque nosso nome de domínio ainda está apontando para nossa instância atual em produção.

Preciso colocar essa nova instalação no ar para poder restaurar seu backup e, só então, atualizar os registros DNS.

O erro é:

```plaintext
Verificando seu nome de domínio . . .
AVISO: A porta 443 do computador não parece estar acessível usando o hostname: x
AVISO: A conexão com x (porta 80) também falha.

Isso sugere que x resolve para algum endereço IP que não alcança esta
máquina onde você está instalando o Discourse.

A primeira coisa a fazer é confirmar se x resolve para o endereço IP deste servidor.
Geralmente, você faz isso no mesmo local onde comprou o domínio.

Se você tem certeza de que o endereço IP está resolvendo corretamente, pode ser um problema de firewall.
Uma busca na web por "abrir portas SEU SERVIÇO DE NUVEM" pode ajudar.

```

O nome de domínio realmente responde nas portas 80 e 443, então essa mensagem de erro também parece estar incorreta.

---

<div class="post-metadata">

### Author: ![jomaxro](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jomaxro/32/126216_2.png) [@jomaxro](https://meta.discourse.org/u/jomaxro)
#### Post date: [Dezembro 29, 2020, 8:36pm UTC](https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528/2 "2020-12-29T20:36:59Z")

</div>

Oi Matt,

Nós (a equipe do Discourse) não gerenciamos a imagem do marketplace da DO, então, receio que nossa ajuda para resolver esse problema específico será limitada.

---

<div class="post-metadata">

### Author: ![mholt](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mholt/32/120935_2.png) [@mholt](https://meta.discourse.org/u/mholt)
#### Post date: [Dezembro 29, 2020, 8:41pm UTC](https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528/3 "2020-12-29T20:41:05Z")

</div>

Mas você gerencia isso, certo?

> <https://github.com/discourse/discourse_docker/blob/master/discourse-setup#L55>

Até as instruções de instalação manual incluem essa etapa.

Com certeza não posso ser a primeira pessoa a fazer isso. Como as pessoas estão fazendo?

---

<div class="post-metadata">

### Author: ![jomaxro](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jomaxro/32/126216_2.png) [@jomaxro](https://meta.discourse.org/u/jomaxro)
#### Post date: [Dezembro 29, 2020, 8:48pm UTC](https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528/4 "2020-12-29T20:48:13Z")

</div>

Sim, nós gerenciamos isso. Não analisei o código; assumi que a verificação vinha da imagem do marketplace.

`./discourse-setup` destina-se a ser uma maneira simples de configurar o Discourse, evitando a necessidade de editar manualmente um arquivo de texto ao iniciar um novo site do Discourse. Seu caso de uso não é “típico” para o que o script de configuração lida.

No seu caso, sua melhor opção provavelmente seria copiar o arquivo `containers/app.yml` do seu servidor atual para o novo. Alternativamente, você pode editar o arquivo manualmente, conforme sugerido nas linhas 75/76:

> <https://github.com/discourse/discourse_docker/blob/master/discourse-setup#L75>

---

<div class="post-metadata">

### Author: ![mholt](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mholt/32/120935_2.png) [@mholt](https://meta.discourse.org/u/mholt)
#### Post date: [Dezembro 29, 2020, 8:53pm UTC](https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528/5 "2020-12-29T20:53:32Z")

</div>

Onde posso encontrar o app.yml padrão? Quero começar com uma instalação padrão limpa.

Além disso, como faço para colocar o servidor em funcionamento sem o script de configuração? O acesso ao endereço IP continua sem resposta, já que não consigo executar o script de configuração.

---

<div class="post-metadata">

### Author: ![jomaxro](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jomaxro/32/126216_2.png) [@jomaxro](https://meta.discourse.org/u/jomaxro)
#### Post date: [Dezembro 29, 2020, 9:02pm UTC](https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528/6 "2020-12-29T21:02:14Z")

</div>

O padrão pode ser encontrado em `samples/standalone.yml`. [Também no GitHub](https://github.com/discourse/discourse_docker/blob/master/samples/standalone.yml).

Considerando que você está seguindo o guia oficial de instalação, após os comandos em “Instalar Discourse”, você deve fazer o seguinte:

Copie o arquivo YAML padrão de samples para containers:

```plaintext
cp samples/standalone.yml containers/app.yml

```

Edite o arquivo manualmente:

```plaintext
nano containers/app.yml

```

Inicialize e inicie o Discourse:

```plaintext
./launcher rebuild app

```

---

<div class="post-metadata">

### Author: ![mholt](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mholt/32/120935_2.png) [@mholt](https://meta.discourse.org/u/mholt)
#### Post date: [Dezembro 29, 2020, 9:24pm UTC](https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528/7 "2020-12-29T21:24:34Z")

</div>

Obrigado, isso me aproxima.

Mas agora não consigo importar o backup porque não consigo ativar minha conta de administrador temporária:

> (6) A carga do script ‘’ foi recusada porque viola a seguinte diretiva de Política de Segurança de Conteúdo: “script-src ”. Observe que ‘script-src-elem’ não foi definido explicitamente, então ‘script-src’ é usado como fallback.

Existe uma maneira direta de restaurar a partir de um backup ou desativar a CSP até lá?

---

<div class="post-metadata">

### Author: ![jomaxro](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jomaxro/32/126216_2.png) [@jomaxro](https://meta.discourse.org/u/jomaxro)
#### Post date: [Dezembro 29, 2020, 9:33pm UTC](https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528/8 "2020-12-29T21:33:11Z")

</div>

> [@mholt](#):
>
> Existe uma maneira direta de restaurar a partir de um backup?

> [@Restore a backup from the command line](https://meta.discourse.org/t/restore-a-backup-from-command-line/108034):
>
> bookmark This guide explains how to restore a Discourse backup from the command line without using the Discourse web UI. person_raising_hand Required user level: Administrator wrench Console access required Here’s how to restore a Discourse backup from the command line, without ever booting the Discourse web UI. This is handy when you’re moving servers. Prerequisites Before you start, make sure you complete the following steps: Download the latest backup file from the source Disco…

> [@mholt](#):
>
> desativar a CSP até lá?

Acesse seu servidor via SSH e, em seguida:

```plaintext
cd /var/discourse
sudo ./launcher enter app
rails c
SiteSetting.content_security_policy = false
exit
exit

```

Observe que eu tentaria primeiro a restauração do backup pela CLI — isso resolve o problema real que você tem (restaurar um backup) em vez do obstáculo atual (CSP).

---

<div class="post-metadata">

### Author: ![mholt](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mholt/32/120935_2.png) [@mholt](https://meta.discourse.org/u/mholt)
#### Post date: [Dezembro 29, 2020, 9:45pm UTC](https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528/9 "2020-12-29T21:45:53Z")

</div>

Obrigado pelas dicas.

Ao executar a restauração, obtenho:

```plaintext
ERRO: não foi possível criar o índice exclusivo "index_incoming_referers_on_path_and_incoming_domain_id"
DETALHE: A chave (path, incoming_domain_id)=(/s/free+proxy+hideip.me, 1009) está duplicada.
EXCEÇÃO: psql falhou: DETALHE: A chave (path, incoming_domain_id)=(/s/free+proxy+hideip.me, 1009) está duplicada.
/var/www/discourse/lib/backup_restore/database_restorer.rb:87:in `restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:51:in `run'
script/discourse:143:in `restore'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.0.1/lib/thor/base.rb:485:in `start'
script/discourse:284:in `<top (required)>'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/cli/exec.rb:63:in `load'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/cli/exec.rb:63:in `kernel_load'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/cli/exec.rb:28:in `run'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/cli.rb:497:in `exec'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/cli.rb:30:in `dispatch'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/cli.rb:24:in `start'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/exe/bundle:49:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/lib/bundler/friendly_errors.rb:130:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.3/exe/bundle:37:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tentando reverter...
Revertendo...
Limpando arquivos...
Removendo funções do esquema discourse_functions...
Removendo o diretório temporário '/var/www/discourse/tmp/restores/default/2020-12-29-214249'...
Retomando o sidekiq...
Marcando a restauração como concluída...
Notificando o 'sistema' sobre o fim da restauração...
Concluído!
[ERROU]
Restauração finalizada.

```

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Dezembro 30, 2020, 12:25am UTC](https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528/10 "2020-12-30T00:25:26Z")

</div>

Parece que você tem um índice corrompido. Você executou uma atualização na instância existente? Há uma chance de que isso ajude.

Existe algum tópico com instruções para copiar os arquivos do banco de dados bruto (e do Let’s Encrypt) da instância antiga. Isso provavelmente é o que eu faria.

---

<div class="post-metadata">

### Author: ![mholt](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mholt/32/120935_2.png) [@mholt](https://meta.discourse.org/u/mholt)
#### Post date: [Dezembro 30, 2020, 12:46am UTC](https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528/11 "2020-12-30T00:46:08Z")

</div>

> [@pfaffman](#):
>
> Você já executou uma atualização na instância existente?

O que é “rub run”?

As atualizações na instância existente continuam apresentando erros (erros diferentes deste), por isso estou migrando para uma nova instância.

---

<div class="post-metadata">

### Author: ![mholt](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mholt/32/120935_2.png) [@mholt](https://meta.discourse.org/u/mholt)
#### Post date: [Dezembro 30, 2020, 12:46am UTC](https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528/12 "2020-12-30T00:46:27Z")

</div>

> [@pfaffman](#):
>
> Existe um tópico em algum lugar com instruções para copiar os arquivos do banco de dados bruto (e do Let’s Encrypt) da instância antiga. Provavelmente é isso que eu faria.

Você tem um link para isso?

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Dezembro 30, 2020, 12:50am UTC](https://meta.discourse.org/t/migrating-discourse-from-one-digitalocean-droplet-to-another-without-downtime/174528/13 "2020-12-30T00:50:45Z")

</div>

[Transferência de backups via rsync e cron](https://meta.discourse.org/t/transferring-backups-via-rsync-and-cron/124346) talvez
