CenOS7安装GitLab(使用外部Nginx配置)并配置HTTPS协议
本文讲解在CentOS7系统中安装GitLab(使用外部Nginx配置)并配置HTTPS协议进行加密传输数据。
实验环境
- server服务端: 操作系统为CentOS 7.6,IP:192.168.56.14, git:2.16.5。
- 宿主机:Windows 10,IP:192.168.1.8, git:git version 2.21.0.windows.1。
查看server服务端信息:
| |
安装GitLab
参考https://about.gitlab.com/install/#centos-7在CentOS7上面安装Omnibus package。
安装依赖
安装必要依赖,并开启防火墙放行80和443端口:
| |
新增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版本:
| |
配置GitLab配置文件
GitLab配置文件存放路径为/etc/gitlab/gitlab.rb,我们先备份一份原始配置文件:
| |
外部URL(external URL)配置
- 为了给用户展示正确的仓库克隆链接,需要设置external URL。
- 外部URL可以分多种形式:
- IP地址形式的URL,开放80端口
- 域名形式的URL,开放80端口
- 使用CA认证的URL,开放443端口
第一种方式通过IP地址形式的URL开放80端口,可以参考CenOS7安装GitLab(使用外部Nginx配置)。
我们今天使用域名形式和CA认证的URL。先尝试使用域名形式的URL。
- 13 external_url ‘http://gitlab.example.com’ —> external_url ‘http://hellogitlab.com’
说明:"—>" 表示修改为, 前面的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.1.0/24’]
使用命令修改:
| |
git仓库存储目录配置
git仓库存储目录默认为/var/opt/gitlab/git-data ,由于git仓库存储数据比较多,最好将存储目录设置LVM或者支持NFS协议(network file system protocol)的NAS或SAN网络存储设备对应的卷的路径,便于后面扩容。
::: tip 注意
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文件::
| |
你也可以通过点击下面的按钮进行下载。
download gitlab-omnibus-nginx.conf
将 gitlab-omnibus-nginx.conf移动到/etc/nginx/conf.d目录:
| |
并修改YOUR_SERVER_FQDN为域名:
- 31 server_name YOUR_SERVER_FQDN; —> server_name hellogitlab.com;
使用命令修改:
| |
禁用/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。
:::
配置宿主机IP、域名绑定关系
配置C:\Windows\System32\drivers\etc\hosts文件,增加以下内容:
| |
测试是否能够ping通hellogitlab.com:
| |
发现可以ping通过服务器,说明网络是通的。
关闭SELinux
查看SELinux的具体的工作状态:
| |
说明SELinux已经关闭!
访问GitLab
在Google浏览器中访问URL: http://hellogitlab.com/ ,可以看到GitLab页面了。

如果发现异常,可查看GitLab的错误日志文件/var/log/nginx/gitlab_error.log,另外检查SELinux是否关闭。
GitLab WEB界面配置
设置GitLab管理员root的密码为"1234567890",并重新登陆,进入主页:

新建一个用户,并设置为管理员:

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

点击链接"Click here to set your password"重置密码:

使用刚新建的管理员账号登陆:

创建一个新的个人项目:

点击"Create project"创建项目。
创建完成后,可以看到跳转到项目详情界面:

我们将宿主机上的个人公钥加到Gitlab上去,如果没有公钥,可以使用ssh-keygen -C your_email@example.com添加。
在WEB界面添加SSH KEY:

配置git环境:
| |
克隆下载项目文件:
| |
提交修改:
| |
可以发现合入成功!
在WEB界面上查看刚才的提交:

通过http方式下载项目文件:
| |
在克隆下载时,需要输入用户名和密码:

我们再次进行修改并提交:
| |
可以发现通过http方式也可以合入修改!
在WEB界面上查看刚才的提交:

GitLab HTTPS协议配置
下载配置文件
上述使用HTTP域名方式配置的GitLab正常可用,我们在此基础上配置HTTPS协议,使我们的GitLab更安全!
首先,我们下载gitlab-omnibus-ssl-nginx.conf配置文件:
| |
你也可以通过点击下面的按钮进行下载。
download gitlab-omnibus-ssl-nginx.conf
修改配置
将配置文件复制到/etc/nginx/conf.d/目录下:
| |
查看配置文件,我们关注35、46、52-54行:

我们将YOUR_SERVER_FQDN替换成域名地址hellogitlab.com:
| |
创建自签名证书
创建自签名证书存放目录,并创建证书:
| |
重新配置GitLab
先将http方式的配置文件备份:
| |
停止GitLab和Nginx:
| |
修改Gitlab配置文件/etc/gitlab/gitlab.rb,将13行的http://hellogitlab.com 替换成https://hellogitlab.com:
| |
让配置生效:
| |
启动GitLab和Nginx服务:
| |
访问GitLab
在Google浏览器中访问URL:http://hellogitlab.com/ ,可以看到页面自动跳转到https://hellogitlab.com/了:

我们点击"高级"–“继续前往hellogitlab.com(不安全)",可以看到打开了 https://hellogitlab.com/页面:

我们使用"meizhaohui"这个账号进行登陆,发现可以登陆上,登陆后的界面如下:

查看项目的详情界面,点击"clone"按钮,查看URL地址是否更新,可以发现URL已经变成https开头了:

我们在宿主机上面使用https方式克隆下载仓库,也需要输入用户名和密码:

修改文件并提交:
| |
在WEB界面上查看刚才的提交:

我们再在ssh方式下载的目录更新一下,看能否拉出最新的修改:
| |
可以看到最新的修改都已经成功下载下来,说明配置没有问题!
我们再通过SSH方式提交一次修改,做最后的检查:
| |
发现可以正常提交,并且在WEB界面上面可以看到提交的更新:

GitLab汉化
上述的操作可以确定HTTPS协议的GitLab已经配置好了!现在做最后的优化,进行GitLab汉化。
你可以通过下面这个命令下载汉化包:
| |
我使用之前下载的汉化包直接上传到服务器上:
| |
停止GitLab和Nginx服务:
| |
说明GitLab相关服务已经停止。
备份/opt/gitlab/embedded/service/gitlab-rails/文件夹,防止后续操作失败导致GitLab无法运行:
| |
去除cp的别名,复制gitlab汉化包中的文件到/opt/gitlab/embedded/service/gitlab-rails/目录下:
| |
使配置生效:
| |
启动GitLab和Nginx服务:
| |
重新访问GitLab,可以看到中文页面了:

正常登陆。在"偏好"中设置"语言"是"简体中文”,重新登陆即可。
再次查看项目详情页面:

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
初始化HTTPS方式GitLab配置文件的脚本
download init_gitlab_https_conf.sh
脚本内容如下:
| |
