2019-05-20 · Develop

如何在CentOS7上部署GitLab服务器

简介

GitLab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库。
由于 GitLab 依赖了很多的服务组件,如 Nginx,Redis 等,所以官方提供了一键安装工具 omnibus 。本文基于 omnibus 进行搭建简单的版本控制服务器。

前置条件

Omnibus 安装

安装过程也可以参考文档GitLab Installation
1. 安装环境依赖组件

yum install -y curl policycoreutils openssh-server openssh-clients postfix

2. 配置 yum 仓库

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

3. 启动 postfix 邮件服务

systemctl start postfix && systemctl enable postfix

此处如果出现如下的错误

Job for postfix.service failed because the control process exited with error code. See "systemctl status postfix.service" and "journalctl -xe" for details.

可以修改文件/etc/postfix/main.cf 如下的两行配置

inet_protocols = ipv4
inet_interfaces = all

4. 安装gitlab-ce社区一键安装包

yum install -y gitlab-ce

5. 依次创建私钥、CSR证书、CRT签署证书、pem证书

# 创建证书目录
mkdir -p /etc/gitlab/ssl
# 创建私钥
openssl genrsa -out "/etc/gitlab/ssl/gitlab.example.com.key" 2048
# 创建CSR证书
openssl req -new -key "/etc/gitlab/ssl/gitlab.example.com.key" -out "/etc/gitlab/ssl/gitlab.example.com.csr"
# 创建CRT证书
openssl x509 -req -days 365 -in "/etc/gitlab/ssl/gitlab.example.com.csr" -signkey "/etc/gitlab/ssl/gitlab.example.com.key" -out "/etc/gitlab/ssl/gitlab.example.com.crt"
# 创建pem证书
openssl dhparam -out /etc/gitlab/ssl/dhparams.pem 2048
# 修改证书权限
chmod 600 /etc/gitlab/ssl/*

6. 编辑gitlab配置参数文件/etc/gitlab/gitlab.rb修改如下内容

external_url 'https://gitlab.example.com'

nginx['redirect_http_to_https'] = true

# nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.example.com.crt"

# nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.example.com.key"

# nginx['ssl_dhparam'] = /etc/gitlab/ssl/dhparams.pem

除了ssl配置外,还可以配置邮件发送配置(此处以163邮箱为例),具体的配置也可以参数SMTP settings

# 配置发送邮箱
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 25 
gitlab_rails['smtp_user_name'] = "smtp user@163.com"
gitlab_rails['smtp_password'] = "password"
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
# 修改gitlab配置的发信人
gitlab_rails['gitlab_email_from'] = "smtp user@163.com"
user["git_user_email"] = "smtp user@163.com"

重启服务以便应用以上配置

gitlab-ctl reconfigure

7. 配置nginx代理配置

vim /var/opt/gitlab/nginx/conf/gitlab-http.conf
# 在server_name下面配置http转https配置
# server_name gitlab.example.com;
# rewrite ^(.*)$ https://$host$1 permanent;

8.宿主机上配置hosts映射域名(如果是在虚拟机等VM环境测试的情况)

192.168.145.128	gitlab.example.com

9.在浏览器访问https://gitlab.example.com/
gitlab-index

克隆代码

此时创建的仓库,在克隆的时候会出现ssl证书的错误。那是通过HTTPS访问Git远程仓库,如果服务器的SSL证书未经过第三方机构签署,那么Git就会报错。这是十分合理的设计,毕竟未知的没有签署过的证书意味着很大安全风险。现在我们需要使用如下命令进行代码的克隆

git -c http.sslVerify=false clone https://gitlab.example.com/test-repo.git