docker-compose安装部署gitlab中文版、备份机制、恢复方案
·
文章目录
前言
记录一下使用docker-compose部署gitlab平台的过程,增加了本地及异地备份的脚本,搭建的时候一定要一起做上备份机制。新增恢复方案。
一、环境信息
操作系统版本:CentOS Linux release 7.9.2009 (Core)
gitlab镜像版本:twang2218/gitlab-ce-zh:latest
国内镜像版本:docker-0.unsee.tech/twang2218/gitlab-ce-zh:latest
端口规划:10001->80;10002->443;10003->22
IP信息:172.16.31.33
路径准备:/data/gitlab/config、/data/gitlab/data、/data/gitlab/logs
二、准备部署
1.准备路径
mkdir -p /data/gitlab/{config,data,logs}
2.安装docker-compse,下载镜像
链接: docker-compose安装
docker pull twang2218/gitlab-ce-zh:latest
3.引入库
按照自己环境信息,修改配置文件的相关信息
- external_url ‘http://172.16.31.33’
- gitlab_rails[‘gitlab_shell_ssh_port’] = 10003
- ‘10001:80’
- ‘10002:443’
- ‘10003:22’
- /data/gitlab/config:/etc/gitlab
- /data/gitlab/data:/var/opt/gitlab
- /data/gitlab/logs:/var/log/gitlab
cat <<EOF > /data/gitlab/git.yml
version: '3.1'
services:
gitlab:
image: 'twang2218/gitlab-ce-zh:latest'
container_name: "gitlab"
restart: always
privileged: true
hostname: 'gitlab'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://172.16.31.33:10001'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['smtp_enable'] = true
gitlab_rails['gitlab_shell_ssh_port'] = 10003
ports:
- '10001:10001'
- '10002:443'
- '10003:22'
volumes:
- /data/gitlab/config:/etc/gitlab
- /data/gitlab/data:/var/opt/gitlab
- /data/gitlab/logs:/var/log/gitlab
EOF
2.执行部署
代码如下(示例):
docker-compose -f git.yml up -d
该处使用的url网络请求的数据。
使用docker命令部署
docker run -d -p 8443:443 -p 8090:80 -p 8022:22 --restart always --name gitlab -v /home/data/gitlab/config:/etc/gitlab -v /home/data/gitlab/logs:/var/log/gitlab -v /home/data/gitlab/data:/var/opt/gitlab --privileged=true docker-0.unsee.tech/twang2218/gitlab-ce-zh:latest
三、登陆页面
使用ip+port登陆,首次登陆的时候会要求修改root账号的密码
http://172.16.31.33:10001

修改密码之后登陆即可

