阅读原文:https://www.cnblogs.com/51core/articles/15152879.html

参考自 https://www.cnblogs.com/sumoning/p/12658446.html

GitLab部署方式:Docker

GitLab版本: gitlab/gitlab-ce:12.9.2-ce.0

1、备份命令

gitlab-backup create

参考:

gitlab-backup --help
Usage: gitlab-backup COMMAND [OPTIONS]

OPTIONS:

  -h, --help Display this help message and exits. Use `COMMAND --help` for more information on a command.

COMMANDS:
  create Creates a new backup.
  restore Restores from a backup.

gitlab-backup create --help
Usage: gitlab-backup create [OPTIONS]

Create a new backup. Wrapper for `gitlab-rake gitlab:backup:create`.

OPTIONS:

-h, --help Display this help message and exits,

Additional OPTIONS are passed to the underlying command.

 同时需要手动备份 /etc/gitlab/gitlab-secrets.json,/etc/gitlab/gitlab.rb

注意:

备份时需要保持gitlab处于正常运行状态,通过执行gitlab-rake gitlab:backup:create进行备份

默认备份文件会存在在/var/opt/gitlab/backups目录下,备份的文件是个tar包,包含了GitLab的所有数据(账户、仓库等)。

2、恢复数据

创建的数据包位于原gitlab服务器目录 /var/opt/gitlab/backups下,如

1586312717_2020_04_08_12.9.2_gitlab_backup.tar
1586312717 是一个时间戳(即,从1970年1月1日0时到当前时间的秒数)

需要先拷贝数据包到要恢复的新Gitlab服务器的/var/opt/gitlab/backups,并建议修改文件权限777

执行命令 

gitlab-ctl stop unicorn
gitlab-ctl stop puma
gitlab-ctl stop sidekiq
# verify
gitlab-ctl status

# 恢复
gitlab-backup restore BACKUP=1586312717_2020_04_08_12.9.2
# 当有多个备份文件时,需指定文件编号恢复
gitlab-rake gitlab:backup:restore BACKUP=1586312717_2020_04_08_12.9.2

之后再次手动恢复 /etc/gitlab/gitlab-secrets.json,/etc/gitlab/gitlab.rb

再次执行命令

gitlab-ctl reconfigure
gitlab-ctl restart
gitlab-rake gitlab:check SANITIZE=true

3、小技巧

gitlab内置自动清理过期的备份文件,需要修改gitlab.rb中的

gitlab_rails['backup_keep_time'] = 604800

定时产生备份文件。每天早晨2点产生一个备份文件

0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1

# /etc/gitlab/gitlab.rb 以下配置,根据需要修改

gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/data/backup/gitlab"
gitlab_rails['backup_archive_permissions'] = 0644
gitlab_rails['backup_keep_time'] = 604800

 

其他参考:
https://blog.csdn.net/qq_43626147/article/details/109160229   # yum方式
https://www.cnblogs.com/mithrilon/p/13985710.html   # yum方式
https://www.cnblogs.com/binz/p/12295328.html   # docker 运行gitlab-ce
https://www.cnblogs.com/zhengyazhao/p/11690189.html   # 仅参考
https://www.jianshu.com/p/aa307ee95442   #  docker 运行gitlab-ce + 反向代理
https://blog.csdn.net/weixin_38800446/article/details/81503500   #  docker 运行gitlab-ce + 反向代理
https://segmentfault.com/q/1010000011303007

仓库:
https://packages.gitlab.com/gitlab/gitlab-ce   # rpm 包
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/  # 清华大学镜像源,apt/debian/ubuntu/yum/
gitlab/gitlb-ce:x.x.x-ce.0   # docker官方镜像

######################################################

记一次物理机迁移到容器的过程

1. 拉取同样版本的gitlab-ce镜像
docker pull gitlab/gitlab-ce:12.2.4-ce.0

2. 创建宿主机上的gitlab数据、配置、日志目录等
mkdir -p /data/gitlab/{data,logs,etc}
mkdir -p /data/gitlab/data/backups

