使用 Docker 安装 GitLab + 汉化版

GitLab 在众多 Git 服务器中算是颜值和能力都不错的。但是,有一个缺点就是安装不便。
当然,也有一键安装包,但安装过程中仍有可能出问题,而且维护升级也不简单。这次搭建新的 Git 服务器,尝试通过 docker 安装,效果非常好。

依赖环境

宿主服务器是 Centos 7。之上只安装了 Git 和 docker。docker 版本是 1.6.2 。

docker 镜像安装 GitLab

GitLab 镜像使用的是 https://github.com/sameersbn/docker-gitlab (如果需要汉化版,请先看下面的汉化安装)。安装的时候选用的最高版本 7.13.2。
另外,这个镜像里面不包含 redis 和 数据库。所以还使用了另外两个镜像:

下载镜像

下载镜像比较简单

1
2
3
sudo docker pull sameersbn/redis:latest
sudo docker pull sameersbn/postgresql:9.4-2
sudo docker pull sameersbn/gitlab:7.13.2

其中 gitlab 的镜像比较大,有 600+M, 其他两个在 200M 左右。下载情况就靠网络了。我在使用docker镜像的情况下都失败了一次。

安装

安装实际上比较简单。就是 docker run …… 就好了。主要是注意参数配置。

PostgreSql

1
2
3
4
5
6
7
8
sudo mkdir -p /srv/docker/gitlab/postgresql
sudo chcon -Rt svirt_sandbox_file_t /srv/docker/gitlab/postgresql

sudo docker run --name gitlab-postgresql -tid \
-e 'DB_NAME=gitlabhq_production' \
-e 'DB_USER=gitlab' -e 'DB_PASS=password' \
-v /srv/docker/gitlab/postgresql:/var/lib/postgresql \
sameersbn/postgresql:9.4-2

命令中主要注意的是两点:

  • chcon ··· 主要是考虑 selinux 开启的情况,这个大家看情况执行。
  • docker run 命令中中的 -v 是为了将宿主服务器的目录挂载到 docker 内,为了持久化数据,下面的其他容器也一样。

Redis

1
2
3
4
5
6
sudo mkdir -p /srv/docker/gitlab/redis
sudo chcon -Rt svirt_sandbox_file_t /srv/docker/gitlab/redis

sudo docker run --name gitlab-redis -tid \
-v /srv/docker/gitlab/redis:/var/lib/redis \
sameersbn/redis:latest

这个和上面差不多,redis 没做特殊配置。

GitLab

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
sudo mkdir -p /srv/docker/gitlab/gitlab
sudo chcon -Rt svirt_sandbox_file_t /srv/docker/gitlab/gitlab

sudo docker run --name gitlab -tid \
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \
-p 10022:22 -p 80:80 \
-e 'GITLAB_HOST=gitlab.example.cn' \
-e 'GITLAB_PORT=80' -e 'GITLAB_SSH_PORT=10022' \
-e 'GITLAB_BACKUPS=daily' \
-e 'GITLAB_BACKUP_TIME=20:00' \
-e 'GITLAB_TIMEZONE=Beijing' \
-e 'GITLAB_EMAIL=git@example.cn' -e 'GITLAB_EMAIL_DISPLAY_NAME=Git' -e 'GITLAB_EMAIL_REPLY_TO=noreply@example.cn' \
-e 'NGINX_MAX_UPLOAD_SIZE=60m' \
-e 'SMTP_DOMAIN=smtp.example.com' -e 'SMTP_HOST=smtp.example.com' -e 'SMTP_PORT=25' \
-e 'SMTP_USER=git@example.cn' -e 'SMTP_PASS=example' \
-e 'LDAP_ENABLED=true' \
-e 'LDAP_HOST=218.104.82.226' -e 'LDAP_PORT=389' -e 'LDAP_METHOD=plain' \
-e 'LDAP_UID=sAMAccountName' \
-e 'LDAP_BIND_DN=cn=ldapuser,cn=users,dc=example,dc=com' \
-e 'LDAP_PASS=example' \
-e 'LDAP_ACTIVE_DIRECTORY=true' \
-e 'LDAP_BASE=cn=users,dc=example,dc=com' \
-e 'LDAP_BLOCK_AUTO_CREATED_USERS=false' \
-e 'GITLAB_GRAVATAR_ENABLED=false' \
-v /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:7.13.2

上面的 GitLab 的 docker 命令参数要多一点,主要是其中配置了邮箱和 LDAP 服务器。大家可以参照官方文档自行增删配置。

因为这台运行 docker 的宿主服务器就是一台专门为 GitLab 申请的虚拟机,所以后面就没有配置独立IP。
直接在命令中通过 -p 10022:22 -p 80:80 指定了服务器的端口映射。

这里面有一点比较特殊,GitLab 的默认时间是 UTC 时间,所以通过 -e 'GITLAB_TIMEZONE=Beijing' 指定了 +8 时区。
如果你使用自带的 backup 配置的话也要注意,默认的备份时间 04:00 对应到我们这边实际上是中午 12:00 了。所以我通过 -e 'GITLAB_BACKUP_TIME=20:00'指定了备份时间为北京时间的 04:00。当然,这个备份时间大家自己看着调了。

最后的 GitLab 容器通过 --link gitlab-postgresql:postgresql --link gitlab-redis:redisio link 到 redis 和 postgresql ,所以其他两个容器的 IP 、端口和数据库的配置信息不用指定。镜像中已经做了处理。
当然,其他两个容器肯定要比 GitLab 先启动。

容器启动后等一会(初始化时间)就可以正常访问和配置了。

账户:root
密码:5iveL!fe

开机启动

开机启动只要把对应的 docker run命令加入到 /etc/rc.d/rc.local中就可以了。需要注意的是,docker 相关命令要在 docker 服务启动的情况下才能运行,所以记得把docker服务加入开机启动。

rc.local 添加内容:

1
2
3
docker start gitlab-redis
docker start gitlab-postgresql
docker start gitlab

汉化安装

GitLab 的汉化已经有 @larryli 同学在做,仓库地址: https://gitlab.com/larryli/gitlab 。非常感谢他的无私奉献。

当然,通过我们上面给出的 docker-gitlab 的官方镜像是安装不了汉化版的。所以我在官方镜像的基础上 fork 了一份,将安装的版本改为 @larryli 的汉化版本。

比较坑的是,由于众所周知的“网络原因”, 在国内 build 镜像会遭遇大量的失败,太打击了。所以一番折腾后又把其他我这边很难下载的东西都改到国内了,浪费了好多时间,简直心酸。修改后的仓库: https://github.com/clarkhan/docker-gitlab 。目前没有把 build 的镜像放到 docker 仓库中,大家需要可以自己 clone 下来 build 一下,应该没问题。

使用汉化的镜像,如上面介绍的一样安装就可以了。

谢谢鼓励