createdb: erreur : la création de la base de données a échoué : ERREUR : la base de données "discourse" existe déjà

J’ai rencontré une erreur lors de la première installation de Discourse sur mon serveur
Ubuntu 22.04LTS
Dernière version de Discourse sur GitHub
2 Go de mémoire
2 Go de swap

erreur

2023-06-08 01:19:04.972 UTC [55] postgres@template1 ERROR:  database "discourse" already exists
2023-06-08 01:19:04.972 UTC [55] postgres@template1 STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database "discourse" already exists
I, [2023-06-08T01:19:04.977485 #1]  INFO -- : 
I, [2023-06-08T01:19:04.978414 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
2023-06-08 01:19:05.654 UTC [59] postgres@discourse ERROR:  role "discourse" already exists
2023-06-08 01:19:05.654 UTC [59] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role "discourse" already exists

raison

C’est ma première installation sur le serveur, mais j’ai reconstruit l’application plusieurs fois en raison d’autres erreurs comme My server can access github, but docker can't - #2 by whitewaterdeu
Je ne sais pas quand j’ai créé la base de données et comment la corriger

mon app.yml

## ce sont les modèles de conteneur Discourse autonomes tout-en-un
##
## 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 TRÈS TRÈS 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.china.template.yml"
  - "templates/web.template.yml"
  ## Décommentez la ligne suivante pour activer l'écoute IPv6
  #- "templates/web.ipv6.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 les 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: "256MB"

  ## peut améliorer les performances de tri, mais ajoute de la consommation 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 simultanées sont prises en charge ? Dépend de la mémoire et des cœurs CPU.
  ## sera défini automatiquement par bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer
  UNICORN_WORKERS: 4

  ## TODO : Le nom de domaine auquel cette instance Discourse répondra
  ## Requis. Discourse ne fonctionnera pas avec un simple numéro IP.
  DISCOURSE_HOSTNAME: discuss.beginner.center

  ## 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 (par défaut "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO : Liste d'e-mails délimités par des virgules qui seront faits administrateurs et développeurs
  ## lors de la première inscription, par exemple 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'whitewatercn@outlook.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.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: notification@mg.beinner.center
  DISCOURSE_SMTP_PASSWORD: "my smtp password"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (facultatif, par défaut true)
  DISCOURSE_SMTP_DOMAIN: mg.beinner.center
  DISCOURSE_NOTIFICATION_EMAIL: notification@mg.beinner.center

  ## Si vous avez ajouté le modèle Lets Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
  LETSENCRYPT_ACCOUNT_EMAIL: notification@mg.beinner.center

  ## L'adresse CDN http ou https pour cette instance Discourse (configurée pour tirer)
  ## voir https://meta.discourse.org/t/14857 pour les détails
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## La clé d'adresse IP de géolocalisation maxmind pour la recherche d'adresses IP
  ## voir https://meta.discourse.org/t/-/137387/23 pour les détails
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## 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 les 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, re-commentez la ligne. Elle ne doit s'exécuter qu'une seule fois.
  - exec: rails r "SiteSetting.notification_email='notification@mg.beinner.center'"
  - exec: echo "Fin des commandes personnalisées"
root@cvm-3k8ngdw25i225:/var/discourse# 

log complet

C’est étrange. Je ne vois pas comment cela pourrait arriver, car une telle erreur devrait être interceptée lors de la validation du code. Vous pourriez simplement essayer de reconstruire à nouveau.

Je vois que vous avez choisi le tag unsupported-install, mais cela me semble être une installation standard.

2 « J'aime »

Merci pour votre réponse, Jay.
J’ai recherché la ligne d’erreur dans tout le journal, peut-être qu’elle est causée par

2023-06-08 01:19:04.972 UTC [55] postgres@template1 ERROR:  database "discourse" already exists
2023-06-08 01:19:04.972 UTC [55] postgres@template1 STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database "discourse" already exists
I, [2023-06-08T01:19:04.977485 #1]  INFO -- : 
I, [2023-06-08T01:19:04.978414 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
2023-06-08 01:19:05.654 UTC [59] postgres@discourse ERROR:  role "discourse" already exists
2023-06-08 01:19:05.654 UTC [59] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role "discourse" already exists

C’est ma première installation sur le serveur, mais j’ai reconstruit l’application plusieurs fois en cas d’échec avec d’autres erreurs comme Mon serveur peut accéder à GitHub, mais Docker ne le peut pas - #2 par whitewaterdeu

Je ne sais pas quand j’ai créé la base de données ni comment la corriger.

Si vous partez de zéro, vous pouvez
rm -rf shared/standalone
Vous risquez également de rencontrer des problèmes de limite de débit avec Let’s Encrypt. La solution la plus simple est de choisir un nouveau sous-domaine une fois que vous avez résolu vos autres problèmes.

Oh, je vois maintenant le modèle China web commenté. N’en avez-vous pas besoin ?

1 « J'aime »

Avez-vous pu résoudre ce problème ? J’ai une erreur similaire.


I, [2023-07-12T20:27:26.203859 #1]  INFO -- : > su postgres -c 'createdb discourse' || true
2023-07-12 20:27:26.398 UTC [55] postgres@postgres ERROR:  database "discourse" already exists
2023-07-12 20:27:26.398 UTC [55] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database "discourse" already exists
I, [2023-07-12T20:27:26.423480 #1]  INFO -- : 
I, [2023-07-12T20:27:26.423858 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
2023-07-12 20:27:26.599 UTC [59] postgres@discourse ERROR:  role "discourse" already exists
2023-07-12 20:27:26.599 UTC [59] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role "discourse" already exists

Notre script fonctionnait normalement…

Cette erreur n’est pas un problème, vous pouvez l’ignorer.

4 « J'aime »