代码clone
克隆代码的时候按照要求输入ip+port的url即可
四、备份脚本(千问生成)
使用备份脚本,将代码文件进行本地及异地备份
本地备份目录:/backup/gitlab/
异地备份目录:/data/gitbak/
脚本路径:/usr/local/bin/gitlab-backup.sh
#!/bin/bash
# /usr/local/bin/gitlab-backup.sh
set -euo pipefail # ←←← 关键:任何命令失败立即退出
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/backup/gitlab/$DATE"
DATA_BACKUPS="/data/gitlab/data/backups"
SECRETS_FILE="/data/gitlab/config/gitlab-secrets.json"
# === 远程服务器配置 ===
REMOTE_HOST="192.168.XX.XX"
REMOTE_USER="root" # ←←← 替换为实际用户名(如 root 或 gituser)
REMOTE_PASS="smartcore" # ←←← 替换为实际密码
REMOTE_DIR="/data/gitbak/$DATE"
LOG_FILE="/var/log/gitlab-backup.log"
log() {
echo "[$(date)] $*" | tee -a "$LOG_FILE"
}
log "开始 GitLab 备份流程..."
# 1. 触发备份(确保命令成功)
if ! docker exec -t gitlab gitlab-rake gitlab:backup:create; then
log "❌ 备份命令执行失败!请检查 GitLab 容器状态。"
exit 1
fi
# 2. 获取最新 .tar 文件
LATEST_TAR=$(ls -t "$DATA_BACKUPS"/*_gitlab_backup.tar 2>/dev/null | head -1)
if [ -z "$LATEST_TAR" ]; then
log "❌ 未找到生成的备份文件!路径:$DATA_BACKUPS"
exit 1
fi
# 3. 创建本地归档
mkdir -p "$BACKUP_DIR"
cp "$LATEST_TAR" "$BACKUP_DIR/"
cp "$SECRETS_FILE" "$BACKUP_DIR/"
log "✅ 本地备份归档完成:$BACKUP_DIR"
# 4. 【新增】上传到远程节点
log "➡️ 正在同步备份到远程服务器 $REMOTE_HOST..."
if ! command -v sshpass &> /dev/null; then
log "❌ sshpass 未安装,请先运行:yum install -y sshpass(或 apt install sshpass)"
exit 1
fi
# 确保远程目录存在
if ! sshpass -p "$REMOTE_PASS" ssh -o StrictHostKeyChecking=no "$REMOTE_USER@$REMOTE_HOST" "mkdir -p '$REMOTE_DIR'"; then
log "❌ 无法创建远程目录,请检查网络或账号密码。"
exit 1
fi
# 上传文件
if ! sshpass -p "$REMOTE_PASS" scp -o StrictHostKeyChecking=no \
"$BACKUP_DIR/"* \
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"; then
log "❌ 远程文件传输失败!"
exit 1
fi
log "✅ 远程备份同步成功:$REMOTE_HOST:$REMOTE_DIR"
# 5. 清理旧备份
log "🧹 清理 /data/gitlab/data/backups 中3天前的旧备份..."
find "$DATA_BACKUPS" -name "*_gitlab_backup.tar" -type f -mtime +2 -delete
log "🧹 清理 /backup/gitlab 中7天前的完整备份..."
find /backup/gitlab -maxdepth 1 -type d -name "20[0-9][0-9]-[0-1][0-9]-[0-3][0-9]" -mtime +6 -exec rm -rf {} + 2>/dev/null
log "🎉 GitLab 备份与远程同步全部完成!"
赋权
cmod +x /usr/local/bin/gitlab-backup.sh
配置定时任务
0 2 * * * /usr/local/bin/gitlab-backup.sh
五、恢复方案
使用新节点的方式进行恢复
1、新节点搭建git服务后关闭服务
docker-compose -f git.yml up -d
docker-compose -f git.yml down
2、将备份拷贝到新机器上
scp user@old-server:/backup/gitlab/2025-04-28/*_gitlab_backup.tar /data/gitlab/data/backups/
scp user@old-server:/backup/gitlab/2025-04-28/gitlab-secrets.json /data/gitlab/config/
设置权限
sudo chown -R 998:998 /data/gitlab/data/backups
3、重新启动容器进入容器执行命令
docker-compose -f git.yml up -d
docker exec -it gitlab bash
进入容器后执行恢复命令
# 停止服务
gitlab-ctl stop puma
gitlab-ctl stop sidekiq
# 查看待恢复的tar包
ls -l /var/opt/gitlab/backups/
-rw------- 1 root root 3124879360 Apr 28 09:50 1777337806_2026_04_28_11.1.4_gitlab_backup.tar
# 执行恢复
gitlab-rake gitlab:backup:restore BACKUP=1777337806_2026_04_28_11.1.4
# 下面为例子
root@gitlab:/# gitlab-rake gitlab:backup:restore BACKUP=1777337806_2026_04_28_11.1.4
Unpacking backup ... done
Before restoring the database, we will remove all existing
tables to avoid future upgrade problems. Be aware that if you have
custom tables in the GitLab database these tables and all data will be
removed.
Do you want to continue (yes/no)? yes
Removing all tables. Press `Ctrl-C` within 5 seconds to abort
Cleaning the database ...
done
Restoring database ...
Restoring PostgreSQL database gitlabhq_production ... SET
SET
.
.
.
GRANT
[DONE]
done
Restoring repositories ...
* sass/oneops ... [DONE]
* test/oneops ... [DONE]
done
Restoring uploads ...
done
Restoring builds ...
done
Restoring artifacts ...
done
Restoring pages ...
done
Restoring lfs objects ...
done
This will rebuild an authorized_keys file.
You will lose any data stored in authorized_keys file.
Do you want to continue (yes/no)? yes
......
Deleting tmp directories ... done
done
done
done
done
done
done
done
4、恢复完成后,退出容器,重启git
docker-compose -f git.yml down
docker-compose -f git.yml up -d
访问网页,就可以看到使用备份新建的各项目了。
更多推荐
所有评论(0)