问题 1
第一个主要问题是~/log/gitlab-workhorse.log中的以下错误
error: handleStoreLfsObject: copy body to tempfile: unexpected EOF
此错误与 gitlab 本身无关,而是 docker 在其最新版本中决定将默认容器大小从 100G/容器缩小到 10G/容器,这意味着无论何时我尝试上传大于 10GB 的文件,gitlab 会尝试制作一个与上传文件大小(在我的情况下为 30GB)相同的 临时文件,然后因空间不足而出现上述错误消息码头集装箱。
我遵循了这个优秀的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
重新拉取图像并以适当的大小创建它。
如果这仍然不起作用,请尝试 sudo systemctl restart docker.service,因为当 docker 似乎没有按照您的要求执行时,这似乎会有所帮助。
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 Gateway Timeout 超时。
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
注意:我在此服务器上运行了一个反向代理,它捕获所有 http 请求,所以我不确定,但我相信我添加到容器的 nginx 配置中的所有设置都必须在代理端复制
如果我离开了步骤,或者您想了解如何准确地执行程序的某个部分请发表评论并询问。这是一个皇家痛苦,我希望能帮助某人解决这个问题。