nginx - 如何增加 gitlab CE lfs 文件大小限制以避免出现 500 服务器错误?

标签 nginx docker gitlab large-files git-lfs

我正在使用优秀的sameersbn/gitlab为我的工作设置自定义 gitlab 服务器。

所以我有一个荒谬的场景,我使用 git lfs 来存储 10-20 GB 范围内的文件,gitlab ce v8.12.5,但我发现到处都有 500 个服务器错误,我的上传无法完成。

问题:有谁知道如何增加服务器端限制?

Note: This is not a 413 nginx issue, I've set the client_max_body_size 500G so it should be forwarding to gitlab just fine.

如果需要更多信息(即日志文件等),我很乐意提供,只需发表评论即可。

更新1:

似乎有一个相关的gitlab issue关于同样的问题。

更新2

其他相关资源:

目前我的假设是,docker 容器中的链或代理服务器中的某个地方存在超时。

git bash: error: RPC failed; result = 18, HTP code = 200B | 1KiB/s

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

所以,我刚刚注意到 docker 映射设备 /dev/dm-7 变得 100% full ,几乎在 gitlab 错误提示 的同时500

现在我开始相信这不是 gitlab 问题,而是 docker 问题,而且 gitlab 空间不足。

感谢您的宝贵时间,祝您好运。

最佳答案

问题 1

第一个主要问题是 ~/log/gitlab-workhorse.log 中出现以下错误

错误:handleStoreLfsObject:将正文复制到临时文件:意外的 EOF

这个错误与 gitlab 本身没有任何关系,而是 docker 在最新版本中决定将默认容器大小从 100G/容器缩小到 10G/容器,这意味着每当我尝试上传大于 10GB 的文件,gitlab 会尝试创建一个与上传文件大小相同的临时文件(在我的例子中为 30GB),然后由于空间不足而出现上述错误消息docker 容器。

我关注了这个优秀的guide关于如何增加容器的大小,但它基本上可以归结为:

    sudo `which docker-compose` down

停止正在运行的容器。

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

并附加

    --sotrage-opt dm.basesize=100G

作为新基础图像的默认大小。现在,由于 docker 当前似乎存在问题,因此您必须

   sudo `which docker` rmi gitlab

假设您的图像名为 gitlab,并且

   sudo `which docker-compose` up

重新拉取图像并以正确的尺寸创建它。

If this still doesn't work try sudo systemctl restart docker.service as this seems to help when docker seems to not do what you asked it to do.

    sudo docker exec -it gitlab df -h

应该产生如下内容:

Filesystem                                                                                        Size  Used Avail Use% Mounted on

/dev/mapper/docker-253:1-927611-353ffe52e1182750efb624c81a3a040d5c054286c6c5b5f709bd587afc92b38f  100G  938M  100G   1% /

我不是 100% 确定所有这些设置都是必要的,但在解决下面的问题 2 时,我最终也必须在 docker-compose.yml 中设置这些设置。

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

问题2

除了将容器大小从 10GB 调整到 100GB 之外,我还必须将以下内容添加到正在运行的实例中:

原因是文件太大(30GB+),而网络速度太慢(10MB/s),导致上传时间比默认的 nginx 长,并且超时,504 网关超时.

    sudo docker exec -it /bin/bash

gitlab容器的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;
    ...
    }

然后我重新启动了nginx。遗憾的是 service restart nginx 不起作用,我不得不:

    service stop nginx
    service start nginx

Note: I have a reverse proxy running on this server which catches all http requests, so I'm not certain, but I believe that all the settings that I added to the container's nginx config have to be duplicated on the proxy side

如果我遗漏了步骤,或者您想了解如何准确执行该过程的特定部分,发表评论并询问。这是一个巨大的痛苦,我希望能帮助别人解决这个问题。

关于nginx - 如何增加 gitlab CE lfs 文件大小限制以避免出现 500 服务器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40136346/

相关文章:

git - 如何在 gitlab 中将现有的 ssh key 添加到项目的部署 key

ubuntu - PHP 从 7.0 更新 7.2 仍然显示带有 php -v 的旧版本

python - AWS EC2 免费层 Django 应用程序

php - Nginx + Xamp + SSL 奇怪的行为

ruby - 在同一主机上托管多个微服务的设计方法

docker - 有没有办法在构建容器时内省(introspection)图像值?

node.js - Express 4、NodeJS、AngularJS 路由

docker - 节点 webpack 挂起。如何调试?

Gitlab apt 存储库非常慢

docker - 在Windows中使用Docker安装CI gitlab