Erreur Redis après mise à niveau

Bonjour,

Après avoir effectué la mise à niveau via l’interface web, je ne peux plus accéder à mon site. Je n’ai rien modifié, j’ai simplement cliqué sur le bouton de mise à niveau ! Les erreurs suggèrent des problèmes de connexion à Redis. J’ai fait beaucoup de recherches mais je n’ai rien trouvé pour m’aider jusqu’à présent. Le fichier production.log est vide. Le serveur tourne sous Ubuntu sur Digital Ocean. Tout fonctionnait parfaitement depuis 18 mois, sans erreurs, sauf il y a 6 mois lorsque j’ai manqué d’espace disque, ce que j’ai résolu en augmentant cet espace avec succès.

L’espace disque est suffisant :-

Filesystem      Size  Used Avail Use% Mounted on
overlay          49G   25G   24G  52% /
tmpfs            64M     0   64M   0% /dev
tmpfs          1001M     0 1001M   0% /sys/fs/cgroup
shm             512M  8.0K  512M   1% /dev/shm
/dev/vda1        49G   25G   24G  52% /shared
tmpfs          1001M     0 1001M   0% /proc/acpi
tmpfs          1001M     0 1001M   0% /proc/scsi
tmpfs          1001M     0 1001M   0% /sys/firmware

Le fichier unicorn.stdout.log affiche :

> 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

J’ai d’abord tenté de reconstruire manuellement l’application.

Ensuite, j’ai essayé apt upgrade docker, redémarré le serveur via reboot, puis reconstruit avec ./launcher rebuild app.

La commande redis-cli ping renvoie une réponse 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 

La commande ps -axf montre que le processus tourne :

  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

Avez-vous des idées ? Je ne suis pas expert et j’ai vraiment du mal à trouver un moyen de remettre cela en marche. Y a-t-il quelque chose de simple que j’aurais pu manquer ? Existe-t-il un autre endroit à vérifier qui pourrait m’aider à identifier le problème ?

Merci

Oh… Je vois que vous avez redémarré et fait toutes les choses évidentes…

Pouvez-vous coller la configuration de votre conteneur (sans les mots de passe) ? Le modèle Redis est-il mélangé ?

Y a-t-il quelque chose d’intéressant dans docker logs app ?

localhost se résout-il à l’intérieur de votre conteneur ?

3 « J'aime »

Salut Sam, désolé pour mon manque de connaissances,

parles-tu du fichier app.yml ?

Quels sont les logs Docker ? J’ai exécuté la commande suivante : ./launcher logs app

run-parts: exécution de /etc/runit/1.d/00-ensure-links
run-parts: exécution de /etc/runit/1.d/00-fix-var-logs
run-parts: exécution de /etc/runit/1.d/anacron
run-parts: exécution de /etc/runit/1.d/cleanup-pids
Nettoyage des fichiers PID obsolètes
run-parts: exécution de /etc/runit/1.d/copy-env
run-parts: exécution de /etc/runit/1.d/letsencrypt
[Wed 03 Jun 2020 06:34:47 AM UTC] Les domaines n'ont pas changé.
[Wed 03 Jun 2020 06:34:47 AM UTC] Ignoré, prochaine date de renouvellement : Wed Jul  1 00:35:12 UTC 2020
[Wed 03 Jun 2020 06:34:47 AM UTC] Ajoutez '--force' pour forcer le renouvellement.
[Wed 03 Jun 2020 06:34:47 AM UTC] Installation de la clé vers :/shared/ssl/forum.tritalk.co.uk.key
[Wed 03 Jun 2020 06:34:47 AM UTC] Installation de la chaîne complète vers :/shared/ssl/forum.tritalk.co.uk.cer
[Wed 03 Jun 2020 06:34:47 AM UTC] Exécution de la commande de rechargement : sv reload nginx
avertissement : nginx : impossible d'ouvrir supervise/ok : le fichier n'existe pas
[Wed 03 Jun 2020 06:34:47 AM UTC] Erreur de rechargement pour :
[Wed 03 Jun 2020 06:34:48 AM UTC] Les domaines n'ont pas changé.
[Wed 03 Jun 2020 06:34:48 AM UTC] Ignoré, prochaine date de renouvellement : Thu Jul  9 00:35:12 UTC 2020
[Wed 03 Jun 2020 06:34:48 AM UTC] Ajoutez '--force' pour forcer le renouvellement.
[Wed 03 Jun 2020 06:34:48 AM UTC] Installation de la clé vers :/shared/ssl/forum.tritalk.co.uk_ecc.key
[Wed 03 Jun 2020 06:34:48 AM UTC] Installation de la chaîne complète vers :/shared/ssl/forum.tritalk.co.uk_ecc.cer
[Wed 03 Jun 2020 06:34:48 AM UTC] Exécution de la commande de rechargement : sv reload nginx
avertissement : nginx : impossible d'ouvrir supervise/ok : le fichier n'existe pas
[Wed 03 Jun 2020 06:34:48 AM UTC] Erreur de rechargement pour :
runsvdir démarré, PID 627
ok : run: redis: (pid 638) 0s
ok : run: postgres: (pid 636) 0s
chgrp : groupe invalide : 'syslog'
rsyslogd : imklog : impossible d'ouvrir le journal du noyau (/proc/kmsg) : Opération non autorisée.
rsyslogd : échec de l'activation du module imklog [v8.1901.0 voir https://www.rsyslog.com/e/2145 ]
pid du superviseur : 639 pid d'unicorn : 665

