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.
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 !