CenOS7安装GitLab(使用外部Nginx配置)
本文讲解在CentOS7系统中安装GitLab(使用外部Nginx配置)。
实验环境
- server服务端: 操作系统为CentOS 7.6,IP:192.168.56.14, git:2.16.5。
查看server服务端信息:
| |
配置要求
配置要求参考https://docs.gitlab.com/ce/install/requirements.html。
- 系统支持:支持Ubuntu、Debian、CentOS、openSUSE、Red Hat,不支持Arch Linux、Fedora、FreeBSD、Gentoo、macOS、 Windows (官方未计划支持)。
- Ruby版本:Ruby (MRI) 2.5。
- 硬件要求:存储,建议使用LVM或者支持NFS协议(network file system protocol)的NAS或SAN网络存储设备。
- 硬件要求:CPU,推荐500用户时使用2 cores,2000用户时使用4 cores。
- 硬件要求:内存,推荐100用户时使用8GB RAM,2000用户时使用16GB RAM;推荐使用SWAP交换分区。
- 数据库:PostgreSQL 9.6,建议至少5-10GB的可用存储空间。
- Unicorn Workers:工人数,推荐工人数 = CPU cores + 1 。
- GitLab Runner:如果有多台服务器的话,不建议将GitLab Runner安装在GitLab服务器上,运行GitLab Runner可能消耗大量内存。
- 浏览器支持:Firefox、Chrome、Safari、Microsoft Edge、Internet Explorer 11。
准备工作
设置服务器时间为Asia/Shanghai,并同步一下时间:
| |
安装GitLab
参考https://about.gitlab.com/install/#centos-7在CentOS7上面安装Omnibus package。
安装依赖
安装必要依赖,并开启防火墙放行80端口:
| |
新增GitLab的国内清华大学的yum源
- 清华大学YUM源地址https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
- 清华大学Gitlab Community Edition 镜像使用帮助https://mirrors.tuna.tsinghua.edu.cn/help/gitlab-ce/
新建/etc/yum.repos.d/gitlab-ce.repo,内容如下:
| |
使用以下命令添加数据:
| |
查找yum源中gitlab-ce的版本:
| |
安装gitlab-ce-11.10.0
我们安装11.10.0版本:
| |
或者通过手动下载安装包安装,这样后面本地目录下面就存在gitlab-ce-11.10.0-ce.0.el7.x86_64.rpm的安装包:
| |
查看GitLab版本:
| |
配置GitLab配置文件
GitLab配置文件存放路径为/etc/gitlab/gitlab.rb,我们先备份一份原始配置文件:
| |
外部URL(external URL)配置
- 为了给用户展示正确的仓库克隆链接,需要设置external URL。
- 外部URL可以分多种形式:
| |
我们先使用IP形式的外部URL配置,验证成功后,后面再使用域名形式或CA认证的URL。
- 13 external_url ‘http://gitlab.example.com’ —> external_url ‘http://192.168.56.14’
说明:"—>" 表示修改为, 前面的13表示第13行。
使用命令修改:
| |
时区配置
时区设置为"Asia/Shanghai":
- 49 # gitlab_rails[’time_zone’] = ‘UTC’ —> gitlab_rails[’time_zone’] = ‘Asia/Shanghai’
使用命令修改:
| |
Email邮箱设置
参考:https://docs.gitlab.com/omnibus/settings/smtp.html
我们使用网易的163邮箱作为邮件的发送人。
原始配置:
| |
修改为:
| |
使用命令修改:
| |
禁止用户创建顶层组
禁止用户创建顶层组(Disallow users creating top-level groups):
- 59 # gitlab_rails[‘gitlab_default_can_create_group’] = true —> gitlab_rails[‘gitlab_default_can_create_group’] = false
使用命令修改:
| |
禁止用户修改用户名
参考: https://docs.gitlab.com/ee/administration/user_settings.html#disallow-users-changing-usernames
禁止用户修改用户名(Disallow users changing usernames):
- 60 # gitlab_rails[‘gitlab_username_changing_enabled’] = true —> gitlab_rails[‘gitlab_username_changing_enabled’] = false
使用命令修改:
| |
GitLab trusted_proxies可信代理配置
将IP子网段添加到可信代理中:
- 113 # gitlab_rails[’trusted_proxies’] = [] —> gitlab_rails[’trusted_proxies’] = [‘192.168.56.0/24’]
使用命令修改:
| |
此步可忽略!!!
git仓库存储目录配置
git仓库存储目录默认为/var/opt/gitlab/git-data,由于git仓库存储数据比较多,最好将存储目录设置LVM或者支持NFS协议(network file system protocol)的NAS或SAN网络存储设备对应的卷的路径,便于后面扩容。
:warning 警告
git仓库存储目录 必须是目录,不能是软链接 !!
:
修改git_data_dirs的配置:
| |
修改为:
| |
使用命令修改:
| |
创建仓库存储目录:
| |
SMTP外部邮箱设置
参考: https://docs.gitlab.com/omnibus/settings/smtp.html
我们使用外部邮箱发送邮件通知。
SMTP的原始信息:
| |
修改为:
| |
使用命令修改:
| |
::: tip 说明 配置生效后,需要测试SMTP发送邮件是否成功!测试SMTP设置参考:https://docs.gitlab.com/omnibus/settings/smtp.html#testing-the-smtp-configuration :::
改变Git有用户和组信息
参考: https://docs.gitlab.com/omnibus/settings/configuration.html#changing-the-name-of-the-git-user–group
Git配置的原始信息:
| |
我们修改为:
| |
使用命令修改:
| |
设置非捆绑WEB服务器的用户名
参考: https://docs.gitlab.com/omnibus/settings/nginx.html#using-a-non-bundled-web-server
WEB SERVER配置的原始信息:
| |
修改为:
| |
使用命令修改:
| |
安装外部Nginx服务:
| |
设置非捆绑WEB服务器为Nginx
关闭捆绑WEB服务器:
- 983 # nginx[’enable’] = true –> nginx[’enable’] = false
使用命令修改:
| |
配置GitLab的Nginx配置文件
参考: https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/nginx
下载nginx的gitlab配置模板文件,注下载单个文件时,应查看文件的raw文件:
| |
将gitlab-omnibus-nginx.conf移动到/etc/nginx/conf.d目录:
| |
并修改YOUR_SERVER_FQDN为IP地址:
- 31 server_name YOUR_SERVER_FQDN; —> server_name 192.168.56.14;
使用命令修改:
| |
禁用 /etc/nginx/nginx.conf 中的默认的80端口的server配置:
80端口的server的原始信息:
| |
修改为:
| |
使用命令修改:
| |
检查nginx配置是否正确:
| |
加载配置
使用gitlab-ctl reconfigure:
| |
没有报错,看到"gitlab Reconfigured!",说明加载配置成功!!
测试SMTP配置
运行gitlab-rails console进入到gitlab-rails控制台:
| |
发送测试邮件:
| |
没有报异常,说明邮件发送成功!登陆QQ邮箱检查邮件信息,发现已经收到邮件!

