gitlab是一个非常方便的代码管理工具。直接安装配置 gitlab 十分麻烦,还容易把环境搞坏。而通过 docker,则可以在一个隔离的环境快速部署 gitlab。通过 docker 运行起来之后,还需要对 gitlab 进行一些配置。虽然是 docker 环境,还是有数据备份和恢复的需求。
1 docker 安装 gitlab
需要安装 docker,如何安装 docker,请参考本网站。
1.1 docker 取得镜像(非必要)
一般来说并不需要,如果 docker 运行时发现缺少相关包,会自动拉取。但也可手动操作 gitlab-ce(C
ommunity E
dition):
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 支持用 https8083
端口映射80
端口,gitlab 支持 http222
端口映射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 账户 id
是 1
。root 账户密码一定要设定,后面再在创建自己账户的时候,需要这个账户的同意。
配置完成之后退出 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,可以不用管。
总结
本文介绍了用 docker 运行 gitlab-ce 的方式,包括初次运行以及外部访问时候路径的配置。最后介绍了 gitlab 数据的备份以及从备份恢复数据的方式。