Skip to main content
Version: v5.1

快速部署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_EXTENSIONpg_trgm
DB_NAMEgitlabhq_production数据库名称
DB_PASSpassword密码,你自己可以随便定义值
DB_USERgitlab连接数据库用户名

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

  • 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_PORT80
GITLAB_HOSTgit.example.com之前准备的域名,如果没有准备后续设置 Rainbond 默认分配的域名即可(创建后可更改)
GITLAB_SSH_PORT20222Gitlab server 22 端口开启外网访问后分配的端口(创建后可更改)
GITLAB_SSH_HOST10.10.10.10Gitlab 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 等信息。

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