Bonjour, je poste ici après avoir tout essayé et je suis bloqué avec ma mise à niveau.
Je mettais à jour le forum après plusieurs mois. J’ai exécuté une sauvegarde comme d’habitude et je l’ai téléchargée.
Apparemment, dans ce processus de mise à jour, il y a une migration de PG 13 vers 15.
Tout fonctionnait sans problème jusqu’à ce que la mise à jour échoue. J’ai été interrompu en raison d’un manque d’espace disque.
Je suis allé sur mon droplet Digitalocean, je l’ai arrêté, j’ai agrandi le disque et je l’ai redémarré.
J’ai exécuté quelques commandes régulières pour libérer de l’espace disque (suppression des anciens journaux, ./launcher cleanup, etc.)
J’ai donc commencé la reconstruction, puis j’ai heurté le premier mur :
root@discourse-ubuntu-s-2vcpu-4gb-fra1-01:/var/discourse# ./launcher rebuild app
ATTENTION : La version 20.10.1 de Docker est obsolète, il est recommandé de passer à la version 24.0.7 ou plus récente.
Architecture x86_64 détectée.
ATTENTION : le fichier containers/app.yml est lisible par tous les utilisateurs
Mise à jour :
Je continue d’essayer des choses. À ce stade, je veux juste revenir à une version qui prend en charge PG13 pour pouvoir restaurer ma sauvegarde, mais je suis toujours bloqué en essayant cela.
Le hachage de commit avant la mise à niveau était v3.3.0.beta6 +294, j’essaie de reconstruire celui-là via YML, mais il affiche toujours ceci lors de la construction :
root@discourse-ubuntu-s-2vcpu-4gb-fra1-01:/var/discourse# ./launcher rebuild app
WARNING: Docker version 20.10.1 deprecated, recommend upgrade to 24.0.7 or newer.
x86_64 arch detected.
WARNING: We are about to start downloading the Discourse base image
This process may take anywhere between a few minutes to an hour, depending on your network speed
Please be patient
2.0.20250226-0128: Pulling from discourse/base
af302e5c37e9: Pull complete
ed49ab5c933d: Pull complete
4d13d450f300: Pull complete
a67afd5cca97: Pull complete
d22a5b6769a6: Pull complete
83c133b53b22: Pull complete
fec147508f0c: Pull complete
21850d8b3ba1: Pull complete
02e250b6bcc4: Pull complete
71ba5ea7da00: Pull complete
ddcfbf6d2647: Pull complete
9c3e54d34536: Pull complete
29ce98d2d62d: Pull complete
4c9694455fd5: Pull complete
58a8ebcc6563: Pull complete
9c8966f1f999: Pull complete
b3dde96c4217: Pull complete
f934de9e2e8d: Pull complete
834e25f513a1: Pull complete
85d3cf606a95: Pull complete
94331a6982ee: Pull complete
14936beb0e9f: Pull complete
3ef05b122d47: Pull complete
6c2dff13a1e7: Pull complete
7682543ad38b: Pull complete
f16f8d5c5a04: Pull complete
06d7037d56ef: Pull complete
bc6c17ae1969: Pull complete
d19f089ead0e: Pull complete
Digest: sha256:6f18aa2cd22bba0deb91d69194e577d4f96130ad555ae8ec646a8792cbfe37db
Status: Downloaded newer image for discourse/base:2.0.20250226-0128
docker.io/discourse/base:2.0.20250226-0128
WARNING: containers/app.yml file is world-readable. You can secure this file by running: chmod o-rwx containers/app.yml
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
2.0.20250226-0128: Pulling from discourse/base
Digest: sha256:6f18aa2cd22bba0deb91d69194e577d4f96130ad555ae8ec646a8792cbfe37db
Status: Image is up to date for discourse/base:2.0.20250226-0128
docker.io/discourse/base:2.0.20250226-0128
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-06-11T09:54:52.350929 #1] INFO -- : Reading from stdin
I, [2025-06-11T09:54:52.357807 #1] INFO -- : DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector
E: Problem executing scripts DPkg::Post-Invoke 'rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true'
E: Sub-process returned an error code
I, [2025-06-11T09:54:53.837808 #1] INFO -- : Reading package lists...
Building dependency tree...
Reading state information...
The following packages were automatically installed and are no longer required:
libcommon-sense-perl libio-pty-perl libipc-run-perl libjson-perl
libjson-xs-perl libllvm19 libtypes-serialiser-perl libz3-4
postgresql-client-common postgresql-common postgresql-common-dev ssl-cert
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
postgresql-15* postgresql-15-pgvector* postgresql-client-15*
0 upgraded, 0 newly installed, 3 to remove and 0 not upgraded.
After this operation, 60.9 MB disk space will be freed.
(Reading database ... 33951 files and directories currently installed.)
Removing postgresql-15-pgvector (0.8.0-1.pgdg120+1) ...
Removing postgresql-15 (15.12-1.pgdg120+1) ...
invoke-rc.d: could not determine current runlevel
update-alternatives: warning: forcing reinstallation of alternative /usr/share/postgresql/15/man/man1/psql.1.gz because link group psql.1.gz is broken
Removing postgresql-client-15 (15.12-1.pgdg120+1) ...
Processing triggers for postgresql-common (274.pgdg120+1) ...
Building PostgreSQL dictionaries from installed myspell/hunspell packages...
Removing obsolete dictionary files:
(Reading database ... 31913 files and directories currently installed.)
Purging configuration files for postgresql-15 (15.12-1.pgdg120+1) ...
Dropping cluster main...
FAILED
--------------------
Pups::ExecError: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector failed with return # <Process::Status: pid 7 exit 100>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params "DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector"
bootstrap failed with exit code 100
** FAILED TO BOOTSTRAP ** veuillez faire défiler vers le haut et rechercher les messages d'erreur précédents, il peut y en avoir plusieurs.
./discourse-doctor peut aider à diagnostiquer le problème.
a609309cf458b146e5650d21103bf084e9bf66843e46e627827f50b6f8c03376
Si vous avez effectué une sauvegarde comme vous l’avez dit, le plus simple est de lancer une nouvelle instance, de suivre Déplacer un site Discourse vers un autre VPS avec rsync (mais ne copiez pas les fichiers de la base de données), puis de restaurer votre sauvegarde.
Salut Jay ! Merci beaucoup pour ta réponse. Je viens de commencer à le faire, l’instance est en cours de configuration.
Petite question : j’ai téléchargé mon fichier de sauvegarde avant de commencer la mise à jour, voici le fichier : forumname-2025-06-11-060249-v20240807024301.tar.gz (4,6 Go compressé)La version du forum était v3.3.0.beta6 +294 avec PG13.
Je prévoyais d’initialiser la nouvelle instance en forçant cette version dans le fichier app.yml, comme ceci :
## voici le modèle tout-en-un et autonome de conteneur Docker Discourse
##
## Après avoir apporté des modifications à ce fichier, vous DEVEZ reconstruire
## /var/discourse/launcher rebuild app
##
## SOYEZ TRÈS PRUDENT LORS DE L'ÉDITION !
## LES FICHIERS YAML SONT SUPER SUPER SENSIBLES AUX ERREURS D'ESPACEMENT OU D'ALIGNEMENT !
## visitez http://www.yamllint.com/ pour valider ce fichier au besoin
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
## quels ports TCP/IP ce conteneur doit-il exposer ?
## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,
## consultez https://meta.discourse.org/t/17247 pour plus de détails
expose:
- "80:80" # http
- "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Définissez db_shared_buffers à un maximum de 25 % de la mémoire totale.
## sera défini automatiquement par bootstrap en fonction de la RAM détectée, ou vous pouvez le remplacer
db_shared_buffers: "1024MB"
## peut améliorer les performances de tri, mais ajoute de la mémoire par connexion
#db_work_mem: "40MB"
## Quelle révision Git ce conteneur doit-il utiliser ? (par défaut : tests-passed)
version: v3.3.0.beta6
Et ensuite, avec le nouveau forum opérationnel, importer la sauvegarde à partir de là.
Est-ce que cela a du sens ? ou est-ce que je manque un paramètre ou une étape importante ?
Merci encore, Jay, de votre réponse. J’apprécie vraiment votre temps pour m’aider à traverser ce cauchemar.
J’essaie de procéder de cette façon (forcer la version dans le YML) mais apparemment discourse_docker n’est pas (encore) content de ce changement :
FAILED
--------------------
Pups::ExecError: grep -q 'outlets/before-server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The \"before-server\" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 ) failed with return #<Process::Status: pid 2788 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in spawn'
exec failed with the params {"cmd"=>["cp $home/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf", "rm /etc/nginx/sites-enabled/default", "mkdir -p /var/nginx/cache", "grep -q 'outlets/before-server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The \\\"before-server\\\" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )", "grep -q 'outlets/server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The \\\"server\\\" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )", "grep -q 'outlets/discourse' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The \\\"discourse\\\" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )", "mkdir -p /etc/nginx/conf.d/outlets/before-server", "touch /etc/nginx/conf.d/outlets/before-server/20-redirect-http-to-https.conf", "touch /etc/nginx/conf.d/outlets/before-server/30-ratelimited.conf", "mkdir -p /etc/nginx/conf.d/outlets/server", "touch /etc/nginx/conf.d/outlets/server/10-http.conf", "touch /etc/nginx/conf.d/outlets/server/20-https.conf", "touch /etc/nginx/conf.d/outlets/server/30-offline-page.conf", "mkdir -p /etc/nginx/conf.d/outlets/discourse", "touch /etc/nginx/conf.d/outlets/discourse/20-https.conf", "touch /etc/nginx/conf.d/outlets/discourse/30-ratelimited.conf"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
d511b0ec31ac912c99c682611c35bbb446dde1488e1762aa07ccd24690c63164
2/2
Avant la mise à jour, j’ai pris une capture d’écran de la version actuelle au cas où, y a-t-il un moyen de forcer discourse_docker à une ancienne version compatible ?
J’ai cherché sur Google et ici sur Meta, mais rien encore sur la façon de le faire.
Cependant, question rapide : si la sauvegarde provient d’une ancienne version de Discourse qui utilisait PG13, aurai-je des problèmes pour importer la sauvegarde dans la dernière version de Discourse avec PG15 ?
Désolé @pfaffman, j’ai écrit un message précédent en pensant que le problème était résolu, mais il y a eu un rebondissement.
Après une longue période d’importation, j’ai vu que le forum était de nouveau en ligne, listant tous les messages, etc.
Dans le terminal, le journal était :
[...]
-- execute("DELETE FROM site_settings WHERE name='warn_reviving_old_topic_age'")
-\\u003e 0.0002s
== 20250609115711 RemoveComposerTipsSiteSettings: migrated (0.0012s) ==========
Reconnecting to the database...
Reloading site settings...
Disabling outgoing emails for non-staff users...
Disabling readonly mode...
Clearing category cache...
Reloading translations...
Remapping uploads...
Restoring uploads, this may take a while...
Migrating uploads to S3 for 'default'...
Uploading files to S3...
- Listing local files
=\\u003e 5 files
- Listing S3 files
............................................................................................................................................................................ =\\u003e 171490 files
- Syncing files to S3
.....
Updating the URLs in the database...
Je suis resté là pendant un moment, et j’ai pensé que c’était juste ma connexion au terminal. Cependant, quelques minutes plus tard, il a continué à échouer :
490 files
- Syncing files to S3
.....
Updating the URLs in the database...
Removing old optimized images...
Flagging all posts containing lightboxes for rebake...
76198 posts were flagged for a rebake
EXCEPTION: 903 posts are not remapped to new S3 upload URL. S3 migration failed for db 'default'.
/var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:81:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:383:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/file_store/s3_store.rb:354:in `copy_from'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:69:in `restore_uploads'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:49:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:167:in `restore_uploads'
/var/www/discourse/lib/backup_restore/restorer.rb:71:in `run'
script/discourse:191:in `restore'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor.rb:538:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/base.rb:584:in `start'
script/discourse:345:in `\u003ctop (required)\u003e'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in `load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in `kernel_load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:452:in `exec'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor.rb:538:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:35:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:29:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:28:in `block in \u003ctop (required)\u003e'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:20:in `\u003ctop (required)\u003e'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `\u003cmain\u003e'
Trying to rollback...
Rolling back...
Cleaning stuff up...
Dropping functions from the discourse_functions schema...
Removing tmp '/var/www/discourse/tmp/restores/default/2025-06-11-121115' directory...
Unpausing sidekiq...
Marking restore as finished...
Notifying 'system' of the end of the restore...
Finished!
[FAILED]
Restore done.
```Soudain, le forum qui avait été « restauré » en ligne a vu tous ses messages disparaître, ne laissant que quelques sujets actifs.
Étant donné que le journal indique que « 76198 messages ont été signalés pour un rebake », j'ai pensé que c'était juste qu'ils devaient maintenant être re-bakés, alors je suis allé sur Sidekiq, mais il n'y a rien en attente de traitement :(


Connecté à la console Rails, et apparemment il n’y a que 10 posts, pas tous ceux à importer
/var/www/discourse# rails c
Chargement de l’environnement de production (Rails 7.2.2.1)
discourse(prod)> Post.count
=> 10
discourse(prod)> Post.where(“baked_version IS NULL”).count
=> 0
Soupir. Utilisez-vous le même nom d’hôte ? (Peut-être ?)
C’est votre problème maintenant.
Avez-vous configuré S3 dans la base de données ou dans le fichier yml ? Je suppose que c’est le premier cas. Le plus simple serait de restaurer uniquement la base de données, mais c’est difficile à expliquer (extraire le fichier sql puis le nommer de la même manière que le fichier tar.gz).
Vous pouvez essayer ceci :
discourse restore --pause <backup_filename>
Cela fera une pause avant d’essayer de restaurer les éléments S3. Ensuite, si vous saviez quoi faire, vous pourriez résoudre le problème des téléchargements erronés.
Une autre solution serait de définir DISCOURSE_USE_S3 sur false dans votre app.yml. Vous pourriez également avoir besoin de définir les autres paramètres S3, comme ceux qui indiquent d’utiliser les téléchargements S3 et/ou les buckets S3.
[citation=“pfaffman, post:12, topic:369694”]
Pff. Utilisez-vous le même nom d’hôte ? (Peut-être ?)
[/citation]
Oui, mais maintenant que vous le mentionnez.
Le forum a maintenant 10 ans.
J’ai configuré S3 à l’époque pendant un certain temps, mais je l’ai ensuite supprimé, donc ces publications avec des images S3 sont assez anciennes.
Existe-t-il un moyen de les identifier et de les ignorer/supprimer, afin que l’importation puisse fonctionner sans difficulté ?
Une autre chose serait de définir DISCOURSE_USE_S3 sur false dans votre app.yml. Vous devrez peut-être aussi définir les autres éléments S3 comme ceux qui indiquent d’utiliser les téléchargements S3 et/ou les buckets S3.
Je vais essayer cela aussi, car au final, nous ne nous soucions pas de ces fichiers ou publications S3, c’est juste que je ne sais pas encore comment faire pour les ignorer.
Si vous ne vous souciez vraiment pas d’eux, vous pouvez faire la pause et quand elle se met en pause, ouvrez un autre terminal, allez dans rails et faites quelque chose comme
bad=Upload.where("url like '%the-s3-url%'")
bad.destroy_all
Au fait, si vous êtes toujours bloqué et désespéré et que vous avez un budget, vous pouvez me contacter par e-mail ou par message privé ou poser votre question sur Marketplace.
Tu aurais dû me le dire depuis le début ! J’aurais volontiers payé en premier lieu ! hehe
C’est en marche maintenant.
Après avoir essayé des tonnes de choses, j’ai fini par faire quelque chose d’contre-intuitif mais qui fonctionne maintenant :
Configurer S3 dans la nouvelle instance correctement (via le panneau d’administration)
Lancer l’importation avec le –pause thing mais à la deuxième étape, j’ai juste arrêté le processus. Je m’attendais à ce que le forum ne fonctionne pas ou ait des problèmes avec les images, mais il fonctionne et les anciennes images se chargent sans problème.
Je teste encore des choses, peut-être que je trouverai quelque chose de cassé plus tard, mais pour l’instant, après 12h de dépannage, je vais appeler ça une victoire pour l’instant.