近段时间升级了下家用服务器的配置,将原部署在群晖中的Gitlab部署到了新服务器中,本文记录了在CentOS7上基于docker部署极狐Gitlab的步骤。

创建CentOS7虚拟机

使用Esxi 8.0创建CentOS 7的虚拟机,该部分见文章Esxi8.0部署CentOS 7

极狐Gitlab比较消耗内存,这里建议虚拟机内存最少设置为8G

在CentOS7上安装docker

CentOS 7上安装docker,该部分见文章CentOS7安装docker

创建环境变量GITLAB_HOME

创建环境变量,方便统一管理装载卷的位置,这里将gitlab的文件持久化到/opt/gitlab-jh下:

sudo vim ~/.bash_profile

i进入编辑模式,将以下内容复制进去,按esc退出编辑模式,输入:wq退出编辑并保存:

export GITLAB_HOME=/opt/gitlab-jh

创建gitlab-jh文件夹

# 进入opt目录
cd /opt
# 创建gitlab-jh目录,用于持久化极狐gitlab的数据文件
sudo mkdir gitlab-jh
# 进入gitlab-jh
cd /gitlab-jh
# 创建config,用于持久化配置文件
sudo mkdir config
# 创建data,用于持久化数据文件
sudo mkdir data
# 创建logs,用于持久化日志文件
sudo mkdir logs

使用docker安装极狐Gitlab

sudo docker run --detach \
--publish 443:443 --publish 80:80 --publish 22222:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
--shm-size 256m \
--privileged=true \
registry.gitlab.cn/omnibus/gitlab-jh:latest

说明:

  • --publish 443:443 --publish 80:80 --publish 22222:22:由于本次虚拟机中仅安装极狐Gitlab,顾将容器的44380端口映射到虚拟机的44380上,但虚拟机的22端口需要在远程连接时使用,所以将容器的22端口映射到虚拟机的22222端口;
  • --name gitlab:设置容器名称;
  • --restart always:设置容器自动启动;
  • --volume $GITLAB_HOME/config:/etc/gitlab:映射配置文件目录;
  • --volume $GITLAB_HOME/data:/var/opt/gitlab:映射数据文件目录;
  • --volume $GITLAB_HOME/logs:/var/log/gitlab:映射日志文件目录;
  • shm-size 256m
  • --privileged=true:使用特权启动容器,否则容器没有权限将文件创建到宿主机目录;

查看容器状态

# 查看docker容器状态
sudo docker ps

# 若STATUS显示healthy时,即表示容器已成功启动
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a10a2b6afb20 registry.gitlab.cn/omnibus/gitlab-jh:latest "/assets/wrapper" 18 hours ago Up 18 hours (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:22222->22/tcp gitlab

至此gitlab已经创建并启动完毕,初始用户名为root,初始密码需要通过sudo cat /opt/gitlab-jh/config/initial_root_password命令进行查看,建议处理登录后首先修改root用户的密码。

强制使用https打开gitlab

上传SSL证书

  • 创建SSL证书目录
    cd /opt/gitlab-jh/config
    sudo mkdir ssl
  • 将证书文件(xxx.crtxxx.key)上传至ssl目录

修改配置文件

# 修改gitlab.rb文件
sudo vim /opt/gitlab-jh/config/gitlab.rb

可以按/后输入内容进行查找,按回车后可定位至查找内容处,然后再按i进入编辑模式,修改如下内容,修改完成后按:wq保存退出:

# 配置为虚拟机https地址,由于这里容器的443的端口映射到了宿主机的443端口,所以这里配置为https://虚拟机IP,若映射到了其他端口,则可以配置为https://虚拟机IP:端口号
external_url 'https://虚拟机IP'

# 开启内部nginx
nginx['enable'] = true
# 将http地址重定向到https地址
nginx['redirect_http_to_https'] = true
# http访问地址的端口号
nginx['redirect_http_to_https_port'] = 80
# SSL证书路径
nginx['ssl_certificate'] = "/etc/gitlab/ssl/xxx.crt"
# 密钥路径
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/xxx.key"

配置邮件服务(这里使用QQ邮箱)

sudo vim /opt/gitlab-jh/config/gitlab.rb

可以按/后输入内容进行查找,按回车后可定位至查找内容处,然后再按i进入编辑模式,修改如下内容,修改完成后按:wq保存退出:

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
# QQ邮箱地址
gitlab_rails['smtp_user_name'] = "xxxxxx@qq.com"
# QQ邮箱授权码
gitlab_rails['smtp_password'] = "xxxxxxxxxx"
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_tls'] = true
# QQ邮箱地址
gitlab_rails['gitlab_email_from'] = 'xxxxxx@qq.com'
# QQ邮箱地址
user['git_user_email'] = "xxxxxx@qq.com"