【Docker】通过Docker-compose安装/备份/恢复Gitlab
阅读数:
git代码托管无疑是广大程序员们的福音,线上产品除了强大的Github,允许免费自建线上私有库的bitbucket,可以在本地搭建自有git服务的,首推gitlab了,这里就不打广告了,直接进入正题,这篇blog就详细介绍一下搭建gitlab服务,以及备份和恢复时遇到的一些问题以及解决的办法。
系统环境
按照惯例,还是列一下我们用到的系统环境和软件版本信息:
- RHEL/CentOS 7
- Dokcer & Docker compose
一个完善的gitlab本地环境包括3个必备的组建,首先是gitlab本身,然后是数据库postgresql还有redis,如果我们依次去搭建这些环境,过程会很痛苦(在github上发现sameersbn的docker-gitlab之前,我尝试着按照gitlab的官方指南手动搭建,有点累。。。),所以借助docker-compose基本上就是一键搭建了。
Docker compose
安装
Docker compose是啥就不多科普了,自行google去,compose的安装详见官网install compose,提醒几点:
- 如果是在Mac环境下,docker自带了compose,无需另行安装
- 如果是linux环境下,首先确保以下依赖包安装好了
py-pip, python3-dev, libffi-dev, openssl-dev, gcc, libc-dev, rust, cargo and make
- gitlab本身还是挺吃CPU和内存的,笔者的顶配MBP19,跑gitlab还有点点反应慢,而且安装和恢复备份时,更是耗时许久,所以有条件的话,还是在服务器上安装处理吧
配置文件
我们假设你计划将gitlab安装到/app/gitlab
目录下,那么整个目录结构如下:
1 | /app/gitlab -- 根目录 |
实例的配置文件可以到docker-compose.yml实例这里查看,我们直接把我修改好的关键配置参数贴出来
1 | version: '3' |
重要的信息我都在注释中完善了,完整的配置文件可以去github上拉取。
Gitlab安装
配置好了docker compose之后,gitlab的安装就异常简单了,首先cd到我们的yml文件所在目录下,本文示例为/app/gitlab
,然后直接执行以下命令
1 | docker-compose up -d |
Tips:
- 如果遇到
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-4f95b57fe060 -j RETURN: iptables: No chain/target/match by that name
错误,需要重启docker,systemctl restart docker
之后就好了 - -d命令(detach mode)只显示容器的创建信息,如果不带-d的话,命令行会一直输出容器内的一些运行日志
- 初次安装可能要耗费5分钟左右,取决于你的服务器配置以及网络带宽。
待安装完成后,就可以访问localhost:10080
地址来进行本地gitlab的操作了,当然如果碰到502等情况,那是因为虽然容器运行了,但是内部的某些服务还没有完全起来,耐心一点,刷新页面试一试就好。
Gitlab恢复备份
当所有容器都运行之后,我们会在/app/gitlab/data/gitlab
目录下发现一系列目录,其中backups
目录就是存放gitlab的备份文件地址,每天自动生成的备份会存放在这个目录下。如果你想恢复一份其他地方来的gitlab仓库,只需要把对应的tar备份文件放到该目录下,然后执行恢复备份的相关命令就好了。
这里我们就详细记录下如何恢复一个已有的gitlab仓库。
注:当恢复一个已有的gitlab仓库文件时,需要保持gitlab的版本号一致
上传备份文件
将你手头的备份文件上传至/app/gitlab/data/gitlab/backups
目录下,同时修改该文件的权限和目录权限保持一致,否则后续操作会提示文件权限问题。
恢复备份
正常情况下,直接执行以下命令即可完成文件的恢复:
1 | docker-compose run --rm gitlab app:rake gitlab:backup:restore BACKUP=*** |
我们假设目录下存放的备份文件是1529921023_2018_06_25_11.0.0_gitlab_backup.tar
,则命令行中输入的名字只需要1529921023_2018_06_25_11.0.0
即可。
在gitlab版本11.10.4,就是笔者的这个版本,利用compose自动恢复备份的命令有bug,会提示GRPC::Unavailable: 14:Connect Failed
,所以参见restoring backup leads to error这个方法可以手动恢复备份。
- Starting the gitlab container
- Enter the gitlab’s bash shell
- Execute /sbin/entrypoint.sh app:rake gitlab:backup:restore to restore a backup
- When restore finish, just restart gitlab container, and all is done.
1 | docker exec -it gitlab_gitlab_1 bash |
命令执行过程中,会列出来存放于backups目录下的所有备份文件,这个时候,需要在命令行中输入完整的文件名称,例如本文中的1529921023_2018_06_25_11.0.0_gitlab_backup.tar
,备份就会继续执行下去了。
接下来就是漫长的等待恢复过程了,恢复成功后,gitlab相关的所有信息,包括snappets也都会一并恢复。