Erreur fatale lors de la tentative de démarrage de Docker (Oracle VM)

Bonjour à tous – nouveau sur Discourse (ça a l’air génial !) et bien que j’aie quelques compétences techniques générales, je me considérerais comme un débutant dans le monde des conteneurs Docker et des machines virtuelles Linux.

Je dispose d’une machine virtuelle Oracle gratuite exécutant Oracle Linux. J’ai suivi les étapes décrites ici (https://blogs.oracle.com/developers/install-run-discourse-for-free-in-the-oracle-cloud) et j’exécute actuellement l’étape ./discourse-setup.

Je reçois systématiquement le message d’erreur ci-dessous… J’ai essayé d’exécuter discourse doctor, mais sans succès. J’espère que quelqu’un pourra m’orienter dans la bonne direction quant à ce qui pourrait se passer. Merci beaucoup par avance ! - Tim

[2021-06-11T04:09:29.733935 #1]  INFO -- : > 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
I, [2021-06-11T04:09:29.735773 #1]  INFO -- : > sleep 5
2021-06-11 04:09:30.320 GMT [54] LOG:  0 8kB est en dehors de la plage valide pour le paramètre "shared_buffers" (16 .. 1073741823)
2021-06-11 04:09:30.322 UTC [54] FATAL:  le fichier de configuration "/etc/postgresql/13/main/postgresql.conf" contient des erreurs
I, [2021-06-11T04:09:34.739847 #1]  INFO -- : 
I, [2021-06-11T04:09:34.740097 #1]  INFO -- : > su postgres -c 'createdb discourse' || true
createdb: erreur : impossible de se connecter à la base de données template1 : impossible de se connecter au serveur : Aucun fichier ou répertoire de ce type
	Le serveur est-il en cours d'exécution localement et accepte-t-il
	les connexions sur le socket de domaine Unix "/var/run/postgresql/.s.PGSQL.5432" ?
I, [2021-06-11T04:09:34.860266 #1]  INFO -- : 
I, [2021-06-11T04:09:34.860745 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
psql: erreur : impossible de se connecter au serveur : Aucun fichier ou répertoire de ce type
	Le serveur est-il en cours d'exécution localement et accepte-t-il
	les connexions sur le socket de domaine Unix "/var/run/postgresql/.s.PGSQL.5432" ?
I, [2021-06-11T04:09:35.023426 #1]  INFO -- : 
I, [2021-06-11T04:09:35.023810 #1]  INFO -- : > su postgres -c 'psql discourse -c "grant all privileges on database discourse to discourse;"' || true
psql: erreur : impossible de se connecter au serveur : Aucun fichier ou répertoire de ce type
	Le serveur est-il en cours d'exécution localement et accepte-t-il
	les connexions sur le socket de domaine Unix "/var/run/postgresql/.s.PGSQL.5432" ?
I, [2021-06-11T04:09:35.137806 #1]  INFO -- : 
I, [2021-06-11T04:09:35.138325 #1]  INFO -- : > su postgres -c 'psql discourse -c "alter schema public owner to discourse;"'
psql: erreur : impossible de se connecter au serveur : Aucun fichier ou répertoire de ce type
	Le serveur est-il en cours d'exécution localement et accepte-t-il
	les connexions sur le socket de domaine Unix "/var/run/postgresql/.s.PGSQL.5432" ?
I, [2021-06-11T04:09:35.257190 #1]  INFO -- : 
I, [2021-06-11T04:09:35.257476 #1]  INFO -- : Terminaison des processus asynchrones


ÉCHEC
--------------------
Pups::ExecError : la commande su postgres -c 'psql discourse -c "alter schema public owner to discourse;"' a échoué avec le statut de retour #<Process::Status: pid 80 exit 2>
Emplacement de l'échec : /pups/lib/pups/exec_command.rb:112:in `spawn'
échec de l'exécution avec les paramètres "su postgres -c 'psql $db_name -c \\\"alter schema public owner to $db_user;\\\"'"
14ef6216494c846091ea6ce48143e2f25018b9d2579b6d4d0021d605f7f5e145
** ÉCHEC DU BOOTSTRAP ** veuillez faire défiler vers le haut et rechercher les messages d'erreur précédents, il peut y en avoir plus d'un.

Salut @Meathead40,
Je rencontre probablement le même problème.

J’avais réussi à installer Discourse sur Oracle Free en juin. J’ai maintenant relancé le script d’installation pour modifier quelques paramètres liés aux paramètres de messagerie.
La première erreur que je parviens à remonter dans le journal est : FATAL: configuration file \"/etc/postgresql/13/main/postgresql.conf\" contains errors,
mais dans mon cas, ce fichier n’existe pas. De plus, le service PostgreSQL n’est pas en cours d’exécution (il n’est même pas disponible en tant que service).

As-tu réussi à résoudre ce problème ? Quelqu’un d’autre a-t-il rencontré la même chose ?

Cordialement,
Stef

Peux-tu partager la sortie de free -m --si ?

Avez-vous regardé à l’intérieur du conteneur ? Avez-vous également vu l’entrée de journal indiquant que shared_buffers était trop petit ?

Dans mon cas :

# /var/discourse/launcher enter app
# egrep shared_buffers /etc/postgresql/13/main/postgresql.conf
shared_buffers = 128MB
exit

Bonjour @Falco, voici la sortie de la commande :
total utilisé libre partagé cache/buffer disponible
Mémoire : 703 359 86 7 257 207
Échange : 8388 246 8142

Bonjour @Ed_S, je reçois le message suivant :

/var/discourse/launcher enter app
Impossible de se connecter au démon Docker — vérifiez qu'il est en cours d'exécution et que vous y avez accès

Vous devriez voir le même fichier ici :
/var/discourse/shared/standalone/postgres_data/postgresql.conf

Idéalement, juste avant l’entrée de journal indiquant une erreur de configuration, vous verrez une ligne décrivant l’erreur.

Vous trouverez peut-être le journal ici :
/var/discourse/shared/standalone/log/var-log/postgres/current

Merci pour les suggestions. J’ai réussi à rassembler plus d’informations.
Voici ce qui figure dans le journal, autour du moment de l’erreur (les messages précédents datent de plusieurs jours avant) :

2021-08-02 13:33:16.980 UTC [2419] LOG:  received smart shutdown request  
2021-08-02 13:33:28.273 UTC [2419] LOG:  background worker "logical replication launcher" (PID 2442) exited with exit code 1  
2021-08-02 13:33:28.344 UTC [2437] LOG:  shutting down  
2021-08-02 13:33:28.552 UTC [2419] LOG:  database system is shut down  

J’ai également obtenu la configuration des tampons partagés :

shared_buffers = 128MB     # min 128kB  
#wal_buffers = -1            # min 32kB, -1 sets based on shared_buffers  

Hmm, pouvons-nous revenir en arrière un peu : là où vous voyez cette erreur FATAL, quelles sont les quelques lignes qui la précèdent ?

Bien sûr, et merci encore pour votre soutien.

Je lance la configuration sur une installation existante afin de modifier quelques paramètres de configuration. La première partie du script détecte ce qui suit :

sudo ./discourse-setup 
which: no docker.io in (/sbin:/bin:/usr/sbin:/usr/bin)
which: no docker.io in (/sbin:/bin:/usr/sbin:/usr/bin)
The configuration file containers/app.yml already exists!

. . . reconfiguring . . .


Saving old file as app.yml.2021-08-03-102829.bak
Stopping existing container in 5 seconds or Control-C to cancel.
+ /bin/docker stop -t 30 app
app

Found 0GB of memory and 1 physical CPU cores
setting db_shared_buffers = 0MB
setting UNICORN_WORKERS = 0
containers/app.yml memory parameters updated.

Ensuite, je passe tous les paramètres de configuration et je procède enfin à la construction… voici l’indice que vous recherchez :

2021-08-03 10:30:37.709 GMT [55] LOG:  0 8kB is outside the valid range for parameter "shared_buffers" (16 .. 1073741823)
2021-08-03 10:30:37.713 UTC [55] FATAL:  configuration file "/etc/postgresql/13/main/postgresql.conf" contains errors

Ce n’est pas bon signe ! Ce chiffre devrait provenir directement de la sortie de :

free -g --si | awk ' /Mem:/  {print $2} '

Cela indique 703 Mo, ce qui est (officiellement) trop faible pour que Discourse fonctionne correctement. Si vous souhaitez prendre des risques (et sans aucun support), vous pouvez modifier le nombre magique 990 dans :

Je pense que vous avez besoin d’une instance plus grande avec plus de RAM.

oui. Jusqu’à présent, l’instance fonctionnait correctement et avait été installée avec la vérification de la mémoire désactivée. Cela semble lié à ce sujet : Discourse won't install because I have 960MB of ram and not 1GB - Discourse System Administration - Unix Linux Community

Le fichier de configuration a toujours la vérification désactivée, mais je suppose qu’elle est remplacée ? Je vais essayer de modifier la valeur comme vous l’avez indiqué et je vous dirai ce qui se passe.

Hmm, cela dépend beaucoup de ce que vous avez fait là.

J’ai réussi à terminer la configuration et la reconstruction. Les étapes ont été les suivantes :

  • commenter la vérification de la mémoire (#check_disk_and_memory) dans /var/discourse/discourse-setup (je ne suis pas sûr que cela soit nécessaire)
  • exécuter la commande sudo ./discourse-setup depuis le dossier /var/discourse (cela générera le fichier /var/discourse/containers/app.yml et tentera de poursuivre la construction, qui échouera comme décrit ci-dessus)
  • modifier le fichier app.yml pour définir explicitement db_shared_buffers: “128MB” et UNICORN_WORKERS: 1
  • lancer une reconstruction avec sudo ./launcher rebuild app (depuis le dossier /var/discourse)

Je sais que cela se situe à la limite des exigences, mais je surveillerai de près le comportement de l’instance.

merci pour le soutien

Content heureux que tout soit résolu. Dans le fil lié et dans le fil ici auquel il fait référence, il me semble bien préférable de remplacer le nombre « magie d’oubli » de 990 par celui qui correspond à votre propre système. « Désactiver la vérification de la mémoire » cause en réalité des problèmes.

Il est clair pour moi que l’équipe de Discourse doit définir une limite inférieure d’une certaine valeur, pour tracer une ligne entre les configurations prises en charge et celles qui ne le sont pas, et qu’ils l’ont officiellement fixée à 1 Go, avec une assouplissement à 990. Mais 960 me semble assez proche de 990, et découle de raisons similaires. D’un autre côté, 703 paraît très différent !

Salut Ed,
Je suis d’accord, je vais changer le numéro. Je suis assez surpris par une mémoire aussi faible. Les spécifications de l’instance Oracle (niveau gratuit) indiquent 1 Go de mémoire, mais la version gratuite n’en offre que 60 à 70 %. Je suis un peu confus et ne connais pas la raison de cela.

Cela a déjà été mentionné : je pense qu’Oracle joue un peu, vous offrant bien moins que 1 Go qu’ils arrondissent à la hausse dans leur description :

Édition : voir le blog lié :

Peut-être l’instruction la plus importante omise est d’éviter l’image serveur par défaut. Discourse nécessite 1 Go de RAM (ou à peu près), et l’image Oracle Linux ne laisse pas assez de mémoire pour une raison inconnue. Je ne sais pas si CentOS fonctionnera, mais l’image Ubuntu convient. Assurez-vous simplement de choisir l’installation complète2 plutôt que l’installation « Minimale ».

Je soupçonne que la version par défaut d’Oracle Linux inclut un tas d’éléments inutiles pour installer Discourse. On peut supposer que son cas d’usage principal est l’hébergement de serveurs de bases de données Oracle. :wink: Heureusement, l’image Ubuntu fonctionne parfaitement. Mon site de test/hôte de commentaires est toujours opérationnel. (Pas beaucoup d’activité, cependant.)