No se puede reconstruir debido a la actualización fallida de postgres 12

¿Qué guía?
El puerto 2045 me recuerda a algo que no logro identificar exactamente :thinking:

Después de varios fallos en la instalación hace unos meses, lo cambié a 2045, pero esto no es relevante ya que está comentado con #. El problema no está en ese puerto.

Seguí esta guía discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub

Bueno… fue modificado, a veces se nos escapan las cosas :sweat_smile:

Lo entiendo, pero para llegar a 2045 en algún momento, probablemente seguiste algo que te llevó hasta aquí y ahora.
Pienso que seguí el mismo post porque yo también tengo un proxy de 2045 en mi configuración de nginx por alguna razón que no recuerdo…

:crazy_face:

@Benjamin_D no hay ningún puerto 2045 en mi archivo de nginx, puedes verlo desplazándote hacia arriba. Esa línea en app.yml está comentada con #, así que no entiendo por qué me están señalando. El problema definitivamente no viene de ahí; de lo contrario, el mensaje de error lo indicaría.

Puedo eliminar esa línea del archivo app.yml si quieres, pero el resultado sería el mismo que antes.

Creo que cuando lo instalé por primera vez, el contenedor indicó que los puertos 80 o 443 ya estaban en uso, así que quizás leí en algún lado que solo había que agregar un puerto aleatorio. Pero, de nuevo, esa línea está comentada con #, por lo que no debería tenerse en cuenta.

Para nada, solo estamos tratando de seguir tus pasos y comparar nuestra configuración con la tuya

Este error está definitivamente relacionado con una actualización fallida de PostgreSQL.

Consulta el tema de meta para solucionar el problema.

Voy a revisar el tema de la actualización de PostgreSQL. Volveré si encuentro algún otro error.

Así que después de actualizar PostgreSQL de la versión 10 a la 12, sigo teniendo problemas al ejecutar el comando: ./launcher rebuild app

