Gitlab : Error 500 We’re sorry but something went wrong

Suite à sa migration vers un container lxc j’ai eu la joie d’avoir ce joli message d’erreur sur mon nouveau serveur Gitlab.

We_re_sorry__but_something_went_wrong__500_

Je me dis rien de grave avec tous les changements réalisés ses derniers jours sur mes containers je vais rafraîchir le cache de Gitlab.

sudo -u git -H bundle exec rake cache:clear RAILS_ENV=production

Et là c’est le drame, mon serveur commence à m’insulter.

WARNING: This version of GitLab depends on gitlab-shell 2.6.8, but you're running 2.6.7. Please update gitlab-shell.
rake aborted!
Errno::ENOENT: No such file or directory - connect(2) for /var/run/redis/redis.sock
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/connection/ruby.rb:180:in `connect_nonblock'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/connection/ruby.rb:180:in `connect'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/connection/ruby.rb:209:in `connect'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:322:in `establish_connection'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:94:in `block in connect'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:279:in `with_reconnect'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:93:in `connect'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:350:in `ensure_connected'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:207:in `block in process'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:292:in `logging'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:206:in `process'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis/client.rb:112:in `call'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis.rb:441:in `block in keys'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis.rb:37:in `block in synchronize'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis.rb:37:in `synchronize'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-3.2.1/lib/redis.rb:440:in `keys'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-store-1.1.6/lib/redis/store/namespace.rb:37:in `block in keys'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-store-1.1.6/lib/redis/store/namespace.rb:74:in `namespace'
/home/git/gitlab/vendor/bundle/ruby/2.1.0/gems/redis-store-1.1.6/lib/redis/store/namespace.rb:37:in `keys'
/home/git/gitlab/lib/tasks/cache.rake:7:in `block (2 levels) in <top (required)>'
Tasks: TOP => cache:clear
(See full trace by running task with --trace)

Parmi toutes ses vulgarités il y a une ligne qui retient mon attention.

Errno::ENOENT: No such file or directory - connect(2) for /var/run/redis/redis.sock

Premier réflexe, regarder si le service redis-server est lancé.

systemctl status redis-server -l
● redis-server.service - Advanced key-value store
   Loaded: loaded (/lib/systemd/system/redis-server.service; enabled)
   Active: failed (Result: start-limit) since lun. 2015-11-30 10:07:31 CET; 5s ago
  Process: 18709 ExecStop=/usr/bin/redis-cli shutdown (code=exited, status=1/FAILURE)
  Process: 18707 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
 Main PID: 18708 (code=exited, status=1/FAILURE)

nov. 30 10:07:31 labo systemd[1]: redis-server.service: control process exited, code=exited status=1
nov. 30 10:07:31 labo systemd[1]: Unit redis-server.service entered failed state.
nov. 30 10:07:31 labo systemd[1]: redis-server.service holdoff time over, scheduling restart.
nov. 30 10:07:31 labo systemd[1]: Stopping Advanced key-value store...
nov. 30 10:07:31 labo systemd[1]: Starting Advanced key-value store...
nov. 30 10:07:31 labo systemd[1]: redis-server.service start request repeated too quickly, refusing to start.
nov. 30 10:07:31 labo systemd[1]: Failed to start Advanced key-value store.
nov. 30 10:07:31 labo systemd[1]: Unit redis-server.service entered failed state.

A ce moment un petit frisson me parcours le dos et je me sens moins confiant pour le coup. Je décide de reprendre point par point l’étape pour l’installation du serveur Redis sur la documentation Gitlab. Je commence par vérifier si redis est bien configuré.

nano /etc/redis/redis.conf
port 0
unixsocket /var/run/redis/redis.sock
unixsocketperm 770

De ce côté là tout est bon. je vérifie si le répertoire /var/run/redis/ est présent, mais il est désespérément vide. Et le service refuse toujours de se lancer. Un éclair de lucidité me traverse l’esprit, quid des autorisations ?

cd /var/run
ls -la
total 16
drwxr-xr-x 10 root  root    340 nov.  30 09:56 .
drwxr-xr-x  1 root  root    146 nov.  29 11:55 ..
-rw-r--r--  1 root  root      3 nov.  29 11:55 crond.pid
----------  1 root  root      0 nov.  29 11:55 crond.reboot
lrwxrwxrwx  1 root  root     25 nov.  29 11:55 initctl -> /run/systemd/initctl/fifo
drwxrwxrwt  4 root  root     80 nov.  29 11:55 lock
drwxr-xr-x  3 root  root     60 nov.  29 11:55 log
drwxr-xr-x  2 root  netdev   80 nov.  29 11:55 network
-rw-r--r--  1 root  root      4 nov.  29 11:55 nginx.pid
drwxr-xr-x  2 root  root     80 nov.  30 10:32 redis
drwxr-xr-x  2 root  root     40 nov.  29 11:55 sendsigs.omit.d
lrwxrwxrwx  1 root  root      8 nov.  29 11:55 shm -> /dev/shm
drwxr-xr-x  2 root  root     40 nov.  29 11:55 sshd
-rw-r--r--  1 root  root      3 nov.  29 11:55 sshd.pid
drwxr-xr-x 16 root  root    420 nov.  30 09:57 systemd
drwxr-xr-x  2 root  root     40 nov.  29 11:55 user
-rw-rw-r--  1 root  utmp   3456 nov.  30 11:53 utmp

Effectivement les autorisations ne sont pas bonnes, car seul le root à accès au dossier. Par conséquent le service qui est lancé avec l’utilisateur redis ne peut créer de fichier redis.sock. Pour remédier au problème j’ai donc attribué les bonnes autorisations au dossier.

chown redis:redis /var/run/redis

Nouvelle tentative de lancement du serveur redis.

systemctl start redis-server
systemctl status -l redis-server
● redis-server.service - Advanced key-value store
   Loaded: loaded (/lib/systemd/system/redis-server.service; enabled)
   Active: active (running) since lun. 2015-11-30 10:32:06 CET; 1h 30min ago
  Process: 18709 ExecStop=/usr/bin/redis-cli shutdown (code=exited, status=1/FAILURE)
  Process: 19694 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
 Main PID: 19695 (redis-server)
   CGroup: /system.slice/lxc.service/system.slice/redis-server.service
           └─19695 /usr/bin/redis-server 127.0.0.1:0

nov. 30 10:32:06 labo systemd[1]: Started Advanced key-value store.

Pour conclure j’ai fait un petit tour sur la page web de Gitlab. C’est avec un gros ouf de soulagement que j’ai retrouvé mon accès. Il s’agit tout simplement d’un oublie de ma part, car la documentation explique qu’il faut mettre à jour les autorisations du répertoire redis et je suis passé à côté deux fois. On ne le redira jamais assez RTFM !

 

Vus : 1320
Publié par Olivier Delort : 73