Mi servidor se ejecuta en una máquina virtual alojada por uno de los principales proveedores de servicios en la nube.
Instalé correctamente discourse en ella y ha estado funcionando sin problemas durante el último mes.
Hoy, decidí cambiar las especificaciones de mi VM a su configuración original (*) y reiniciar. Al iniciar, aunque todo lo demás en mi servidor funciona correctamente, obtengo un error 502 Bad Gateway al intentar acceder al foro de Discourse. Pensando que la instancia de Docker no se había iniciado automáticamente, me conecté por SSH a mi servidor y ejecuté ./launcher start app, pero recibí un mensaje indicando que había espacio insuficiente restante (5 GB disponibles), así que ejecuté df -h, lo cual me indica que en realidad tengo 14 GB disponibles. Entonces, ejecuté ./launcher start app de nuevo, pero esta vez obtuve una advertencia de que Docker iba a descargar cosas y que fuera paciente. Después de cierto procesamiento, recibí el mensaje Nothing to do, your container has already started!. Sin embargo, mis intentos de acceder al foro siguen devolviendo 502 Bad Gateway.
Después de consultar este foro, decidí ejecutar ./launcher rebuild app y obtuve los siguientes errores, relacionados con PostgreSQL:
user@host:[16:48]:/var/discourse# ./launcher rebuild app
Asegurando que el lanzador esté actualizado
Obteniendo origen
El lanzador está actualizado
Deteniendo el contenedor anterior
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && /pups/bin/pups --stdin
Ya está actualizado.
I, [2020-07-01T07:19:42.821347 #1] INFO -- : Cargando --stdin
I, [2020-07-01T07:19:42.831806 #1] INFO -- : > locale-gen $LANG && update-locale
I, [2020-07-01T07:19:42.879007 #1] INFO -- : Generando configuraciones regionales (esto podría tomar un tiempo)...
Generación completada.
I, [2020-07-01T07:19:42.879431 #1] INFO -- : > mkdir -p /shared/postgres_run
I, [2020-07-01T07:19:42.885054 #1] INFO -- :
I, [2020-07-01T07:19:42.885734 #1] INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2020-07-01T07:19:42.891657 #1] INFO -- :
I, [2020-07-01T07:19:42.892269 #1] INFO -- : > chmod 775 /shared/postgres_run
I, [2020-07-01T07:19:42.898103 #1] INFO -- :
I, [2020-07-01T07:19:42.898942 #1] INFO -- : > rm -fr /var/run/postgresql
I, [2020-07-01T07:19:42.905607 #1] INFO -- :
I, [2020-07-01T07:19:42.906463 #1] INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2020-07-01T07:19:42.912617 #1] INFO -- :
I, [2020-07-01T07:19:42.913233 #1] INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres ya se está ejecutando, detener contenedor ; exit 1
2020/07/01 07:19:42 socat[26] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): No existe tal archivo o directorio
I, [2020-07-01T07:19:42.925688 #1] INFO -- :
I, [2020-07-01T07:19:42.926081 #1] INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2020-07-01T07:19:42.931174 #1] INFO -- :
I, [2020-07-01T07:19:42.931649 #1] INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2020-07-01T07:19:42.938154 #1] INFO -- :
I, [2020-07-01T07:19:42.938850 #1] INFO -- : > mkdir -p /shared/postgres_run/12-main.pg_stat_tmp
I, [2020-07-01T07:19:42.943575 #1] INFO -- :
I, [2020-07-01T07:19:42.944331 #1] INFO -- : > chown postgres:postgres /shared/postgres_run/12-main.pg_stat_tmp
I, [2020-07-01T07:19:42.949159 #1] INFO -- :
I, [2020-07-01T07:19:42.961190 #1] INFO -- : Archivo > /etc/service/postgres/run chmod: +x chown:
I, [2020-07-01T07:19:42.973345 #1] INFO -- : Archivo > /etc/service/postgres/log/run chmod: +x chown:
I, [2020-07-01T07:19:42.983929 #1] INFO -- : Archivo > /etc/runit/3.d/99-postgres chmod: +x chown:
I, [2020-07-01T07:19:42.994843 #1] INFO -- : Archivo > /root/upgrade_postgres chmod: +x chown:
I, [2020-07-01T07:19:42.995487 #1] INFO -- : > chown -R root /var/lib/postgresql/12/main
I, [2020-07-01T07:19:44.012812 #1] INFO -- :
I, [2020-07-01T07:19:44.013656 #1] INFO -- : > [ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/12/bin/initdb -D /shared/postgres_data || exit 0
I, [2020-07-01T07:19:44.019545 #1] INFO -- :
I, [2020-07-01T07:19:44.019872 #1] INFO -- : > chown -R postgres:postgres /shared/postgres_data
I, [2020-07-01T07:19:44.064432 #1] INFO -- :
I, [2020-07-01T07:19:44.065186 #1] INFO -- : > chown -R postgres:postgres /var/run/postgresql
I, [2020-07-01T07:19:44.071385 #1] INFO -- :
I, [2020-07-01T07:19:44.072196 #1] INFO -- : > /root/upgrade_postgres
I, [2020-07-01T07:19:44.084004 #1] INFO -- :
I, [2020-07-01T07:19:44.084662 #1] INFO -- : > rm /root/upgrade_postgres
I, [2020-07-01T07:19:44.090399 #1] INFO -- :
I, [2020-07-01T07:19:44.092280 #1] INFO -- : Reemplazando data_directory = '/var/lib/postgresql/12/main' por data_directory = '/shared/postgres_data' en /etc/postgresql/12/main/postgresql.conf
I, [2020-07-01T07:19:44.093969 #1] INFO -- : Reemplazando (?-mix:#?listen_addresses *=.*) por listen_addresses = '*' en /etc/postgresql/12/main/postgresql.conf
I, [2020-07-01T07:19:44.095204 #1] INFO -- : Reemplazando (?-mix:#?synchronous_commit *=.*) por synchronous_commit = $db_synchronous_commit en /etc/postgresql/12/main/postgresql.conf
I, [2020-07-01T07:19:44.095937 #1] INFO -- : Reemplazando (?-mix:#?shared_buffers *=.*) por shared_buffers = $db_shared_buffers en /etc/postgresql/12/main/postgresql.conf
I, [2020-07-01T07:19:44.096695 #1] INFO -- : Reemplazando (?-mix:#?work_mem *=.*) por work_mem = $db_work_mem en /etc/postgresql/12/main/postgresql.conf
I, [2020-07-01T07:19:44.097554 #1] INFO -- : Reemplazando (?-mix:#?default_text_search_config *=.*) por default_text_search_config = '$db_default_text_search_config' en /etc/postgresql/12/main/postgresql.conf
I, [2020-07-01T07:19:44.101971 #1] INFO -- : > install -d -m 0755 -o postgres -g postgres /shared/postgres_backup
I, [2020-07-01T07:19:44.112672 #1] INFO -- :
I, [2020-07-01T07:19:44.113831 #1] INFO -- : Reemplazando (?-mix:#?max_wal_senders *=.*) por max_wal_senders = $db_max_wal_senders en /etc/postgresql/12/main/postgresql.conf
I, [2020-07-01T07:19:44.114973 #1] INFO -- : Reemplazando (?-mix:#?wal_level *=.*) por wal_level = $db_wal_level en /etc/postgresql/12/main/postgresql.conf
I, [2020-07-01T07:19:44.116047 #1] INFO -- : Reemplazando (?-mix:#?checkpoint_segments *=.*) por checkpoint_segments = $db_checkpoint_segments en /etc/postgresql/12/main/postgresql.conf
I, [2020-07-01T07:19:44.117033 #1] INFO -- : Reemplazando (?-mix:#?logging_collector *=.*) por logging_collector = $db_logging_collector en /etc/postgresql/12/main/postgresql.conf
I, [2020-07-01T07:19:44.118051 #1] INFO -- : Reemplazando (?-mix:#?log_min_duration_statement *=.*) por log_min_duration_statement = $db_log_min_duration_statement en /etc/postgresql/12/main/postgresql.conf
I, [2020-07-01T07:19:44.119352 #1] INFO -- : Reemplazando (?-mix:^#local +replication +postgres +peer$) por local replication postgres peer en /etc/postgresql/12/main/pg_hba.conf
I, [2020-07-01T07:19:44.120299 #1] INFO -- : Reemplazando (?-mix:^host.*all.*all.*127.*$) por host all all 0.0.0.0/0 md5 en /etc/postgresql/12/main/pg_hba.conf
I, [2020-07-01T07:19:44.121038 #1] INFO -- : > HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/12/bin/postmaster -D /etc/postgresql/12/main
I, [2020-07-01T07:19:44.126334 #1] INFO -- : > sleep 5
2020-07-01 07:19:44.157 UTC [49] LOG: iniciando PostgreSQL 12.2 (Debian 12.2-2.pgdg100+1) en x86_64-pc-linux-gnu, compilado por gcc (Debian 8.3.0-6) 8.3.0, 64-bit
2020-07-01 07:19:44.158 UTC [49] LOG: escuchando en dirección IPv4 "0.0.0.0", puerto 5432
2020-07-01 07:19:44.158 UTC [49] LOG: escuchando en dirección IPv6 "::", puerto 5432
2020-07-01 07:19:44.161 UTC [49] LOG: escuchando en socket Unix "/var/run/postgresql/.s.PGSQL.5432"
2020-07-01 07:19:44.162 UTC [49] FATAL: no se pudo mapear memoria compartida anónima: No se puede asignar memoria
2020-07-01 07:19:44.162 UTC [49] HINT: Este error generalmente significa que la solicitud de un segmento de memoria compartida de PostgreSQL excedió la memoria disponible, el espacio de intercambio o las páginas grandes. Para reducir el tamaño de la solicitud (actualmente 4423172096 bytes), reduzca el uso de memoria compartida de PostgreSQL, quizás reduciendo shared_buffers o max_connections.
2020-07-01 07:19:44.162 UTC [49] LOG: el sistema de base de datos se ha apagado
I, [2020-07-01T07:19:49.141762 #1] INFO -- :
I, [2020-07-01T07:19:49.142221 #1] INFO -- : > su postgres -c 'createdb discourse' || true
createdb: error: no se pudo conectar a la base de datos template1: no se pudo conectar al servidor: No existe tal archivo o directorio
¿Está el servidor ejecutándose localmente y aceptando
conexiones en el socket de dominio Unix "/var/run/postgresql/.s.PGSQL.5432"?
I, [2020-07-01T07:19:49.227852 #1] INFO -- :
I, [2020-07-01T07:19:49.228226 #1] INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
psql: error: no se pudo conectar al servidor: no se pudo conectar al servidor: No existe tal archivo o directorio
¿Está el servidor ejecutándose localmente y aceptando
conexiones en el socket de dominio Unix "/var/run/postgresql/.s.PGSQL.5432"?
I, [2020-07-01T07:19:49.330486 #1] INFO -- :
I, [2020-07-01T07:19:49.330822 #1] INFO -- : > su postgres -c 'psql discourse -c "grant all privileges on database discourse to discourse;"' || true
psql: error: no se pudo conectar al servidor: no se pudo conectar al servidor: No existe tal archivo o directorio
¿Está el servidor ejecutándose localmente y aceptando
conexiones en el socket de dominio Unix "/var/run/postgresql/.s.PGSQL.5432"?
I, [2020-07-01T07:19:49.425970 #1] INFO -- :
I, [2020-07-01T07:19:49.426356 #1] INFO -- : > su postgres -c 'psql discourse -c "alter schema public owner to discourse;"'
psql: error: no se pudo conectar al servidor: no se pudo conectar al servidor: No existe tal archivo o directorio
¿Está el servidor ejecutándose localmente y aceptando
conexiones en el socket de dominio Unix "/var/run/postgresql/.s.PGSQL.5432"?
I, [2020-07-01T07:19:49.506638 #1] INFO -- :
I, [2020-07-01T07:19:49.507202 #1] INFO -- : Terminando procesos asíncronos
FALLO
--------------------
Pups::ExecError: su postgres -c 'psql discourse -c "alter schema public owner to discourse;"' falló con retorno #<Process::Status: pid 75 exit 2>
Ubicación del fallo: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec falló con los parámetros "su postgres -c 'psql $db_name -c \"alter schema public owner to $db_user;\"'"
eb41679f76cd749ccd8c84a7543365d093619b80df6fc6750b9349fb63565fa1
** FALLO AL INICIAR ** por favor, desplácese hacia arriba y busque mensajes de error anteriores, puede haber más de uno.
./discourse-doctor puede ayudar a diagnosticar el problema.
user@host:[17:19]:/var/discourse#
Curiosamente, a pesar de los errores anteriores, ejecutar ./launcher start app no produce errores:
iniciando contenedor existente
+ /usr/bin/docker start app
app
Con la instancia en ejecución, intenté usar ./launcher enter app para entrar en el contenedor. (En mi humilde opinión, las herramientas disponibles en el contenedor son muy pobres (sí, soy usuario de nano y me gusta tener varios alias mapeados; por ejemplo, ll). No puedo encontrar la ruta física a las carpetas dentro de la instancia de Docker (ya que me gustaría descargarlas usando un cliente FTP).
En /var/log/nginx/error.log tengo la siguiente entrada de error cada vez que actualizo mi navegador:
2020/07/01 07:44:16 [error] 646#646: *3 connect() falló (111: Conexión rechazada) al conectar con el upstream, cliente: xxx.xx.0.1, servidor: _, solicitud: "GET / HTTP/1.1", upstream: "http://127.0.0.1:3000/", host: "discourse.miDominio.com"
¿Qué podría ser la causa de mi problema? ¿Por qué PostgreSQL de repente no funciona?
(*) Una semana después de instalar Discourse, actualicé mi servidor con más CPUs y memoria. Necesitaba hacer esto para ejecutar una conferencia de video que organicé. Una vez terminada la conferencia, volví a mi configuración normal. Tenga en cuenta que no cambié los tamaños de disco en ningún momento durante los cambios de especificaciones.