3. 拷贝备份文件到 /data/gitlab/data/backups 目录下,并修改数据目录为 777,否则备份无法导入,具体涉及哪些目录暂没细究。后面reconfig gitlab时会再次自动修改数据目录的权限
chmod -R 777 /data/gitlab/data

4. 启动容器
### 本地数据目录:/data/gitlab/data
### 本地配置目录:/data/gitlab/etc
### 本地日志目录:/data/gitlab/logs
docker run -d --hostname lab.exam.xin -v /data/gitlab/data:/var/opt/gitlab -v /data/gitlab/etc:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab -p 80:80 --name gitlab-ce_12.2.4 --restart always gitlab-ce:12.2.4-ce.0
# https://www.cnblogs.com/mithrilon/p/13985710.html
# 当没有在配置文件 config/gitlab.rb 中配置 external_url 时,GitLab会读取系统的 hostname 作为域名

5. 进入容器,导入备份数据
docker exec -it gitlab-ce_12.2.4 bash

gitlab-ctl stop unicorn
gitlab-ctl stop puma
gitlab-ctl stop sidekiq
# verify
gitlab-ctl status

# 恢复备份文件 1599194142_2020_09_04_12.2.4_gitlab_backup.tar
gitlab-rake gitlab:backup:restore BACKUP=1599194142_2020_09_04_12.2.4

6. 拷贝配置文件 gitlab.rb 和 gitlab-secrets.json 到 /data/gitlab/etc 目录下,并修改 gitlab.rb 中的域名配置为该宿主机的ip
external_url 'http://192.168.11.10/gitlab

其他细节未处理

7. 使用原来的配置文件重新配置gitlab,并启动

gitlab-ctl reconfigure
gitlab-ctl restart
gitlab-rake gitlab:check SANITIZE=true

8. 开启系统的ipv4转发,修改 /etc/sysctl.conf
net.ipv4.ip_forward=1
使之生效
sysctl -p

9. 修改nginx配置,执行容器宿主机

nginx配置段
upstream gitlab {
  server 192.168.11.10:80;
  keepalive 1800;
}
server {
  listen 80;
  listen 443 ssl;
  server_name lab.exam.xin;
  location ~ ^/gitlab {
    set $backend 'gitlab';
    proxy_set_header Host "lab.exam.xin";
    proxy_set_header X-Forwarded-For $http_x_forwarded_for;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_pass http://${backend}${request_uri};
  }
}

10. 写一个简捷的gitlab容器管理脚本

### /data/gitlab/gitlab.sh
#!/bin/bash

function usage() {
  echo -e "Usage: $0 start|stop|ps|status|exec"
}

function start() {
  docker run -d --hostname gitlab.exam.xin -v /data/gitlab/data:/var/opt/gitlab -v /data/gitlab/etc:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab -p 80:80 --name gitlab-ce_12.2.4 --restart always gitlab-ce:12.2.4-ce.0
  sleep 5  # gitlab容器启动需要很长时间,这里仅为查看启动时是否报错
  docker ps|grep gitlab
}

function stop() {
  ctn_id=`docker ps |awk '/gitlab-ce/{print $1}'`
  docker stop ${ctn_id}
  sleep 2
  docker rm ${ctn_id}
}
function exec() {
  ctn_id=`docker ps |awk '/gitlab-ce/{print $1}'`
  docker exec -ti ${ctn_id} bash
}

case $1 in
  start)
    start
    ;;
  stop)
    stop
    ;;
  ps|status)
    docker ps -a|grep gitlab
    ;;
  exec)
    exec
    ;;
  *)
    usage
    exit 1
esac

### 创建软链接
mkdir ~/bin
ln -sv /data/gitlab/gitlab.sh ~/bin/
### 启动
gitlab.sh start
### 检查状态,启动过程需要几分钟实际
gitlab.sh ps  或  gitlab.sh status

 

posted on 2021-08-17 16:27  51core  阅读(342)  评论(0)    收藏  举报