Configuración de Discourse en servidor local: problemas con PostgreSQL y script de configuración

Hola Comunidad de Discourse,

Soy nuevo en Docker y en tareas de administración de sistemas Linux en general. Estoy intentando convencer a mi empresa para que use Discourse y me pidieron una demostración primero. Así que aquí estoy, intentando ponerlo en funcionamiento en nuestros servidores.
He estado intentando configurar Discourse en un servidor local y me he encontrado con algunos problemas para los que espero recibir ayuda. A continuación, se presenta un resumen de mi configuración y los pasos que he seguido hasta ahora:

Configuración del Sistema:

  • Sistema Operativo: Ubuntu 20.04.6 LTS
  • Versión de Docker: 24.0.5, build 24.0.5-0ubuntu1~20.04.1
  • Versión de Discourse: 3.2

Problema:
Seguí la guía oficial para instalar Discourse en un servidor en la nube (discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub), pero me encuentro con errores en el script discourse-setup relacionados con PostgreSQL.

Pasos Realizados:

  1. Confirmé que PostgreSQL está en ejecución comprobando la lista de procesos.
  2. Verifiqué que PostgreSQL está escuchando en el puerto correcto (5432) y que el archivo de socket Unix existe.
  3. Encontré errores que indican que la base de datos y el usuario “discourse” ya existen, pero cuando lo comprobé usando el comando psql, ni la base de datos ni el usuario aparecían en la lista.

Aquí están los comandos que utilicé:

  • Comprobación de procesos de PostgreSQL: ps aux | grep postgres
  • Comprobación del puerto de escucha de PostgreSQL: sudo netstat -plunt | grep postgres
  • Comprobación del archivo de socket Unix: ls -l /var/run/postgresql/.s.PGSQL.5432
  • Intento de eliminar la base de datos y el usuario “discourse”: su postgres -c 'psql -c \"DROP DATABASE IF EXISTS discourse;\"' y su postgres -c 'psql -c \"DROP USER IF EXISTS discourse;\"'
  • Listado de bases de datos y usuarios: psql -c \"\\l\" y psql -c \"\\du\"

Errores Encontrados:

  • ERROR: database "discourse" already exists
  • ERROR: role "discourse" already exists
  • psql: error: FATAL: role "root" does not exist

A pesar de estos errores, la base de datos y el usuario “discourse” no parecen existir cuando se comprueban directamente en PostgreSQL.
Hay otros errores en el registro, pero creo que estos son los más relevantes, al menos por ahora.

Agradecería enormemente cualquier orientación o sugerencia sobre cómo resolver estos problemas. ¿Alguien más ha encontrado problemas similares, o alguien tiene alguna idea de lo que podría estar saliendo mal?

Gracias de antemano por su ayuda,
Andrea

No necesitas instalar postgres. En una instalación estándar, Discourse tiene su propio postgres en el contenedor. Te recomiendo que desinstales o elimines postgres. ¿Tienes alguna razón para usar un postgres preexistente? ¿Hay algo más ejecutándose en esta máquina?

No creo que esos sean errores, sino solo mensajes de depuración.

¿Qué decía al final del script?

Hola @pfaffman,
gracias por la respuesta.

No, esta máquina está dedicada a Discord, instalé PostgreSQL después de notar esos errores.

Ojalá pudiera adjuntar el registro, pero todavía no puedo.