启动GitLab和Nginx服务
启动GitLab和Nginx服务:
| |
::: tip 说明
启动GitLab和Nginx服务前,先要使用systemctl start gitlab-runsvdir启动runsv。
:::
访问GitLab
在Google浏览器中访问URL: http://192.168.56.14/ ,提示"502 Bad Gateway",说明GitLab异常。

查看GitLab的错误日志文件/var/log/nginx/gitlab_error.log:
| |
可以发现上游权限配置异常。
GitLab异常调试
GitLab异常调试是一个痛苦的过程,为了让GitLab跑起来,需要不断的尝试。
我们给/var/opt/gitlab/gitlab-workhorse/增加可执行权限:
| |
重启GitLab,再次访问 http://192.168.56.14/ ,仍然提示权限异常:
| |
我们重新配置GitLab:
| |
卸载掉GitLab并删除相关文件:
| |
再检查一下相关目录:
| |
说明GitLab相关文件已经删除。
我们重新安装:
| |
重新对/etc/gitlab/gitlab.rb进行配置,我将设置过程编写了脚本gitlab_conf_init.sh,直接执行即可修改配置文件/etc/gitlab/gitlab.rb:
| |
加载配置:
| |
启动GitLab和Nginx服务:
| |
访问GitLab,仍然显示"502 Bad Gateway"!我们把nginx加入到git组中:
参考: 【Nginx】 *26054 open() “/var/lib/nginx/tmp/client_body/0000000005” failed (13: Permission denied)
| |
再重启GitLab和Nginx服务,并访问GitLab,仍然显示"502 Bad Gateway"
| |
::: warning 警告 https://docs.gitlab.com/omnibus/settings/nginx.html#using-a-non-bundled-web-server中指出:
Note: if you are using SELinux and your web server runs under a restricted SELinux profile you may have to loosen the restrictions on your web server Note: make sure that the webserver user has the correct permissions on all directories used by external web-server, otherwise you will receive failed (XX: Permission denied) while reading upstream errors. :::
检查SELinux配置
| |
可以发现SELinux已经开启。
- SELinux主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
- targeted:对大部分网络服务进程进行管制。这是系统默认使用的政策。
- SELinux工作模式: enforcing:强制模式。违反SELinux规则的行为将被阻止并记录到日志中。
- SELinux工作模式: permissive:宽容模式。违反SELinux 规则的行为只会记录到日志中。一般为调试用。
- SELinux工作模式: disabled:关闭模式。不启用SElinux。
sestatus命令,查看SELinux的具体的工作状态。getenforce命令,查看SELinux当前的工作模式。getsebool -a命令,查看SELinux下不同的规则,SELinux根据不同的工作类型对这些规则打开或关闭(on|off<布尔值1|0>),然后通过规则的开启与关闭具体地限制不同进程对文件的读取。
查看SELinux下不同的规则:
| |
开启下面三个设置, setsebool -P表示重启后保留设置,永久设置:
| |
重启服务器:
| |
访问GitLab,仍然显示"502 Bad Gateway"!!!
尝试临时关闭SELinux:
| |
访问GitLab,可以访问!!!
| |
访问GitLab,又显示"502 Bad Gateway"!!!我决定彻底关闭SELinux。
修改SELinux配置,关闭SELinux:
| |
为了还原GitLab相关文件原有权限,我们卸载GitLab并删除相关目录,进行清理工作:
| |
清理工作完成后,重启服务器:
| |
关闭SELinux后,重新配置GitLab服务
- 查看SELinux的具体的工作状态
| |
说明SELinux已经关闭!
- 重新安装Nginx服务
| |
为了让Nginx能够访问git中的数据,将Nginx账号加入到git组中,参考 Give nginx access to git group
| |
- 重新安装GitLab
| |
- 修改配置文件
| |
- 先停止
nginx服务,再让配置生效
| |
- 配置GitLab的Nginx配置文件
| |
- 启动GitLab和Nginx服务
| |
访问GitLab,终于见到了GitLab页面了!

