Migration de Discourse d'une droplet DigitalOcean à une autre sans interruption

Nous migrons vers un nouveau droplet DigitalOcean et avons essayé d’utiliser l’image du marketplace. Lors de l’exécution du script de configuration, il échoue rapidement car notre nom de domaine pointe toujours vers notre instance actuelle en production.

Je dois mettre cette nouvelle installation en ligne afin de pouvoir restaurer sa sauvegarde, puis mettre à jour les enregistrements DNS par la suite.

Voici l’erreur :

Vérification de votre nom de domaine . . .
AVERTISSEMENT : Le port 443 de l'ordinateur ne semble pas accessible via le nom d'hôte : x
AVERTISSEMENT : La connexion à x (port 80) échoue également.

Cela suggère que x se résout vers une adresse IP qui ne permet pas d'atteindre
la machine sur laquelle vous installez Discourse.

La première chose à faire est de confirmer que x se résout vers l'adresse IP de ce serveur.
Vous le faites généralement au même endroit où vous avez acheté le domaine.

Si vous êtes certain que l'adresse IP se résout correctement, il pourrait s'agir d'un problème de pare-feu.
Une recherche web sur « ouvrir les ports VOTRE SERVICE CLOUD » pourrait aider.

Le nom de domaine répond bien sur les ports 80 et 443, ce qui suggère que ce message d’erreur est également incorrect.

Salut Matt,

Nous (l’équipe Discourse) ne gérons pas l’image du marché DO, je crains donc que nous ne puissions que très peu vous aider à résoudre ce problème spécifique.

Mais vous gérez cela, n’est-ce pas ?

Même les instructions d’installation manuelle incluent cette étape.

Je ne peux pas être la première personne à faire cela. Comment les gens s’y prennent-ils ?

Oui, nous gérons cela. Je n’ai pas examiné le code, j’ai supposé que la vérification provenait de l’image du marketplace.

./discourse-setup est conçu comme un moyen simple de configurer Discourse, évitant ainsi la nécessité de modifier manuellement un fichier texte lors du lancement d’un nouveau site Discourse. Votre cas d’utilisation n’est pas “typique” et n’est pas géré par le script de configuration.

Dans votre cas, votre meilleure option serait probablement de copier le fichier containers/app.yml de votre serveur actuel vers le nouveau. Sinon, vous pouvez modifier le fichier manuellement vous-même, comme suggéré aux lignes 75/76 :

Où puis-je trouver le fichier app.yml par défaut ? Je souhaite démarrer avec une installation neuve et par défaut.

De plus, comment démarrer le serveur sans le script de configuration ? L’accès à l’adresse IP reste toujours sans réponse, car je ne peux pas exécuter le script de configuration.

Le fichier par défaut se trouve dans samples/standalone.yml. Également sur GitHub.

En supposant que vous suivez le guide d’installation officiel, après les commandes de la section « Installer Discourse », vous devrez effectuer les étapes suivantes :

Copiez le fichier YAML par défaut depuis samples vers containers :

cp samples/standalone.yml containers/app.yml

Modifiez le fichier manuellement :

nano containers/app.yml

Initialisez et démarrez Discourse :

./launcher rebuild app

Merci, cela me rapproche de la solution.

Mais maintenant, je ne peux pas importer la sauvegarde car je ne peux pas activer mon compte administrateur temporaire :

(6) Le chargement du script ‘’ a été refusé car il viole la directive suivante de la politique de sécurité du contenu (CSP) : “script-src ”. Notez que ‘script-src-elem’ n’a pas été défini explicitement, donc ‘script-src’ est utilisé comme solution de repli.

Existe-t-il un moyen direct de restaurer à partir d’une sauvegarde ou de désactiver la CSP jusqu’à ce moment-là ?

Connectez-vous à votre serveur via SSH, puis :

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

Notez que je recommanderais d’abord d’essayer la restauration de la sauvegarde via l’interface en ligne de commande : cela résout le problème réel que vous rencontrez (restaurer une sauvegarde) plutôt que l’obstacle actuel (la CSP).

Merci pour les indications.

Lors de l’exécution de la restauration, j’obtiens :

ERROR:  could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
DETAIL:  Key (path, incoming_domain_id)=(/s/free+proxy+hideip.me, 1009) is duplicated.
EXCEPTION: psql failed: DETAIL:  Key (path, incoming_domain_id)=(/s/free+proxy+hideip.me, 1009) is duplicated.
/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>'
Tentative d'annulation...
Annulation en cours...
Nettoyage...
Suppression des fonctions du schéma discourse_functions...
Suppression du répertoire temporaire '/var/www/discourse/tmp/restores/default/2020-12-29-214249'...
Reprise de sidekiq...
Marquage de la restauration comme terminée...
Notification de la fin de la restauration au système...
Terminé !
[ÉCHEC]
Restauration terminée.

Il semble que vous ayez un index corrompu. Avez-vous effectué une mise à niveau sur l’instance existante ? Cela pourrait peut-être aider.

Il existe quelque part un sujet avec des instructions pour copier les fichiers de la base de données brute (et de Let’s Encrypt) depuis l’ancienne instance. C’est probablement ce que je ferais.

Qu’est-ce que “exécuter une mise à niveau” ?

Les mises à niveau sur l’instance existante génèrent constamment des erreurs (différentes de celle-ci), c’est pourquoi je migre vers une nouvelle instance.

Avez-vous un lien vers cela ?

Transfert de sauvegardes via rsync et cron peut-être