sudo ./launcher rebuild app
fatal: no es un repositorio git (ni en ningún directorio superior): .git
Deteniendo el contenedor antiguo
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && /pups/bin/pups --stdin
Ya está actualizado.
I, [2020-07-13T13:34:21.635079 #1]  INFO -- : Cargando --stdin
I, [2020-07-13T13:34:21.643465 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2020-07-13T13:34:21.713536 #1]  INFO -- : Generando locales (esto puede tardar un poco)...
Generación completada.

I, [2020-07-13T13:34:21.713917 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2020-07-13T13:34:21.720693 #1]  INFO -- :
I, [2020-07-13T13:34:21.721042 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2020-07-13T13:34:21.724919 #1]  INFO -- :
I, [2020-07-13T13:34:21.725387 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2020-07-13T13:34:21.728768 #1]  INFO -- :
I, [2020-07-13T13:34:21.729117 #1]  INFO -- : > rm -fr /var/run/postgresql
I, [2020-07-13T13:34:21.732712 #1]  INFO -- :
I, [2020-07-13T13:34:21.733008 #1]  INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2020-07-13T13:34:21.735981 #1]  INFO -- :
I, [2020-07-13T13:34:21.736200 #1]  INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres ya está en ejecución, detén el contenedor ; exit 1
2020/07/13 13:34:21 socat[27] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): No existe el archivo o directorio
I, [2020-07-13T13:34:21.751266 #1]  INFO -- :
I, [2020-07-13T13:34:21.752242 #1]  INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2020-07-13T13:34:21.757300 #1]  INFO -- :
I, [2020-07-13T13:34:21.757817 #1]  INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2020-07-13T13:34:21.761287 #1]  INFO -- :
I, [2020-07-13T13:34:21.761706 #1]  INFO -- : > mkdir -p /shared/postgres_run/10-main.pg_stat_tmp
I, [2020-07-13T13:34:21.765114 #1]  INFO -- :
I, [2020-07-13T13:34:21.765725 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run/10-main.pg_stat_tmp
I, [2020-07-13T13:34:21.770573 #1]  INFO -- :
I, [2020-07-13T13:34:21.781057 #1]  INFO -- : Archivo > /etc/service/postgres/run  chmod: +x  chown:
I, [2020-07-13T13:34:21.791681 #1]  INFO -- : Archivo > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2020-07-13T13:34:21.800244 #1]  INFO -- : Archivo > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2020-07-13T13:34:21.808363 #1]  INFO -- : Archivo > /root/upgrade_postgres  chmod: +x  chown:
I, [2020-07-13T13:34:21.809170 #1]  INFO -- : > chown -R root /var/lib/postgresql/10/main
chown: no se puede acceder a '/var/lib/postgresql/10/main': No existe el archivo o directorio
I, [2020-07-13T13:34:21.817357 #1]  INFO -- :


FALLÓ
--------------------
Pups::ExecError: chown -R root /var/lib/postgresql/10/main falló con el código de retorno #<Process::Status: pid 42 salida 1>
Ubicación del fallo: /pups/lib/pups/exec_command.rb:112:in `spawn'
Ejecución fallida con los parámetros {"cmd"=>["chown -R root /var/lib/postgresql/10/main", "[ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/10/bin/initdb -D /shared/postgres_data || exit 0", "chown -R postgres:postgres /shared/postgres_data", "chown -R postgres:postgres /var/run/postgresql"]}
3e7af3d49be0616ae52ee03d6ee0867d25e5db96de40d92c7ec7abeded5d3262
** FALLO AL INICIALIZAR ** Por favor, desplázate hacia arriba y busca mensajes de error anteriores, puede haber más de uno.
./discourse-doctor puede ayudar a diagnosticar el problema.

No lo entiendo, me rindo… ;/

¿Qué significa “fatal: no es un repositorio git (ni en ningún directorio superior): .git”?

Además, obtengo lo siguiente:

sudo ./discourse-setup
¡El archivo de configuración containers/app.yml ya existe!

. . . reconfigurando . . .


Guardando el archivo antiguo como app.yml.2020-07-13-153931.bak
Deteniendo el contenedor existente en 5 segundos o presionando Control-C para cancelar.
+ /usr/bin/docker stop -t 10 app
app

Se encontraron 4 GB de memoria y 2 núcleos de CPU físicos
estableciendo db_shared_buffers = 1024MB
estableciendo UNICORN_WORKERS = 4
Parámetros de memoria en containers/app.yml actualizados.

¿Nombre de host para tu Discourse? [cp2077.eu]:

Verificando tu nombre de dominio . . .
ADVERTENCIA: El puerto 443 de la computadora no parece ser accesible usando el nombre de host:    cp2077.eu.
ADVERTENCIA: La conexión a http://cp2077.eu (puerto 80) también falla.

Esto sugiere que cp2077.eu se resuelve a una dirección IP que no alcanza esta
máquina donde estás instalando Discourse.

Lo primero que debes hacer es confirmar que cp2077.eu se resuelve a la dirección IP de este servidor.
Por lo general, esto se hace en el mismo lugar donde compraste el dominio.

Si estás seguro de que la dirección IP se resuelve correctamente, podría ser un problema del firewall.
Una búsqueda web sobre "abrir puertos TU_SERVICIO_EN_LA_NUBE" podría ayudar.

Esta herramienta está diseñada solo para las instalaciones más estándar. Si no puedes resolver
el problema anterior, necesitarás editar containers/app.yml tú mismo y luego escribir:

./launcher rebuild app

El sitio web está en funcionamiento y asegurado usando el puerto 443 (SSL), no entiendo por qué dice que no puede alcanzar el sitio web. No sé qué más hacer. Por favor, ayúdame.

Tienes un proxy inverso, por lo que no puedes usar discourse-setup. Además, es probable que necesites eliminar la plantilla de Let’s Encrypt de tu archivo de configuración.

No sé cuál podría ser tu problema con PostgreSQL.

¿Te refieres a esas líneas sobre proxy en mi archivo nginx?

¿No estás intentando reinstalar Discourse “encima” de una instalación anterior (la de febrero), de ahí el archivo app.yml existente de la captura de pantalla del primer mensaje y la necesidad de actualizar PostgreSQL de la versión 10 a la 12 (lo cual, por el mensaje de error, creo que no hiciste, aunque quizás lo hiciste en tu servidor pero no en tu contenedor de datos, que podría ya no existir; no conozco el estado de tu instalación anterior)?
¿Tienes alguna copia de seguridad o prefieres una instalación nueva?

Creo que @pfaffman se refiere a que, como estás usando un proxy inverso (nginx), el script discourse-setup podría no funcionar (nunca he ejecutado Discourse con un proxy inverso, así que no sé si es el caso). Si defines correctamente el archivo app.yml, también debería funcionar sin necesidad de ejecutar discourse-setup.

Parece que está intentando ejecutar este código en un contenedor que no tiene PostgreSQL 10 (probablemente estás usando la versión 12). Si eso es lo que deseas, y tu plantilla es templates/postgres.template.yml, como indicaste en tu primer mensaje, quizás el repositorio discourse_docker en tu máquina (en /var/discourse) esté desactualizado.

¿Tu instalación de Discourse es reciente o antigua? Actualizar el repositorio podría solucionar ese problema:

cd /var/discourse
git pull

y luego ejecuta el paso de reconstrucción.

También asegúrate de que el contenedor de Discourse sea destruido y vuelto a crear (no solo detenido y reiniciado), para evitar usar un contenedor antiguo (creo que la reconstrucción de Discourse ya debería hacer esto, pero por si acaso…).

Si no funciona y tienes una copia de seguridad, es recomendable intentar instalar en una instancia nueva, como sugirió @Benjamin_D.

@Benjamin_D,

Estoy intentando instalar Discourse para otro dominio “encima” de mi instalación anterior. Para ser preciso, se trata de dos dominios en el mismo servidor. Por favor, perdona mi ignorancia, ¿en qué parte del app.yml puedo encontrar la configuración de PostgreSQL? He revisado mi app.yml y no veo nada relacionado con eso.

Tengo copias de seguridad de los archivos antiguos que tenía; básicamente copié algo de información de mi instalación anterior al nuevo app.yml para el nuevo servidor.

@lucasbasquerotto

Aquí también, por favor, perdona mi ignorancia: ¿se refieren a esta línea cuando mencionan “proxy” de nginx?

location / {
        proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Real-IP $remote_addr;

Antes usaba PostgreSQL 10, pero ayer lo actualicé a la versión 12.

Me gustaría mucho iniciar una nueva instancia en este caso. ¿Cómo puedo eliminar las antiguas para asegurarme de que todo se instale desde cero? Muchas gracias.

Dos instancias de Discourse en el mismo servidor, eso sería la configuración multisitio, ¡una historia completamente diferente! :smile:
Por ahora, creo que lo mejor es asegurarse de tener una copia de seguridad del primer sitio, tenerlo funcionando con la actualización a PostgreSQL 12 y luego intentar la aventura multisitio, para la cual no estoy absolutamente calificado :sweat_smile:

Gracias, Benjamin,

Yo empezaría de cero. Tengo la copia de seguridad del primer sitio, pero fue una prueba y ya no es necesaria. Me gustaría empezar de nuevo desde cero.

¿Cómo elimino el contenedor antiguo y todo lo demás para poder empezar con una hoja en blanco?

¿Has intentado actualizar el repositorio discourse_docker localmente (en /var/discourse) primero? ¿No funcionó?

Sobre el proxy inverso, es porque nginx se encuentra en medio de las solicitudes y las enruta a los servicios correctos (en lugar de exponer el servicio, en este caso Discourse, directamente a internet), por lo que nginx actúa como un proxy inverso y los puertos (80 y 443) expuestos a internet pertenecen al servicio nginx.

Curiosamente, la configuración de Discourse funcionó en febrero en uno de mis dominios, como notaste, Benjamin; te acuerdas, ¿verdad? Ya que también publiqué cosas relacionadas con eso hace un tiempo. Por lo tanto, me sorprende que nunca se haya ejecutado Discourse con nginx. Para ser honesto, funcionó perfectamente bien hasta ayer, cuando intenté instalar Discourse en otro dominio utilizando el mismo servidor.

¿Qué debo buscar exactamente en discourse_docker? Aquí está el contenido de esa carpeta:

discourse_docker$ ls
bin   containers        discourse-setup  launcher  README.md  scripts  templates
cids  discourse-doctor  image            LICENSE   samples    shared

Simplemente ejecuta git pull para actualizar el repositorio (el propio directorio /var/discourse es el repositorio local), como mencioné en una de las publicaciones anteriores:

y después ejecuta el comando de reconstrucción.

Hay otras personas que usan nginx como proxy inverso, pero deben ser muchos menos casos que la instalación estándar en una máquina dedicada exclusivamente a Discourse. Tampoco sé si esto rompe discourse-setup; solo estoy adivinando basándome en tus resultados y dado que el error ocurrió al verificar DNS y puertos abiertos (teniendo en cuenta que no es tu contenedor de Discourse el que utiliza los puertos 80 y 443 en el host).

Vale, así que fui a la carpeta discourse_docker como mencionaste Lucas, copié mi archivo app.yml a los contenedores de esa carpeta y ejecuté el comando ./launcher rebuild app

Pasó algo sin ningún error y creo que está funcionando

No quiero darle mala suerte todavía, ahora voy a intentar configurar la nueva cuenta :smiley: