1. 简介
GitLab 是一个利用 Ruby on Rails 开发的开源应用程序,实现了自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。它拥有与 GitHub 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。简单说,GitLab 能够满足的需求有:
- 代码仓库管理
- Code Review
- 免费的私有仓库
- 开源,可以在内网搭建
- GitLab CI,可以用于持续集成
2. 安装
2.1 安装工具集
|
|
2.2 安装 Gitlab CE
|
|
2.3 gitlab.rb 配置
编辑 /etc/gitlab/gitlab.rb
- 将 external_url = “http://gitlab.com” ,修改为自己的域名:http://yourdomain.com。
- 修改端口,取消 # unicorn[‘port’] = 8080 的注释,将 8080 修改为 8001 ,避免端口被占用。
- 修改端口,取消 # gitlab_workhorse[‘auth_backend’] = “http://localhost:8080” 的注释,将 8080 修改为 8001。
- 关闭 GitLab 自带的 Nginx,取消 #nginx[’enable’] = true 的注释,将 true 改为 false。
2.4 本地 Nginx 配置:
下面以 GitLab 9.4.4 为例,其他版本的 gitlab.socket 位置可能不一样。可以通过命令查找具体位置:
|
|
利用,nginx -t
,命令找到 nginx 的配置文件位置,新增如下server
|
|
2.5 启动 GitLab
|
|
其他常用命令:
|
|
3. 错误处理
3.1 git clone 500
这时需要修改 Nginx 配置,上面的配置使用的是 gitlab ,实际上官网上配置的是 gitlab-workhorse 。下面是一个简约配置,更详细的参数可以前往官方文档查看,文末有链接。
upstream gitlab-workhorse {
server unix://var/opt/gitlab/gitlab-workhorse/socket;
}
server{
listen 80;
server_name yourdomain.com;
server_tokens off; # don't show the version number, a security best practice
root /opt/gitlab/embedded/service/gitlab-rails/public;
client_max_body_size 50m;
access_log /var/log/gitlab/nginx/gitlab_access.log;
error_log /var/log/gitlab/nginx/gitlab_error.log;
location / {
try_files $uri $uri/index.html $uri.html @gitlab-workhorse;
}
location @gitlab-workhorse {
proxy_read_timeout 300; # Some requests take more than 30 seconds.
proxy_connect_timeout 300; # Some requests take more than 30 seconds.
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://gitlab-workhorse;
}
location ~ ^/(assets)/ {
root /opt/gitlab/embedded/service/gitlab-rails/public;
# gzip_static on; # to serve pre-gzipped version
expires max;
add_header Cache-Control public;
}
error_page 502 /502.html;
}
3.2 502 页面
提示,GitLab is taking too much time to respond。这时,可以查看一下上面 Nginx 配置的 /var/log/gitlab/nginx/gitlab_error.log 日志。
|
|
接着,查看一下,/var/opt/gitlab/gitlab-workhorse/socket 的权限。
|
|
再看 nignx.conf 中
|
|
分析原因:网页以 nginx 用户执行 /var/opt/gitlab/gitlab-workhorse/socket 失败,没有权限。而 /var/opt/gitlab/gitlab-workhorse/socket 所属 git 组,git 用户。所以,只需要将 nginx 用户加入 git 组,即可。
|
|
官方文档上是通过,passenger_group 实现的,由于 Passenger 模块需要重新编译 Nginx 安装,于是,没有采用官方文档的配置。Stackoverflow 上面,有人通过直接修改 /var/opt/gitlab/gitlab-workhorse/socket 所属组也可以,没有复现出来,并且,每次 gitlab-ctl reconfigure
之后,修改的权限就会失效。
4,测试
具体的 git 命令,这里就不详细罗列了。新建一个项目,GitLab 支持直接从 GitHub 上 Fork,接着 git clone 到本地,然后 git push 到 master,进行了一个完整的推拉过程。
5. 参考
- https://zh.wikipedia.org/wiki/Gitlab
- https://docs.gitlab.com/omnibus/settings/nginx.html