Después de actualizar a través de la interfaz web, ya no puedo acceder a mi sitio. No he cambiado nada, solo hice clic en el botón de actualización. Los errores sugieren problemas de conexión con Redis. He buscado mucho pero aún no he encontrado nada que me ayude. production.log está vacío. Se está ejecutando en Ubuntu en Digital Ocean. Ha funcionado sin problemas durante 18 meses, sin errores excepto cuando me quedé sin espacio en disco hace 6 meses, momento en el que lo amplié con éxito.
> 2020-06-03T06:29:28.352Z pid=715 tid=osk2fuo0n ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
> 2020-06-03T06:29:28.353Z pid=715 tid=osk2fszrb ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
> 2020-06-03T06:29:28.354Z pid=715 tid=osk2fsjw3 ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
> 2020-06-03T06:29:28.354Z pid=715 tid=osk2ftlhz ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
> 2020-06-03T06:29:28.355Z pid=715 tid=osk2ftr43 ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)
> Starting up 1 supervised sidekiqs
> Loading Sidekiq in process id 725
Primero intenté reconstruir manualmente la aplicación.
Luego intenté apt upgrade docker, reinicié el servidor con reboot y reconstruí usando ./launcher rebuild app.
redis-cli ping devuelve una respuesta PONG.
ss -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 104.248.166.162:ssh 5.81.114.19:56270
ESTAB 0 0 104.248.166.162:ssh 5.81.114.19:56211
ps -axf muestra que está en ejecución:
PID TTY STAT TIME COMMAND
2378 pts/1 Ss 0:00 /bin/bash --login
2849 pts/1 R+ 0:00 \_ ps -axf
1 pts/0 Ss+ 0:00 /bin/bash /sbin/boot
627 pts/0 S+ 0:00 /usr/bin/runsvdir -P /etc/service
628 ? Ss 0:00 \_ runsv rsyslog
641 ? Sl 0:00 | \_ rsyslogd -n
629 ? Ss 0:00 \_ runsv cron
640 ? S 0:00 | \_ cron -f
630 ? Ss 0:00 \_ runsv unicorn
639 ? S 0:00 | \_ /bin/bash config/unicorn_launcher -E producti
665 ? Sl 0:09 | \_ unicorn master -E production -c config/un
725 ? SNl 0:12 | | \_ sidekiq 6.0.7 discourse [0 of 5 busy]
750 ? Sl 0:20 | | \_ unicorn worker[0] -E production -c co
758 ? Sl 0:17 | | \_ unicorn worker[1] -E production -c co
2848 ? S 0:00 | \_ sleep 1
631 ? Ss 0:00 \_ runsv postgres
635 ? S 0:00 | \_ svlogd /var/log/postgres
636 ? S 0:00 | \_ /usr/lib/postgresql/12/bin/postmaster -D /etc
659 ? Ss 0:00 | \_ postgres: 12/main: checkpointer
660 ? Ss 0:00 | \_ postgres: 12/main: background writer
661 ? Ss 0:00 | \_ postgres: 12/main: walwriter
662 ? Ss 0:00 | \_ postgres: 12/main: autovacuum launcher
663 ? Ss 0:00 | \_ postgres: 12/main: stats collector
664 ? Ss 0:00 | \_ postgres: 12/main: logical replication la
691 ? Ss 0:00 | \_ postgres: 12/main: discourse discourse [l
1848 ? Ss 0:00 | \_ postgres: 12/main: discourse discourse [l
2633 ? Ss 0:00 | \_ postgres: 12/main: discourse discourse [l
2675 ? Ss 0:00 | \_ postgres: 12/main: discourse discourse [l
2840 ? Ss 0:00 | \_ postgres: 12/main: discourse discourse [l
632 ? Ss 0:00 \_ runsv nginx
634 ? S 0:00 | \_ nginx: master process /usr/sbin/nginx
654 ? S 0:02 | \_ nginx: worker process
655 ? S 0:00 | \_ nginx: cache manager process
633 ? Ss 0:00 \_ runsv redis
637 ? S 0:00 \_ svlogd /var/log/redis
638 ? Sl 0:05 \_ /usr/bin/redis-server *:6379
¿Alguna idea? No soy un experto y estoy teniendo muchas dificultades para encontrar una forma de poner esto en funcionamiento de nuevo. ¿Hay algo simple que esté pasando por alto? ¿Hay algún otro lugar que pueda revisar que me ayude a encontrar el problema?
¿a qué logs de Docker te refieres? He ejecutado esto: ./launcher logs app
run-parts: ejecutando /etc/runit/1.d/00-ensure-links
run-parts: ejecutando /etc/runit/1.d/00-fix-var-logs
run-parts: ejecutando /etc/runit/1.d/anacron
run-parts: ejecutando /etc/runit/1.d/cleanup-pids
Limpiando archivos PID obsoletos
run-parts: ejecutando /etc/runit/1.d/copy-env
run-parts: ejecutando /etc/runit/1.d/letsencrypt
[Mié 03 Jun 2020 06:34:47 AM UTC] Los dominios no han cambiado.
[Mié 03 Jun 2020 06:34:47 AM UTC] Saltado, la próxima hora de renovación es: Mié Jul 1 00:35:12 UTC 2020
[Mié 03 Jun 2020 06:34:47 AM UTC] Agrega '--force' para forzar la renovación.
[Mié 03 Jun 2020 06:34:47 AM UTC] Instalando la clave en: /shared/ssl/forum.tritalk.co.uk.key
[Mié 03 Jun 2020 06:34:47 AM UTC] Instalando la cadena completa en: /shared/ssl/forum.tritalk.co.uk.cer
[Mié 03 Jun 2020 06:34:47 AM UTC] Ejecutando el comando de recarga: sv reload nginx
advertencia: nginx: no se pudo abrir supervise/ok: el archivo no existe
[Mié 03 Jun 2020 06:34:47 AM UTC] Error de recarga para :
[Mié 03 Jun 2020 06:34:48 AM UTC] Los dominios no han cambiado.
[Mié 03 Jun 2020 06:34:48 AM UTC] Saltado, la próxima hora de renovación es: Jue Jul 9 00:35:12 UTC 2020
[Mié 03 Jun 2020 06:34:48 AM UTC] Agrega '--force' para forzar la renovación.
[Mié 03 Jun 2020 06:34:48 AM UTC] Instalando la clave en: /shared/ssl/forum.tritalk.co.uk_ecc.key
[Mié 03 Jun 2020 06:34:48 AM UTC] Instalando la cadena completa en: /shared/ssl/forum.tritalk.co.uk_ecc.cer
[Mié 03 Jun 2020 06:34:48 AM UTC] Ejecutando el comando de recarga: sv reload nginx
advertencia: nginx: no se pudo abrir supervise/ok: el archivo no existe
[Mié 03 Jun 2020 06:34:48 AM UTC] Error de recarga para :
runsvdir iniciado, PID es 627
ok: run: redis: (pid 638) 0s
ok: run: postgres: (pid 636) 0s
chgrp: grupo inválido: 'syslog'
rsyslogd: imklog: no se pudo abrir el log del kernel (/proc/kmsg): Operación no permitida.
rsyslogd: falla al activar el módulo imklog [v8.1901.0 intenta en https://www.rsyslog.com/e/2145 ]
pid del supervisor: 639 pid de unicorn: 665
Dentro del contenedor intenté el comando, no estoy seguro si era eso a lo que te referías
tritalk@TriTalk-Discourse:/var/discourse$ sudo ./launcher enter app
root@TriTalk-Discourse-app:/var/www/discourse# curl http://localhost:8080
curl: (7) Error al conectar con localhost puerto 8080: Conexión rechazada
## this is the all-in-one, standalone Discourse Docker container template
##
## After making changes to this file, you MUST rebuild
## /var/discourse/launcher rebuild app
##
## BE *VERY* CAREFUL WHEN EDITING!
## YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!
## visit http://www.yamllint.com/ to validate this file as needed
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Descomenta estas dos líneas si deseas agregar Lets Encrypt (https)
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
## ¿Qué puertos TCP/IP debe exponer este contenedor?
## Si deseas que Discourse comparta un puerto con otro servidor web como Apache o nginx,
## consulta https://meta.discourse.org/t/17247 para más detalles
expose:
- "80:80" # http
- "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Establece db_shared_buffers en un máximo del 25% de la memoria total.
## se establecerá automáticamente por bootstrap según la RAM detectada, o puedes sobrescribirlo
db_shared_buffers: "128MB"
## puede mejorar el rendimiento de ordenación, pero aumenta el uso de memoria por conexión
#db_work_mem: "40MB"
## ¿Qué revisión de Git debe usar este contenedor? (por defecto: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## ¿Cuántas solicitudes web simultáneas se admiten? Depende de la memoria y los núcleos de CPU.
## se establecerá automáticamente por bootstrap según los CPUs detectados, o puedes sobrescribirlo
UNICORN_WORKERS: 2
## TODO: El nombre de dominio al que responderá esta instancia de Discourse
## Requerido. Discourse no funcionará con una dirección IP sin nombre.
DISCOURSE_HOSTNAME: forum.xxxx.co.uk
## Descomenta si deseas que el contenedor se inicie con el mismo
## nombre de host (opción -h) que el especificado anteriormente (por defecto "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Lista de correos electrónicos separados por comas que serán administradores y desarrolladores
## en el registro inicial, ejemplo 'usuario1@ejemplo.com,usuario2@ejemplo.com'
DISCOURSE_DEVELOPER_EMAILS: 'admin@xxxx.co.uk'
## 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: in-v3.mailjet.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: xxxx
DISCOURSE_SMTP_PASSWORD: "xxxx"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (opcional, por defecto true)
## Si agregaste la plantilla de Lets Encrypt, descomenta a continuación para obtener un certificado SSL gratuito
LETSENCRYPT_ACCOUNT_EMAIL: admin@xxxx.co.uk
## La dirección CDN para esta instancia de Discourse (configurada para extraer)
## consulta https://meta.discourse.org/t/14857 para más detalles
#DISCOURSE_CDN_URL: //discourse-cdn.example.com
## El contenedor Docker es sin 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í
## consulta https://meta.discourse.org/t/19157 para más detalles
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
- mkdir -p plugins
- git clone https://github.com/discourse/discourse-adplugin.git
- git clone https://github.com/discourse/discourse-affiliate.git
## Cualquier comando personalizado para ejecutar después de la compilación
run:
- exec: echo "Inicio de comandos personalizados"
## Si deseas establecer la dirección de correo electrónico 'De' para tu primer registro, descomenta y cambia:
## Después de obtener el primer correo de registro, vuelve a comentar la línea. Solo necesita ejecutarse una vez.
- exec: rails r "SiteSetting.notification_email='admin@xxxx.co.uk'"
- exec: echo "Fin de comandos personalizados"
Cliente:
Modo de depuración: false
Servidor:
Contenedores: 2
En ejecución: 1
Pausados: 0
Detenidos: 1
Imágenes: 6
Versión del servidor: 19.03.11
Controlador de almacenamiento: overlay2
Sistema de archivos subyacente: extfs
Soporta d_type: true
Diferencia de superposición nativa: true
Controlador de registro: json-file
Controlador de cgroup: cgroupfs
Complementos:
Volumen: local
Red: bridge host ipvlan macvlan null overlay
Registro: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactivo
Tiempos de ejecución: runc
Tiempo de ejecución predeterminado: runc
Binario de inicialización: docker-init
Versión de containerd: 7ad184331fa3e55e52b890ea95e65ba581ae3429
Versión de runc: dc9208a3303feef5b3839f4323d9beb36df0a9dd
Versión de inicialización: fec3683
Opciones de seguridad:
apparmor
seccomp
Perfil: default
Versión del kernel: 4.4.0-179-generic
Sistema operativo: Ubuntu 16.04.6 LTS
OSType: linux
Arquitectura: x86_64
CPUs: 1
Memoria total: 1.953 GiB
Nombre: TriTalk-Discourse
ID: SYIS:XPWU:W2SP:NYNA:GFP7:DNVK:E7JF:553N:EGWF:OR7M:TV2E:A6ZX
Directorio raíz de Docker: /var/lib/docker
Modo de depuración: false
Registro: https://index.docker.io/v1/
Etiquetas:
Experimental: false
Registros inseguros:
127.0.0.0/8
Restauración en vivo habilitada: false
ADVERTENCIA: Sin soporte para límite de intercambio
Usé el modo seguro y, si entro sin desactivar los complementos, falla. Parece que uno de los complementos está fallando desde la actualización. Los comenté en el archivo yml, reconstruí la aplicación y todo funcionó. Se trata de discourse-affiliate o discourse-adplugin. Investigaré más a fondo más adelante, pero al menos el sitio está de nuevo en funcionamiento. Gracias por toda su ayuda. Nota para mí mismo: ¡usar el modo seguro para realizar comprobaciones preliminares en el futuro!
Solo para tu información, Redis se utiliza principalmente para trabajos en segundo plano (junto con su compañero programador de trabajos Sidekiq). Y, por cierto, cuando estoy en el entorno de desarrollo, a menudo ejecuto Discourse sin que Redis o Sidekiq estén activos, porque no quiero que se ejecuten estos “trabajos en segundo plano”.
Por lo tanto, tu foro de Discourse debería seguir mostrando los foros principales, los temas, los usuarios, las publicaciones, etc., incluso si Redis no está en ejecución. Solo respondo esto por si acaso, porque titulaste tu tema:
Error de Redis después de la actualización
… y luego, amablemente, proporcionaste una captura de pantalla de tu foro con muchos problemas básicos que no están directamente relacionados con Redis en sí.
Gracias por la explicación. No tengo muchos conocimientos sobre cómo encaja todo esto, ya que siempre funciona y nunca he necesitado profundizar demasiado, así que esto me ayudará en el futuro. Solo asumí que, dado que todos los errores que encontré mencionan la falla al conectarse a Redis, este podría ser el problema raíz. Ni siquiera funcionaban las soluciones habituales que normalmente resuelven un problema básico.