Au début, l’écran de mise à niveau avait tout désactivé. J’ai redémarré et j’ai ensuite pu sélectionner la mise à niveau de docker_manager. Celle-ci a échoué avec :
rake aborted!
NoMethodError: undefined method `path' for nil:NilClass
J’ai donc décidé de me connecter au serveur via SSH et d’essayer une reconstruction, voici ce que j’ai obtenu :
root@Discourse-1:/var/discourse# ./launcher rebuild app
x86_64 arch detected.
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
............
Downloading MaxMindDB...
Compressing Javascript and Generating Source Maps
I, [2023-03-10T03:08:58.958320 #1] INFO -- : Terminating async processes
I, [2023-03-10T03:08:58.958649 #1] INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 42
I, [2023-03-10T03:08:58.958745 #1] INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 103
103:signal-handler (1678417738) Received SIGTERM scheduling shutdown...
2023-03-10 03:08:58.959 UTC [42] LOG: received fast shutdown request
2023-03-10 03:08:58.966 UTC [42] LOG: aborting any active transactions
2023-03-10 03:08:58.969 UTC [42] LOG: background worker "logical replication launcher" (PID 51) exited with exit code 1
2023-03-10 03:08:58.971 UTC [46] LOG: shutting down
103:M 10 Mar 2023 03:08:59.047 # User requested shutdown...
103:M 10 Mar 2023 03:08:59.047 * Saving the final RDB snapshot before exiting.
2023-03-10 03:08:59.060 UTC [42] LOG: database system is shut down
103:M 10 Mar 2023 03:08:59.073 * DB saved on disk
103:M 10 Mar 2023 03:08:59.073 # Redis is now ready to exit, bye bye...
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 1004 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
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.
e956a73644feb880e4b524bcbd4fa3c626fcfcc4edb3752f72e523194f663b4e
root@Discourse-1:/var/discourse# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@Discourse-1:/var/discourse#
Avez-vous des plugins dans votre fichier app.yml ?
Quand ce genre de chose m’arrive, c’est généralement un plugin défectueux qui doit être mis en commentaire avant que la reconstruction ne fonctionne.
Personnellement, si une sauvegarde échoue, je n’essaierais pas de mettre à jour. Une sauvegarde - y compris en avoir une copie téléchargée - est pour moi un prérequis. Ce n’est peut-être pas un commentaire utile pour le moment, mais je pense qu’il faut le dire.
Si le problème est un échec de lancement, alors nous nous soucions non seulement de l’utilisation de la RAM et du swap, mais aussi de la configuration du noyau. Si cela apparaît dans les journaux
# ATTENTION : overcommit_memory est défini sur 0 ! La sauvegarde en arrière-plan peut échouer dans des conditions de faible mémoire. Pour résoudre ce problème, ajoutez 'vm.overcommit_memory = 1' à /etc/sysctl.conf, puis redémarrez ou exécutez la commande 'sysctl vm.overcommit_memory=1' pour que cela prenne effet.
alors cela vaut la peine de faire comme conseillé. Voir aussi
Mon installation de Discourse est très générique. Après un redémarrage, j’ai obtenu une sauvegarde propre. J’ai donc finalement décidé de faire une installation à partir de zéro. L’installation a échoué avec les mêmes erreurs que celles que j’ai publiées ci-dessus. J’utilise Discourse avec 6 Go de mémoire dans un conteneur LXD depuis quatre ans sans problème. L’utilisation de la mémoire est stable à 1,9 Go. Lors d’une mise à niveau, la mémoire atteint un pic de 5,1 Go. Ma sauvegarde de base de données ne contient que 30 Go de données, mon installation est donc petite par rapport à d’autres. Ma configuration fonctionne sur Ubuntu 22.04. Devrais-je utiliser une autre distribution ?
J’ai peut-être 40 utilisateurs et 150 publications. Le système utilise 1,8 Go de mémoire et je lui ai alloué 6 Go de mémoire. Quelle quantité de mémoire est nécessaire pour qu’une reconstruction fonctionne ? Cela a toujours été suffisant par le passé.
## voici le modèle de conteneur Docker Discourse tout-en-un et autonome
##
## Après avoir apporté des modifications à ce fichier, vous DEVEZ reconstruire
## /var/discourse/launcher rebuild app
##
## SOYEZ *TRÈS* PRUDENT LORS DE LA MODIFICATION !
## LES FICHIERS YAML SONT EXTRÊMEMENT SENSIBLES AUX ERREURS D'ESPACEMENT OU D'ALIGNEMENT !
## visitez http://www.yamllint.com/ pour valider ce fichier si nécessaire
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,
## voir 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: "4096MB"
## peut améliorer les performances de tri, mais ajoute de la consommation de mémoire par connexion
#db_work_mem: "40MB"
## Quelle révision Git ce conteneur doit-il utiliser ? (défaut : tests-passed)
#version: tests-passed
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## Combien de requêtes web concurrentes sont prises en charge ? Dépend de la mémoire et des cœurs de CPU.
## sera défini automatiquement par bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer
UNICORN_WORKERS: 8
## TODO : Le nom de domaine auquel cette instance Discourse répondra
## Requis. Discourse ne fonctionnera pas avec un simple numéro IP.
DISCOURSE_HOSTNAME: discussion.scottibyte.com
## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
## nom d'hôte (-h option) que celui spécifié ci-dessus (défaut "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO : Liste des e-mails délimités par des virgules qui seront faits administrateurs et développeurs
## lors de la première inscription exemple 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'aaaaaa@gmail.com'
## TODO : Le serveur de messagerie SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
# L'adresse, le nom d'utilisateur et le mot de passe SMTP sont requis
# ATTENTION le caractère '#' dans le mot de passe SMTP peut causer des problèmes !
DISCOURSE_SMTP_ADDRESS: smtp.gmail.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: redacted
DISCOURSE_SMTP_PASSWORD: redacted
DISCOURSE_SMTP_ENABLE_START_TLS: true # (optionnel, défaut true)
DISCOURSE_SMTP_DOMAIN: discussion.scottibyte.com
DISCOURSE_NOTIFICATION_EMAIL: noreply@scottibyte.com
## Si vous avez ajouté le modèle Lets Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
LETSENCRYPT_ACCOUNT_EMAIL: me@example.com
## L'adresse CDN http ou https pour cette instance Discourse (configurée pour tirer)
## voir https://meta.discourse.org/t/14857 pour plus de détails
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## La clé d'adresse IP de géolocalisation Maxmind pour la recherche d'adresse IP
## voir https://meta.discourse.org/t/-/137387/23 pour plus de détails
DISCOURSE_MAXMIND_LICENSE_KEY: aaaaaaaa
## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## Les plugins vont ici
## voir https://meta.discourse.org/t/19157 pour plus de détails
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
## Toutes les commandes personnalisées à exécuter après la construction
run:
- exec: echo "Début des commandes personnalisées"
## Si vous souhaitez définir l'adresse e-mail 'De' pour votre première inscription, décommentez et modifiez :
## Après avoir reçu le premier e-mail d'inscription, remettez la ligne en commentaire. Elle ne doit s'exécuter qu'une seule fois.
# - exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "Fin des commandes personnalisées"
J’ai commenté la clé Maxmind dans le YAML. La reconstruction est en cours. D’ailleurs, les notifications par e-mail ont toujours bien fonctionné. Dernièrement, l’e-mail pour le lien de téléchargement de sauvegarde ne fonctionne plus. Je vais simplement dans le dossier et télécharge la sauvegarde via sftp et cela fonctionne et le journal de sauvegarde se termine avec succès. Alors, quel est selon vous le problème avec la clé Maxmind ?
Comme vous pouvez le voir, la reconstruction a fonctionné et le forum est à la dernière version. Une nouvelle sauvegarde a fonctionné depuis l’interface graphique, tout comme la notification de sauvegarde et même le lien de téléchargement de la sauvegarde. Tout fonctionne bien.
Merci, vous êtes le maître ! Excellents commentaires et merveilleuse aide, monsieur.
Donc, même avec une nouvelle clé Maxmind, je n’ai eu aucune chance. Avez-vous des conseils à ce sujet ?
Idéalement, aucun des deux ne le fera, il suffit de confirmer ce qui est exactement cassé avec les étapes de reproduction appropriées afin que nous puissions déposer un rapport et assigner un ingénieur pour le corriger.
Tout ce que j’ai fait, c’est commenter la clé et la reconstruction a parfaitement fonctionné. Avec une clé valide (et même une nouvelle clé), la construction échoue avec les journaux que j’ai fournis.