gitlab 是一个非常方便的代码管理工具。直接安装配置 gitlab 十分麻烦,还容易把环境搞坏。而通过 docker,则可以在一个隔离的环境快速部署 gitlab。通过 docker 运行起来之后,还需要对 gitlab 进行一些配置。虽然是 docker 环境,还是有数据备份和恢复的需求。

1. docker 安装 gitlab

需要安装 docker,如何安装 docker,请参考本网站。

1.1 docker 获取镜像(非必要)

一般来说并不需要,如果 docker 运行时发现缺少相关包,会自动拉取。但也可手动操作 gitlab-ce(Community Edition):

docker pull gitlab/gitlab-ce

docker images | grep gitlab

1.2 用 docker 启动 gitlab

BASEDIR=/data/.docker
docker run \
-d \
-p 444:443 \
-p 8083:80 \
-p 222:22 \
--name gitlab \
--restart always \
-v $BASEDIR/config:/etc/gitlab \
-v $BASEDIR/logs:/var/log/gitlab \
-v $BASEDIR/data:/var/opt/gitlab \
gitlab/gitlab-ce
  • 端口映射
    • 444 端口映射 443 端口,gitlab 支持用 https
    • 8083 端口映射 80 端口,gitlab 支持 http
    • 222 端口映射 22 端口,用于 ssh
  • 存储映射
    • /etc/gitlab 记录了配置
    • /etc/log/gitlab 是 log 文件
    • /var/opt/gitlab 中记录了高级配置

要等待一段时间(gitlab 启动速度真是慢呢)。在宿主机上访问 localhost:8083 就能进入 gitlab 的配置页面了。

然而通常宿主机是没有图形界面的,而是在另外的机器上通过 http://host_ip:8083 的方式访问。此时需要在宿主机(host)上打开防火墙 8083 端口。

2. 配置 gitlab

2.1 账户密码配置

首先会让配置 root 账户的密码。root 账户 id1。root 账户密码一定要配置,后面再在创建自己账户的时候,需要这个账户的同意。

配置 gitlab 账户

配置完成之后退出 root 账户,再”注册”一个账户,后面所有操作都在新注册的账户上进行。注册完成之后,还需再次登录 root 账户,同意自己注册的那个账户。

2.2 git clone 网址配置

git clone 时候可以选择 http 或者 ssh 协议。这些协议默认地址是容器名字,出了容器环境就不能使用了,需要修改为宿主机上地址。另外,在宿主机上的 gitlab 的 ssh 端口被映射为 222,也需要配置。有两种方式可以修改:

宿主机中修改 $BASE_DIR/config/gitlab.rb

# 配置http协议所使用的访问地址,如果不加端口号默认为80
external_url 'http://10.10.10.11:8083'
# 这里修改会影响nginx的运行端口,修改完成之后需要修改docker运行的命令

gitlab_rails['gitlab_ssh_host'] = '10.10.10.11'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口

一定要转发 22 端口到自己配置的 gitlab_shell_ssh_port。删除原来的容器重新启动:

docker stop gitlab
docker rm gitlab
BASEDIR=/data/.docker
docker run \
-d \
-p 444:443 \
-p 8083:8083 \
-p 222:22 \
--name gitlab \
--restart always \
-v $BASEDIR/config:/etc/gitlab \
-v $BASEDIR/logs:/var/log/gitlab \
-v $BASEDIR/data:/var/opt/gitlab \
gitlab/gitlab-ce

使用环境变量

在 docker 启动的命令新增环境变量:

docker stop gitlab
docker rm gitlab
BASEDIR=/data/.docker
IP=host_ip
GITLAB_PORT=8083
docker run \
-d \
-p 444:443 \
-p $GITLAB_PORT:8083 \
-p 222:22 \
--name gitlab \
--restart always \
-v $BASEDIR/config:/etc/gitlab \
-v $BASEDIR/logs:/var/log/gitlab \
-v $BASEDIR/data:/var/opt/gitlab \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://${IP}:${GITLAB_PORT}'; \
    gitlab_rails['lfs_enabled'] = true; \
    gitlab_rails['gitlab_ssh_host'] = '${IP}'; \
    gitlab_rails['gitlab_shell_ssh_port'] = ${GITLAB_SSH_PORT};"
gitlab/gitlab-ce

再进入网页,就会发现 ssh 和 http 的地址都变了。

3. gitlab 备份与恢复

3.1 备份 gitlab 到文件

数据备份很重要,要支持备份,则需要在启动过程中新增环境变量:

gitlab_rails['manage_backup_path'] = true; \
gitlab_rails['backup_path'] = '${CONTAINER_PATH_FOR_GITLAB_BACKUP}'; \
gitlab_rails['backup_archive_permissions'] = 0644; \
gitlab_rails['backup_keep_time'] = 604800;" \

要进行备份的时候,执行:

docker exec -it gitlab gitlab-rake gitlab:backup:create

然后就会在 ${CONTAINER_PATH_FOR_GITLAB_BACKUP} 这个地方生成备份文件。

3.2 从文件恢复 gitlab

还是用 docker:

docker exec -it gitlab gitlab-rake gitlab:backup:restore BACKUP=path_to_backup_file

注意这里的 path_to_backup_file 是绝对路径。在恢复过程中可能有些 warning,可以不用管。

4. 小结

本文介绍了用 docker 运行 gitlab-ce 的方式,包括初次运行以及外部访问时候路径的配置。最后介绍了 gitlab 数据的备份以及从备份恢复数据的方式。