Dans le conteneur, j’ai essayé la commande suivante, je ne suis pas sûr que ce soit ce que tu voulais dire :

tritalk@TriTalk-Discourse:/var/discourse$ sudo ./launcher enter app
root@TriTalk-Discourse-app:/var/www/discourse# curl http://localhost:8080
curl : (7) Échec de la connexion à localhost port 8080 : Connexion refusée
1 « J'aime »

Oui, app.yml, mais veuillez supprimer tous les mots de passe ou informations sensibles.

2 « J'aime »
## Ceci est le modèle de conteneur Docker Discourse tout-en-un et autonome
##
## Après avoir apporté des modifications à ce fichier, vous DEVEZ reconstruire
## /var/discourse/launcher rebuild app
##
## SOYEZ *TRÈS* PRUDENT EN ÉDITANT !
## LES FICHIERS YAML SONT EXTRÊMEMENT SENSIBLES AUX ERREURS D'ESPACEMENT OU D'ALIGNEMENT !
## visitez http://www.yamllint.com/ pour valider ce fichier si nécessaire

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## Quels ports TCP/IP ce conteneur doit-il exposer ?
## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,
## consultez https://meta.discourse.org/t/17247 pour plus de détails
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Définissez db_shared_buffers à un maximum de 25 % de la mémoire totale.
  ## Sera défini automatiquement par bootstrap en fonction de la RAM détectée, ou vous pouvez le remplacer
  db_shared_buffers: "128MB"

  ## Peut améliorer les performances de tri, mais augmente l'utilisation de la mémoire par connexion
  #db_work_mem: "40MB"

  ## Quelle révision Git ce conteneur doit-il utiliser ? (par défaut : tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Combien de requêtes web simultanées sont prises en charge ? Dépend de la mémoire et des cœurs CPU.
  ## Sera défini automatiquement par bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer
  UNICORN_WORKERS: 2

  ## TODO : Le nom de domaine auquel cette instance Discourse répondra
  ## Requis. Discourse ne fonctionnera pas avec une adresse IP brute.
  DISCOURSE_HOSTNAME: forum.xxxx.co.uk

  ## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
  ## nom d'hôte (option -h) que spécifié ci-dessus (par défaut "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO : Liste d'e-mails séparés par des virgules qui seront définis comme administrateurs et développeurs
  ## lors de l'inscription initiale, par exemple 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'admin@xxxx.co.uk'

  ## TODO : Le serveur SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
  # L'adresse SMTP, le nom d'utilisateur et le mot de passe sont requis
  # ATTENTION : le caractère '#' dans le mot de passe SMTP peut causer des problèmes !
  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           # (optionnel, par défaut true)

  ## Si vous avez ajouté le modèle Lets Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
  LETSENCRYPT_ACCOUNT_EMAIL: admin@xxxx.co.uk

  ## L'adresse CDN pour cette instance Discourse (configurée pour récupérer)
  ## voir https://meta.discourse.org/t/14857 pour plus de détails
  #DISCOURSE_CDN_URL: //discourse-cdn.example.com

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Les plugins vont ici
## voir https://meta.discourse.org/t/19157 pour plus de détails
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

