3

【Docker】通过Docker-compose安装/备份/恢复Gitlab

 2 years ago
source link: http://lipeng1667.github.io/2021/06/17/install-and-restore-gitlab-with-docker-compose/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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,提醒几点:

  1. 如果是在Mac环境下,docker自带了compose,无需另行安装
  2. 如果是linux环境下,首先确保以下依赖包安装好了py-pip, python3-dev, libffi-dev, openssl-dev, gcc, libc-dev, rust, cargo and make
  3. gitlab本身还是挺吃CPU和内存的,笔者的顶配MBP19,跑gitlab还有点点反应慢,而且安装和恢复备份时,更是耗时许久,所以有条件的话,还是在服务器上安装处理吧

我们假设你计划将gitlab安装到/app/gitlab目录下,那么整个目录结构如下:

/app/gitlab                 -- 根目录
├── data -- 存放数据文件目录
├──gitlab -- gitlab数据文件
├──redis -- redis数据文件
├──postgresql -- postgresql数据文件
├── docker-compose.yml -- compose的配置文件

实例的配置文件可以到docker-compose.yml实例这里查看,我们直接把我修改好的关键配置参数贴出来

version: '3'

services:
redis:
restart: always
# 这里可以选择最新版本
image: sameersbn/redis:4.0.9
command:
- --loglevel warning --protected-mode no
volumes:
# 冒号前的是我们的本地路径 Z表示允许容器之间共享访问
- /app/gitlab/data/redis:/var/lib/redis:Z

postgresql:
restart: always
# 同理版本号可换
image: sameersbn/postgresql:10
volumes:
- /app/gitlab/data/postgresql:/var/lib/postgresql:Z
environment:
- DB_USER=your user's account
- DB_PASS=account password
- DB_NAME=database name
- DB_EXTENSION=pg_trgm

gitlab:
restart: always
# 注意这里的版本号,如果是新迁移的gitlab,需要和你备份中的gitlab大版本保持一致
image: sameersbn/gitlab:11.10.4
depends_on:
- redis
- postgresql
ports:
# 端口映射
- "10080:80"
- "10022:22"
volumes:
# 同理冒号前的为本地目录
- /app/gitlab/data/gitlab:/home/git/data:Z
environment:
- DEBUG=false

- DB_ADAPTER=postgresql
- DB_HOST=postgresql
- DB_PORT=5432
- DB_USER=your user's account
- DB_PASS=account password
- DB_NAME=database name

- REDIS_HOST=redis
- REDIS_PORT=6379

- TZ=Asia/Shanghai
- GITLAB_TIMEZONE=Beijing

- GITLAB_HTTPS=false
- SSL_SELF_SIGNED=false

- GITLAB_HOST=your host's ip address
- GITLAB_PORT=10080
- GITLAB_SSH_PORT=10022
- GITLAB_RELATIVE_URL_ROOT=
- GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string

- GITLAB_ROOT_PASSWORD=root user's passwrod
- GITLAB_ROOT_EMAIL=root user's email

- GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
- GITLAB_NOTIFY_PUSHER=false

- GITLAB_EMAIL=email address
- GITLAB_EMAIL_REPLY_TO=email address
- GITLAB_INCOMING_EMAIL_ADDRESS=email address

# 自动备份
- GITLAB_BACKUP_SCHEDULE=daily
- GITLAB_BACKUP_TIME=01:00

# 邮件服务信息
- SMTP_ENABLED=true
- SMTP_DOMAIN=smtp.mxhichina.com
- SMTP_HOST=smtp.mxhichina.com
- SMTP_PORT=465
- SMTP_USER=
- SMTP_PASS=
- SMTP_STARTTLS=true
- SMTP_TLS=true
- SMTP_AUTHENTICATION=login

重要的信息我都在注释中完善了,完整的配置文件可以去github上拉取。

Gitlab安装

配置好了docker compose之后,gitlab的安装就异常简单了,首先cd到我们的yml文件所在目录下,本文示例为/app/gitlab,然后直接执行以下命令

docker-compose up -d

Tips:

  1. 如果遇到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之后就好了
  2. -d命令(detach mode)只显示容器的创建信息,如果不带-d的话,命令行会一直输出容器内的一些运行日志
  3. 初次安装可能要耗费5分钟左右,取决于你的服务器配置以及网络带宽。

待安装完成后,就可以访问localhost:10080地址来进行本地gitlab的操作了,当然如果碰到502等情况,那是因为虽然容器运行了,但是内部的某些服务还没有完全起来,耐心一点,刷新页面试一试就好。

Gitlab恢复备份

当所有容器都运行之后,我们会在/app/gitlab/data/gitlab目录下发现一系列目录,其中backups目录就是存放gitlab的备份文件地址,每天自动生成的备份会存放在这个目录下。如果你想恢复一份其他地方来的gitlab仓库,只需要把对应的tar备份文件放到该目录下,然后执行恢复备份的相关命令就好了。
这里我们就详细记录下如何恢复一个已有的gitlab仓库。

注:当恢复一个已有的gitlab仓库文件时,需要保持gitlab的版本号一致

上传备份文件

将你手头的备份文件上传至/app/gitlab/data/gitlab/backups目录下,同时修改该文件的权限和目录权限保持一致,否则后续操作会提示文件权限问题。

正常情况下,直接执行以下命令即可完成文件的恢复:

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这个方法可以手动恢复备份。

  1. Starting the gitlab container
  2. Enter the gitlab’s bash shell
  3. Execute /sbin/entrypoint.sh app:rake gitlab:backup:restore to restore a backup
  4. When restore finish, just restart gitlab container, and all is done.
docker exec -it gitlab_gitlab_1 bash
/sbin/entrypoint.sh app:rake gitlab:backup:restore

命令执行过程中,会列出来存放于backups目录下的所有备份文件,这个时候,需要在命令行中输入完整的文件名称,例如本文中的1529921023_2018_06_25_11.0.0_gitlab_backup.tar,备份就会继续执行下去了。

接下来就是漫长的等待恢复过程了,恢复成功后,gitlab相关的所有信息,包括snappets也都会一并恢复。

致谢&参考


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK