阅读原文: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
浙公网安备 33010602011771号