Aquí está la parte final:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -H -E -u discourse bash -c '\n  set -o errexit\n  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then\n      git remote set-branches --add origin main\n      git remote set-branches origin tests-passed\n      git fetch --depth 1 origin tests-passed\n  else\n      git fetch --tags --prune-tags --prune --force origin\n  fi\n' falló con el retorno #<Process::Status: pid 146 exit 128>
Ubicación del fallo: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec falló con los parámetros {"cd"=>"$home", "hook"=>"code", "cmd"=>["sudo -H -E -u discourse git reset --hard", "sudo -H -E -u discourse git clean -f", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  if [ $(git rev-parse --is-shallow-repository) == \"true\" \n]; then\n      git remote set-branches --add origin main\n      git remote set-branches origin $version\n      git fetch --depth 1 origin $version\n  else\n      git fetch --tags --prune-tags --prune --force origin\n  fi\n'", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  if [[ $(git symbolic-ref --short HEAD) == $version ]] ; then\n      git pull\n  else\n      git -c advice.detachedHead=false checkout $version\n  fi\n'", "sudo -H -E -u discourse git config user.discourse-version $version", "mkdir -p tmp", "chown discourse:www-data tmp", "mkdir -p tmp/pids", "mkdir -p tmp/sockets", "touch tmp/.gitkeep", "mkdir -p                    /shared/log/rails", "bash -c \"touch -a           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log\"", "bash -c \"ln    -s           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log $home/log\"", "bash -c \"mkdir -p           /shared/{uploads,backups}\"", "bash -c \"ln    -s           /shared/{uploads,backups} $home/public\"", "bash -c \"mkdir -p           /shared/tmp/{backups,restores}\"", "bash -c \"ln    -s           /shared/tmp/{backups,restores} $home/tmp\"", "chown -R discourse:www-data /shared/log/rails /shared/uploads /shared/backups /shared/tmp", "[ ! -d public/plugins ] || find public/plugins/ -maxdepth 1 -xtype l -delete"]}
bootstrap falló con el código de salida 128
** FALLÓ EL BOOTSTRAP ** por favor desplácese hacia arriba y busque mensajes de error anteriores, puede haber más de uno.

Ahora intentaré desinstalar PostgreSQL.

Gracias,
Andrea

Te has quedado sin memoria. Necesitas añadir swap y/o más RAM.

¿Qué te da

free -h
?

1 me gusta

Tengo aproximadamente 7 GB disponibles

              total        used        free      shared  buff/cache   available
Mem:          7.8Gi       319Mi       599Mi        13Mi       6.9Gi       7.1Gi
Swap:         975Mi       2.0Mi       973Mi

La guía sugiere ~2 GB.

La configuración predeterminada de 1 GB de RAM funciona bien para comunidades pequeñas de Discourse. Recomendamos 2 GB de RAM para comunidades más grandes.

¿Me estoy perdiendo algo?

Hmm. Eso es extraño. Últimamente se han notificado algunos problemas extraños con los requisitos de RAM. Podrías intentar de nuevo un par de veces. Algunos informes dicen que falla intermitentemente.

Editar: lo siento. 127 es RAM. 128 es desconocido.

¿Estás haciendo una instalación estándar desde cero ejecutando discourse-setup? (lo dices en el OP)

¿Estás detrás de algún tipo de firewall que pueda impedir que el servidor acceda a GitHub y a otros repositorios?

Sí, correcto, estoy siguiendo la guía de GitHub.
Si el problema no es Postgre sino el último mensaje, aquí está el punto en el registro donde falla

  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
'
fatal: unable to access 'https://github.com/discourse/discourse.git/': server certificate verification failed. CAfile: none CRLfile: 
none

Parece que no puedo conectarme a GitHub correctamente, a pesar de que puedo clonar el repositorio desde esa máquina.

Es un problema de red de Docker. ¿Cómo instalaste Docker? Considera desinstalarlo e intentar de otra manera.

¿Tienes un firewall en el sistema operativo o en tu red? También podría ser un problema de DNS. Siempre es DNS, como dicen.

Sé que no tenemos un firewall en el sistema operativo en este momento, pero para los detalles de la instalación de Docker necesito hablar con TI.
¿Tienes alguna idea de qué problema de DNS podríamos estar encontrando? ¿Alguna sección del registro o mensajes de depuración que puedan ayudar (todavía no puedo adjuntar archivos)?

@pfaffman descubrí que también tenía los detalles en el historial de mi shell.

   63  sudo apt install docker.io
   64  sudo apt remove containerd runc
   65  sudo apt remove containerd
   66  curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
   67  echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
   68  sudo apt update
   69  sudo apt install docker-ce
   70  sudo apt upgrade
   71  sudo apt install docker.io

No creo que puedas instalar docker-ce y docker.io al mismo tiempo. Quizás elimina ambos y luego instala solo uno de ellos.

Normalmente uso https://get.docker.com/. Lo que haría es obtener una nueva VM y usar solo eso.