Createdb: error: la creación de la base de datos falló: ERROR: la base de datos "discourse" ya existe

Me encontré con un error al instalar Discourse por primera vez en mi servidor
Ubuntu 22.04LTS
Versión más reciente de Discourse en GitHub
2 GB de memoria
2 GB de intercambio

error


2023-06-08 01:19:04.972 UTC [55] postgres@template1 ERROR: la base de datos "discourse" ya existe
2023-06-08 01:19:04.972 UTC [55] postgres@template1 STATEMENT: CREATE DATABASE discourse;
createdb: error: la creación de la base de datos falló: ERROR: la base de datos "discourse" ya existe
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: el rol "discourse" ya existe
2023-06-08 01:19:05.654 UTC [59] postgres@discourse STATEMENT: create user discourse;
ERROR: el rol "discourse" ya existe

razón

Es mi primera instalación en el servidor, pero he reconstruido la aplicación muchas veces debido a fallos con otros errores como My server can access github, but docker can't - #2 by whitewaterdeu
No sé cuándo creé la base de datos y cómo solucionarlo.

mi app.yml

root@cvm-3k8ngdw25i225:/var/discourse# cat containers/app.yml
## esta es la plantilla del contenedor Docker todo en uno y autónomo de Discourse
##
## Después de realizar cambios en este archivo, DEBE reconstruir
## /var/discourse/launcher rebuild app
##
## ¡TENGA MUCHO CUIDADO AL EDITAR!
## ¡LOS ARCHIVOS YAML SON MUY, MUY SENSIBLES A ERRORES DE ESPACIO EN BLANCO O ALINEACIÓN!
## visite http://www.yamllint.com/ para validar este archivo según sea necesario

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  # - "templates/web.china.template.yml"
  - "templates/web.template.yml"
  ## Descomente la siguiente línea para habilitar el oyente IPv6
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## Descomente estas dos líneas si desea agregar Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## ¿qué puertos TCP/IP debe exponer este contenedor?
## Si desea que Discourse comparta un puerto con otro servidor web como Apache o nginx,
## consulte https://meta.discourse.org/t/17247 para obtener detalles
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Establezca db_shared_buffers en un máximo del 25% de la memoria total.
  ## se establecerá automáticamente mediante bootstrap según la RAM detectada, o puede anularlo
  db_shared_buffers: "256MB"

  ## puede mejorar el rendimiento de la clasificación, pero aumenta el uso de memoria por conexión
  #db_work_mem: "40MB"

  ## ¿Qué revisión de Git debe usar este contenedor? (predeterminado: 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

  ## ¿Cuántas solicitudes web concurrentes se admiten? Depende de la memoria y los núcleos de CPU.
  ## se establecerá automáticamente mediante bootstrap según las CPU detectadas, o puede anularlo
  UNICORN_WORKERS: 4

  ## TODO: El nombre de dominio al que responderá esta instancia de Discourse
  ## Requerido. Discourse no funcionará con un número IP simple.
  DISCOURSE_HOSTNAME: discuss.beginner.center

  ## Descomente si desea que el contenedor se inicie con el mismo
  ## nombre de host (-h option) que se especifica arriba (predeterminado "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Lista de correos electrónicos separados por comas que se convertirán en administradores y desarrolladores
  ## en el registro inicial, por ejemplo, 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'whitewatercn@outlook.com'

  ## TODO: El servidor de correo SMTP utilizado para validar nuevas cuentas y enviar notificaciones
  # Se requieren la DIRECCIÓN SMTP, el nombre de usuario y la contraseña
  # ADVERTENCIA: el carácter '#' en la contraseña SMTP puede causar problemas.
  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           # (opcional, predeterminado true)
  DISCOURSE_SMTP_DOMAIN: mg.beinner.center
  DISCOURSE_NOTIFICATION_EMAIL: notification@mg.beinner.center

  ## Si agregó la plantilla Lets Encrypt, descomente a continuación para obtener un certificado SSL gratuito
  LETSENCRYPT_ACCOUNT_EMAIL: notification@mg.beinner.center

  ## La dirección CDN http o https para esta instancia de Discourse (configurada para extraer)
  ## consulte https://meta.discourse.org/t/14857 para obtener detalles
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## La clave de dirección IP de geolocalización maxmind para la búsqueda de direcciones IP
  ## consulte https://meta.discourse.org/t/-/137387/23 para obtener detalles
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456
## El contenedor Docker no tiene estado; todos los datos se almacenan en /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Los plugins van aquí
## consulte https://meta.discourse.org/t/19157 para obtener detalles
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Cualquier comando personalizado para ejecutar después de la compilación
run:
  - exec: echo "Beginning of custom commands"
  ## Si desea establecer la dirección de correo electrónico 'From' para su primer registro, descomente y cambie:
  ## Después de recibir el primer correo electrónico de registro, vuelva a comentar la línea. Solo necesita ejecutarse una vez.
  - exec: rails r "SiteSetting.notification_email='notification@mg.beinner.center'"
  - exec: echo "End of custom commands"root@cvm-3k8ngdw25i225:/var/discourse#

log completo

Eso es extraño. No veo cómo podría suceder eso, ya que un error así debería haberse detectado cuando se envió el código. Quizás solo intentes reconstruir de nuevo.

Veo que tienes la etiqueta unsupported-install seleccionada, pero esto me parece una instalación estándar.

2 Me gusta

gracias por tu respuesta, Jay
He buscado la línea de error en todo el registro, tal vez sea causada por

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

es mi primera instalación en el servidor, pero he reconstruido la aplicación muchas veces por fallos con otros errores como Mi servidor puede acceder a GitHub, pero Docker no - #2 por whitewaterdeu

no sé cuándo creé la base de datos y cómo solucionarlo.

Si estás empezando de nuevo, puedes
rm -rf shared/standalone
También es probable que te encuentres con problemas de límite de velocidad de Let’s Encrypt. La solución más fácil es elegir un subdominio nuevo cuando hayas resuelto tus otros problemas.
Oh, ahora veo la plantilla web de China comentada. ¿No la necesitas?

1 me gusta

¿Pudiste resolver este problema? Tengo un error similar.


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

Nuestro script estaba funcionando normalmente…

Este error no es un problema, puedes ignorarlo.

4 Me gusta