介绍

GitLab 是开源的可私有部署的 Git 仓库管理服务器,提供 wiki 与 issues 功能。

系列文章

这一系列文章中的软件是在同一台机器上安装配置的,完整地记录了配置过程。解决了同时部署各种服务之间可能会产生的问题,最终将各种服务整合到一起。每个服务都配置使用域名访问,便于使用。

账号系统未使用 LDAP,因此 Jira 与 GitLab 账号是独立的,Jenkins 与 Mattermost 使用 GitLab 账号登录。

选择

GitLab 有多种安装方式:

  • Omnibus package
  • Docker
  • Vagrant
  • 其他 …

由于使用环境限定在公司内,出于性能及维护考虑,选择使用 Omnibus package 直接安装在本地,获取最大性能的同时易于维护、升级、备份。

环境

  • CentOS 7.6 1810
  • GitLab 11.7.0

访问

IP

  • 难以记忆,是一串相当长的数字
  • 同一台机器只能开启一个 HTTP 服务,因为无法通过 Host 自动分配到不同服务中

域名

  • 方便记忆,长度较短,且浏览器会提供自动完成,方便输入
  • 同一台机器可以开启多个 HTTP 服务,只要域名不同即可

DNS 服务选择

  • 内网 DNS 出于成本考虑一般使用的是路由器自带的 DNS,但是路由器不稳定,经常出现域名无法解析、解析出错等等。
  • 很多机器在配置网络时并未使用内网默认的 DNS,有可能会自行切换到腾迅 DNS、阿里 DNS、114或运营商之类的 DNS,导致无法使用内网 DNS。
  • 外网 DNS 可以覆盖所有设置,只是域名可能会比较长。

子域名

只需要简单地添加 A 记录即可,如 git.company.com,IP 是内网地址如 192.168.1.100

安装

使用包管理器安装时会出现网络问题导致无法下载,可以尝试前往 el/7/gitlab-ee-11.7.0-ee.0.el7.x86_64.rpm - gitlab/gitlab-ee · packages.gitlab.com 下载最新版本并上传到服务器上进行安装。

查找最新版本可以前往 gitlab/gitlab-ee - Packages · packages.gitlab.com,然后查找 el/7 的最新版本(el/7 代表 Enterprise Linux 7,适用于 CentOS 7)

命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

# sudo EXTERNAL_URL="http://git.company.com" yum install -y gitlab
sudo EXTERNAL_URL="http://git.company.com" yum install -y gitlab-ee-11.7.0-ee.0.el7.x86_64.rpm

配置

外部地址

如果之前配置的是 IP 地址,可以在这里修改 EXTERNAL_URL 为域名,然后重启 GitLab

1
2
vi /etc/gitlab/gitlab.rb
gitlab-ctl restart

同服务器共享 Nginx

如果有多个服务如 GitLab、Jenkins、Jira 部署在同一台机器上,那么需要安装公用 Nginx 作转发用,而 GitLab 自带 Nginx,需要先禁用。

官方文档中这里写得比较详细,各个选项可能会有什么问题都介绍了,建议参考。

安装公用 Nginx

vi /etc/yum.repos.d/nginx.repo

1
2
3
4
5
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

安装并配置开机启动

1
2
3
yum install -y nginx
systemctl enable nginx
systemctl start nginx

禁用 GitLab Nginx

vi /etc/gitlab/gitlab.rb

1
2
nginx['enable'] = false
web_server['external_users'] = ['nginx']

需要提前安装好 Nginx 再执行重新配置

gitlab-ctl reconfigure

禁用 SELinux

CentOS 7 默认开启 SELinux,需要关闭 SELinux,否则会因为权限问题无法访问。不管用 unix socket 还是 http port 方式都会有权限问题。

  • unix socket 2019/01/30 15:07:07 [crit] 6942#6942: *18 connect() to unix:/var/opt/gitlab/gitlab-workhorse/socket failed (13: Permission denied) while connecting to upstream, client: 192.168.5.116, server: git.company.com, request: "GET / HTTP/1.1", upstream: "http://unix:/var/opt/gitlab/gitlab-workhorse/socket:/", host: "git.company.com"
  • http port 2019/01/30 16:01:21 [crit] 16410#16410: *1 connect() to 127.0.0.1:8181 failed (13: Permission denied) while connecting to upstream, client: 192.168.5.116, server: git.company.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8181/", host: "git.company.com"
1
2
3
4
getenforce
setenforce Permissive
getenforce
vi /etc/selinux/config

配置公用 Nginx

复制 https://gitlab.com/gitlab-org/gitlab-recipes/blob/master/web-server/nginx/gitlab-omnibus-nginx.conf 内容,将 YOUR_SERVER_FQDN 替换为 git.company.com 域名。

放到 /etc/nginx/conf.d/gitlab.conf

systemctl restart nginx

root

访问 http://git.company.com

首次访问需要设置 root 的密码

存储目录

将默认目录修改为 /data/gitlab/git-data 中。

CI/CD

如果还未开始使用 CI/CD,那么建议禁用全局 CI/CD,否则新建项目中的每一次推送都会触发 CI/CD 构建失败。

禁用 Default to Auto DevOps pipeline for all projects 并保存

Gravatar

由于 Gravatar 服务器在国外,连接较慢,打开页面时会显著降低打开速度,建议禁用 Gravatar enabled

禁用 Gravatar enabled 并保存