Comment puis-je augmenter la limitation de taille de fichier gitlab CE lfs pour ne pas obtenir 500 erreurs de serveur?

J’utilise l’excellent sameersbn / gitlab pour configurer un serveur gitlab personnalisé pour mon travail.

Donc, j’ai un scénario ridicule, j’utilise git lfs pour stocker les fichiers qui se trouvent dans la plage 10-20 Go , avec gitlab ce v8.12.5, mais je vois 500 erreurs de serveur partout, mes téléchargements ne peuvent pas se terminer .

Question: Est-ce que quelqu’un sait comment je peux augmenter les limitations côté serveur?

Note: Ce n’est pas un problème de 413 nginx, j’ai défini le client_max_body_size 500G , il devrait donc être transmis à gitlab.

Si plus d’informations sont nécessaires (c.-à-d. Fichiers journaux, etc.), je serai ravi de les fournir, il suffit de faire un commentaire.

Mise à jour.1:

Il semble y avoir un problème lié à gitlab sur ce même problème.

Mise à jour.2

Autres ressources qui sont avant:

Pour l’instant, mon hypothèse est qu’il y a un délai d’attente quelque part dans la chaîne ou les serveurs proxy dans le conteneur docker.

git bash: erreur: RPC a échoué; résultat = 18, code HTP = 200B | 1 Ko / s

https://github.com/gitlabhq/gitlabhq/issues/694

Donc, voici quelque chose que je viens de remarquer, le périphérique mappé de docker /dev/dm-7 devient 100% plein à peu près au même moment que les erreurs gitlab avec un 500 .

Maintenant, je commence à croire que ce n’est pas un problème de gitlab, mais un problème de docker et que gitlab est juste à court d’espace.

Merci pour votre temps et vos encouragements.

Problème 1

Le premier problème majeur était l’erreur suivante dans ~/log/gitlab-workhorse.log

error: handleStoreLfsObject: copy body to tempfile: unexpected EOF

Cette erreur n’a rien à voir avec gitlab lui-même, mais plutôt que Docker dans sa dernière version a décidé de réduire la taille des conteneurs par défaut de 100 G / conteneur à 10 G / conteneur, ce qui signifie que chaque fois que je tente de télécharger des fichiers supérieurs à 10 Go tenterait de créer un fichier temporaire de la taille du fichier téléchargé (dans mon cas, 30 Go) et diffuserait ensuite le message d’erreur ci-dessus pour manque d’espace dans le conteneur du docker.

J’ai suivi cet excellent guide sur la façon d’augmenter la taille de mon conteneur, mais cela se résume essentiellement à:

  sudo `which docker-compose` down 

pour arrêter le conteneur en cours d’exécution.

  sudo vim /etc/systemd/system/docker.service 

et en ajoutant

  --sotrage-opt dm.basesize=100G 

comme taille par défaut pour les nouvelles images de base. Maintenant qu’il semble y avoir un problème avec docker, vous devez

  sudo `which docker` rmi gitlab 

en supposant que votre image s’appelle gitlab , et

  sudo `which docker-compose` up 

pour extraire l’image et la créer avec la bonne taille.

Si cela ne fonctionne toujours pas, essayez sudo systemctl restart docker.service car cela semble aider lorsque docker semble ne pas faire ce que vous lui avez demandé.

  sudo docker exec -it gitlab df -h 

Devrait produire quelque chose comme:

 Filesystem Size Used Avail Use% Mounted on /dev/mapper/docker-253:1-927611-353ffe52e1182750efb624c81a3a040d5c054286c6c5b5f709bd587afc92b38f 100G 938M 100G 1% / 

Je ne suis pas sûr à 100% que tous ces parameters étaient nécessaires, mais en résolvant le problème 2 ci-dessous, j’ai fini par devoir les définir également dans le docker-compose.yml

  - GITLAB_WORKHORSE_TIMEOUT=60m0s - UNICORN_TIMEOUT=3600 - GITLAB_TIMEOUT=3600 

Problème 2

En plus du redimensionnement du conteneur de 10 Go à 100 Go, j’ai dû append les éléments suivants à l’instance en cours d’exécution:

La raison en était que la taille du fichier était si importante (30 Go +) et que la vitesse du réseau était si lente (10 Mo / s) que le téléchargement prenait plus de temps que le nginx par défaut et expirait avec un 504 Gateway Timeout .

  sudo docker exec -it /bin/bash 

du vim.tiny /etc/nginx/nginx.conf du conteneur vim.tiny /etc/nginx/nginx.conf :

  http { ... client_max_body_size 500G; proxy_connect_timeout 3600; proxy_send_timeout 3600; proxy_read_timeout 3600; send_timeout 3600; ... } 

puis j’ai redémarré nginx. Malheureusement service restart nginx n’a pas fonctionné et je devais:

  service stop nginx service start nginx 

Note: J’ai un proxy inverse qui s’exécute sur ce serveur qui attrape toutes les requêtes http, donc je ne suis pas certain, mais je pense que tous les parameters que j’ai ajoutés à la configuration nginx du conteneur doivent être dupliqués du côté proxy

Si je suis sorti ou si vous souhaitez des précisions sur la manière exacte de faire une partie de la procédure, veuillez laisser un commentaire et demander. C’était une douleur royale et j’espère aider quelqu’un avec cette solution.