GitLab WEB界面配置
设置GitLab管理员root的密码为"1234567890",并重新登陆,进入主页:

新建一个用户:

登陆邮箱查看邮件,验证账号:

重置密码:

普通账号登陆:

管理员账号新建组(Group)和项目(Project),并添加组成员,并给予开发者权限:

管理员账号将普通账号加入到项目中后,普通用户就可以看到相应的项目:

- 在服务器上面创建一个普通用户,并切换到普通用户下,然后创建
SSH KEY
| |
- 普通用户在WEB界面添加SSH KEY

- 配置
git环境
| |
- 克隆下载项目文件
| |
- 提交修改
| |
可以发现私有项目,开发人员不能直接合入!
在WEB界面上操作也可以发现无法合入:

- 通过http方式下载项目文件
| |
可以发现通过http方式下载的私有项目,开发人员不能直接合入!
- 为管理员创建SSH KEY
| |
并将公钥加入到SSH KEY配置界面中,忽略。
- 配置git环境
| |
- 通过SSH克隆下载项目文件,并提交修改
| |
- 通过HTTP方式克隆下载项目文件,并提交修改
| |
可以发现项目的owner拥有者可以通过SSH或HTTP方式克隆和PUSH数据到项目中,但通过HTTP方式下载和提交修改时都需要输入用户名和密码。
在WEB界面上可以看到刚才的两次提交:

项目成员权限请参考:
项目流水线Pipeline是失败的,需要配置gitlab-runner才能生效,后续补充!
GitLab常用命令
- 启动服务:
gitlab-ctl start - 查看状态:
gitlab-ctl status - 停掉服务:
gitlab-ctl stop - 重启服务:
gitlab-ctl restart - 让配置生效:
gitlab-ctl reconfigure - 查看GitLab版本:
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
初始化GitLab配置文件的脚本文件
init_gitlab_conf.sh脚本内容如下:
| |
参考:
- httpd访问网络配置httpd_can_network_connect
- gitlab介绍及使用
- GitLab发布全球开发者报告,开源仍是主流!
- Nginx解决open()failed (13: Permission denied) while reading upstream的问题
- CentOS related Nginx notes
- Project members permissions
- GitLab各类型账号的权限
- Omnibus GitLab documentation
- Gitlab 8 在 CentOS 安装(注:此文档指出SELinux问题的解决办法思路)
- SELinux policy for nginx and GitLab unix socket in Fedora 19
- using-a-non-bundled-web-server
- testing-the-smtp-configuration
