373ab589f9ab691ca839c6cac8cdef03
基于 Docker 部署自托管 Gitlab

一、前言

Git 无需多说,还不知道 Git 的程序猿不是好程序猿。随着 Git 的发展,诞生了许多 Git 的托管平台,比如: Github、Gitlab、oschina 等。每个平台都有各自的特点。

Github

  • 适用于开源项目( Github flow)
  • 私有仓库最近开始免费(协作人员有限制)
  • 国内访问速度慢

Gitlab

  • 适合团队协作
  • 支持无限的公有项目和私有项目
  • 支持自托管
  • 开源
  • 国内访问速度慢

OSChina

  • 适合团队协作
  • 私有仓库免费 5G 空间(协作人员有限制)
  • 国内访问速度快

对于团队来说选择托管的形式是很重要的,它将影响到团队的开发效率。笔者有幸使用过多种托管形式,以下是一些选择的观点,可供参考。

Github 是开源项目的不二选择,社区活跃,若团队从事的是开源项目那就选择 Github 吧。若团队项目主要是私有的,由于 Github 有人员的限制,如果人员很少的团队,那使用 Github 还是不错的选择。人员多的话,那就有钱就上吧,毕竟 Github 每个人都会用,对于开发者来说一致性友好。选择 Github 有一点要注意的是,访问速度较慢,团队尽量使用较好的网络(最好带梯子)

OSChina 在国内访问速度非常快,若团队讲究速度的话 OSChina 是个不错的选择。对于私有项目的限制,还是有钱就上吧。

难道就没有又快又免费的方案吗?答案就是 Gitlab 自托管,也就是本篇文章主要讲述的内容。Gitlab 其实分为 Gitlab.com(Gitlab 组织托管的)和自己托管的 Gitlab 。自托管的类型也很多样,收费标准和特性也不一样。

笔者所在的团队人数都超过了免费托管平台的限制,对速度的需求也比较大。在使用 Github、Gitlab.com 后,因其速度太慢,影响了持续集成,最后选择了自托管 Gitlab。

自托管的乐与悲

  • 速度快
  • 免费
  • 数据安全(全部的数据都在自己手上)
  • ......

  • 在外办公不便(当然可以部署在公网的 ip 上来解决)
  • 仓库迁移
  • 数据备份&恢复
  • 版本升级
  • ......

二、部署自托管 Gitlab

由于安装 Gitlab 的依赖很多,故笔者选择使用 Docker 进行部署。
Docker 部署 Gitlab 较为简单,可参考 https://docs.gitlab.com/omnibus/docker/

sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

这里需要注意几点

  • linux 下 srv 一般为向外界提供服务的文件夹。而在 Mac 上没有这个文件夹的,所以 Mac 的服务器最好映射到当前用户具有权限的目录,避免权限问题。

  • 官方文档上这里直接 pull 最近的版本 gitlab-ce:latest。在实际使用中,建议使用具体的版本,因为 gitlab 的备份和恢复要求版本一致。具体的版本号可到 https://hub.docker.com/r/gitlab/gitlab-ce/tags 查询,比如 gitlab/gitlab-ce:11.6.4-ce.0

  • restart always 可实现服务器重启后,自动启动 gitlab,建议开启

  • hostname 要是没有域名,指定 ip 地址即可

  • 22 号端口在 linux 上是默认的 ssh 访问端口,但这与 git 的 ssh 端口冲突,建议修改访问 linux 的 ssh 端口,否则会出现端口占用问题

这里以 Mac 下部署 gitlab-ce 11.6.4-ce.0 为例。

  1. 在当前用户的目录新建 gitlab 目录,用户存放数据。

  2. 执行 docer run 拉取并运行 gitlab。

    sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /Users/catchzeng/gitlab/config:/etc/gitlab \
    --volume /Users/catchzeng/gitlab/logs:/var/log/gitlab \
    --volume /Users/catchzeng/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:11.6.4-ce.0
  3. 等拉取 gitlab 镜像完毕后,可使用 docker ps 查看 gitlab 运行状态。

    cenghaihandeMacBook-Pro:~ catchzeng$ docker ps
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS                            PORTS                                                          NAMES
    06da9d6aff58        gitlab/gitlab-ce:11.6.4-ce.0   "/assets/wrapper"   2 minutes ago       Up 2 minutes (health: starting)   0.0.0.0:22->22 /tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   gitlab

    (health: starting) 表示正在启动中

    cenghaihandeMacBook-Pro:~ catchzeng$ docker ps
    CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS                   PORTS                                                          NAMES
    06da9d6aff58        gitlab/gitlab-ce:11.6.4-ce.0   "/assets/wrapper"   3 minutes ago       Up 3 minutes (healthy)   0.0.0.0:22->22/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   gitlab

    等待状态为 (healthy) 时,即表示已成功运行

  4. 访问 http://127.0.0.1 ,初次访问需要设置 root 管理员密码

  5. 使用用户名 root 和刚设置的密码登录即可进入 gitlab 主页

三、配置 Gitlab

1. 外观

点击设置按钮

在外观栏可查看全部的配置项。这里以修改 logo 为例,其他外观项可根据项目需求针对性修改。

top Created with Sketch.