快速部署Gitlab源码管理组件

Gitlab简介

GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。同时Gitlab集成了一系列的CI功能。不得不说,Gitlab在企业中是的使用率非常高。

Rainbond非常推荐用户使用Git代码仓库管理代码,从而获取更好的源代码管理和自动化CI体验。话不多说,接下来我们用10分钟的时间完成Gitlab服务在Rainbond的完整部署。

准备工作

  • 准备一个可用的域名(如果你可以准备),比如 git.example.com
  • 准备域名对应的证书(如果你可以准备)
  • Rainbond平台已安装完成,参考文档Rainbond快速安装
  • Rainbond平台处在能够连接互联网的环境下。

部署步骤

本教程我们将采用基于已制作完成的Docker镜像安装的方式部署Gitlab。部署完成后在Rainbond的运行效果如下:

我们在Rainbond部署一个开源的项目,基于Docker镜像的方式是最快,最简单的方式,特别是一些根据云原生的建议制作的镜像在Rainbond运行兼容性和体验都非常优越。

我们今天部署的Gitlab组件包括Postgresql组件、Redis组件和Gitlab-Server组件,它们的网络依赖关系如上图你看到一样,我们根据依赖关系从小到上依次部署。

首先创建应用 GItlab然后从应用管理页面开始添加组件:

我们采用基于DockerRun命令的方式创建组件,参考文档 基于镜像创建组件 ,

此次部署的Gitlab镜像由社区提供,是目前使用最广的镜像。源码参考 docker-gitlab

部署Postgresql组件

添加组件,基于以下DockerRun命令,Rainbond将从下面的命令中获取镜像名称和持久化存储目录。

docker run --name gitlab-postgresql -d \
    --volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \
    sameersbn/postgresql:10

组件构建源识别完成后,通常的过程是直接创建并启动,但是我们这里还需要设置组件的运行类型为有状态组件,并且还需要设置一下连接信息。因此我们需要选择创建不启动。方式如下:

强调一下,取消图中红色框框中的单选框,这一步非常重要

确认后页面直接跳转到组件管理页面,我们做以下几步设置:

  1. 更改端口别名,设置连接信息

进入组件端口管理页面,服务已默认添加了5432端口,更改端口协议为TCP, 打开端口的对内服务按钮,同时单击”使用别名”后方的端口别名信息,在弹出窗中设置端口别名为 “DB”。确认后将自动生成DB_HOST和DB_POST两个连接信息,在组件”依赖”页面可以查询连接信息, 同时我们继续添加以下连接信息:

变量名 说明
DB_EXTENSION pg_trgm
DB_NAME gitlabhq_production 数据库名称
DB_PASS password 密码,你自己可以随便定义值
DB_USER gitlab 连接数据库用户名

添加这些连接信息有两个作用:

  • Postgresql将读取这些变量自动创建用户和数据库
  • Postgresql服务被Gitlab-Server依赖后将注入到Gitlab-Server环境中,Gitlab-Server将根据这些变量信息连接数据库。

更多信息参考文档 组件端口管理 组件连接信息管理

  1. 更改组件部署类型

由于Postgresql属于数据库类,我们需要将组件部署类型设置为有状态组件,进入组件”其他设置”页面,在”基础信息”信息中将组件的部署类型切换为有状态组件。

  1. 创建组件

设置完成,点击构建开始构建并启动组件,这时候我们可以开始下一个组件的部署了。

部署Redis组件

部署Redis组件的过程与Postgresql一致,唯一的不同是不需要添加过多的连接信息。

  1. 基于下述DockerRun命令添加组件
docker run --name gitlab-redis -d \
    --volume /srv/docker/gitlab/redis:/var/lib/redis \
    sameersbn/redis:4.0.9-1
  1. 完成检查后设置创建不启动,进入组件管理页面
  2. 设置6379端口别名为REDIS,并开启端口对内服务。完成后在组件依赖页面可以查看到REDIS_HOST和REDIS_PORT两个连接信息变量,此变量将被注入到Gitlab组件中。
  3. 更改组件的部署类型为有状态组件。
  4. 创建组件,现在可以进入下一个环节了。

部署Gitlab-Server组件

  1. 使用下述的DockerRun命令创建组件,选择创建不启动。
docker run --name gitlab -d \
    --publish 10022:22 --publish 10080:80 \
    -e GITLAB_PORT=80 \
    -e GITLAB_HOST=git.example.com \
    -e GITLAB_SSH_PORT=10022 \
    -e GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string \
    -e GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string \
    -e GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string \
    --volume /srv/docker/gitlab/gitlab:/home/git/data \
    sameersbn/gitlab:11.8.2

这里需要说明的是其中的几个变量信息:

变量 说明
GITLAB_PORT 80
GITLAB_HOST git.example.com 之前准备的域名,如果没有准备后续设置Rainbond默认分配的域名即可(创建后可更改)
GITLAB_SSH_PORT 20222 Gitlab server 22端口开启外网访问后分配的端口(创建后可更改)
GITLAB_SSH_HOST 10.10.10.10 Gitlab server 22端口开启外网访问后的IP(创建后可更改)
  1. 创建组件后依赖上面建立的两个组件。直接进入拓扑图编辑模式,将Gitlab Server与redis和postgresql组件连线即可。参考文档 建立组件依赖
  2. 构建组件,等待组件启动完成。

注意,Gitlab组件第一次启动过程比较缓慢,等待组件启动完成。

配置网关访问策略

gitlab组件提供80端口的HTTP访问和22端口的SSH代码访问,分别为其添加访问策略。

  • 80端口,配置HTTP访问策略,使用预先准备的域名比如(git.example.com),这与GITLAB_HOST配置的必须一致。绑定域名对应的证书。

  • 添加完成后进入访问策略列表,选择刚刚添加的策略,进入参数配置,将”上传限制”调整为10000 Mb,基本就是不限制了。

参考文档 [添加HTTP访问策略]()

  • 为22端口添加TCP策略,生成的IP和端口需要与GITLAB_SSH_HOST GITLAB_SSH_PORT 两个变量一致。

到此,Gitlab组件部署完成,你可以直接访问组件了。第一次进入时将设置root账号的密码。

FAQ

  • 安装完成,访问返回Gitlab的502页面

这个时候Gitlab正在进行初始化和启动过程,内部的某些进程还未启动完成。这个时候只需要等待组件启动完成即可,第一次启动大概5-10分钟。

  • 上述过程还是有点复杂,能不能直接一键部署。

那当然是可以的,我已将Gitlab组件分享到Rainbond公有应用市场,供给Rainbond用户一键安装,应用市场搜索”Gitlab代码仓库组件” 选择版本v11.8.2,同步后直接安装即可。需要注意的是,安装完成后需要根据你的网关访问策略重新配置Gitlab的GITLAB_HOST、GITLAB_SSH_HOST等信息。

暂无其他答疑,如你有疑问,请留言。