## Toutes les commandes personnalisées à exécuter après la construction
run:
  - exec: echo "Début des commandes personnalisées"
  ## Si vous souhaitez définir l'adresse e-mail 'From' pour votre première inscription, décommentez et modifiez :
  ## Après avoir reçu le premier e-mail d'inscription, re-commentez la ligne. Elle ne doit être exécutée qu'une seule fois.
  - exec: rails r "SiteSetting.notification_email='admin@xxxx.co.uk'"
  - exec: echo "Fin des commandes personnalisées"

C’est un problème. Quelle version de Docker exécutez-vous ? Que renvoie docker info ?

Vous n’avez pas tort ! On dirait que la base de données n’est pas trouvée. Lorsque vous accédez au site, vous ne voyez qu’un écran avec des en-têtes.

Informations Docker :

Client:
 Debug Mode: false

Server:
 Containers: 2
  Running: 1
  Paused: 0
  Stopped: 1
 Images: 6
 Server Version: 19.03.11
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 4.4.0-179-generic
 Operating System: Ubuntu 16.04.6 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 1.953GiB
 Name: TriTalk-Discourse
 ID: SYIS:XPWU:W2SP:NYNA:GFP7:DNVK:E7JF:553N:EGWF:OR7M:TV2E:A6ZX
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No swap limit support

Pouvez-vous essayer le mode sans échec ?

J’ai utilisé le mode sans échec et, si j’entre sans désactiver les plugins, cela échoue. Il semble donc qu’un des plugins pose problème depuis la mise à niveau. Je les commente dans le fichier yml, je reconstruis l’application et tout fonctionne. C’est soit discourse-affiliate, soit discourse-adplugin. J’approfondirai l’enquête plus tard, mais au moins le site est de nouveau en ligne et fonctionne. Merci pour toute votre aide. Note pour moi-même : utiliser le mode sans échec pour les vérifications préliminaires à l’avenir !

3 « J'aime »

Votre dossier de plugins ne semble pas être formaté correctement. Peut-être que cela cause le problème ?

Cela devrait en fait ressembler à ceci :

        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-adplugin.git
          - git clone https://github.com/discourse/discourse-affiliate.git

(retirez le -mkdir -p plugins)

Espérons que cela résoudra le problème avec les plugins.

1 « J'aime »

Merci Bhanu. Je vais essayer, c’est étrange que cela ait fonctionné jusqu’aujourd’hui. Peut-être que quelque chose a été renforcé dans la dernière version de Docker.

Je pourrais me tromper ici. Je n’ai jamais utilisé ce paramètre dans mes fichiers yml et tout fonctionne parfaitement jusqu’à présent.

1 « J'aime »

Bonjour @carlb,

Pour information, Redis est principalement utilisé pour les tâches en arrière-plan (ainsi que son compagnon, le planificateur de tâches Sidekiq). D’ailleurs, dans mon environnement de développement, je lance souvent Discourse sans que Redis ou Sidekiq soient actifs, car je ne souhaite pas que ces « tâches en arrière-plan » s’exécutent.

Par conséquent, votre forum Discourse devrait toujours afficher les forums principaux, les sujets, les utilisateurs, les messages, etc., même si Redis n’est pas en cours d’exécution. Je réponds avec cette information à titre indicatif uniquement, car vous avez intitulé votre sujet :

Erreur Redis après la mise à niveau

… puis vous avez aimablement fourni une capture d’écran de votre forum montrant de nombreux problèmes de base qui ne sont pas directement liés à Redis en soi.

1 « J'aime »

Merci pour l’explication. Je ne connais pas très bien comment tout cela s’articule, car cela fonctionne toujours sans que j’aie besoin d’approfondir, ce qui m’aidera à l’avenir. J’ai simplement supposé que, puisque toutes les erreurs que j’ai trouvées mentionnaient une impossibilité de se connecter à Redis, cela pourrait être la cause racine. Aucune des solutions habituelles, qui résolvent généralement un problème de base, n’a fonctionné.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.