一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情。
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。
环境
配置域名的原因是可以使配置文件通用,这样在别的机器进行恢复时,就不需要修改配置了,另外配置好域名后,在我们创建好项目时,克隆代码所提示的 ssh 和 http 地址就是带域名的,而不是IP地址。
| IP | 角色 | 域名 |
|---|---|---|
| 192.168.0.143 | 主 GitLab 仓库 | code.gitlab.com |
| 192.168.0.154 | 从 GitLab 仓库 | code.gitlab.com |
安装 GitLab(建议在主从机器上同时安装)
创建存储目录
# 创建数据存储目录、日志目录、配置目录
mkdir -p /home/gitlab/{data,log,etc}
拉取并启动容器
docker pull twang2218/gitlab-ce-zh:11.1
docker run -d --publish 8090:8090 --publish 2222:22 --name gitlab --privileged=true --restart=always -e TZ=Asia/Shanghai -v /home/gitlab/etc:/etc/gitlab -v /home/gitlab/log:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab twang2218/gitlab-ce-zh:11.1
修改配置文件
# 进入容器
docker exec -it gitlab /bin/bash
# 修改 /etc/gitlab/gitlab.rb
## http使用的端口以及在项目工程显示的 http 下载路径中使用
external_url 'http://code.gitlab.com:8090'
## 项目工程显示的 ssh 地址和端口
gitlab_rails['gitlab_ssh_host'] = 'code.gitlab.com'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
## 时区
gitlab_rails['time_zone'] = 'Asia/Shanghai'
## 保存备份 30 天
gitlab_rails['backup_keep_time'] = 2592000
# 执行重载配置文件
gitlab-ctl reconfigure
配置 GitLab
访问
首先为 root 用户设置密码,root 用户将作为 GitLab 的管理员
进入 GitLab 管理页面
- 修改登录页面提示
- 取消头像显示
不取消会显示异常
- 取消注册功能
在公司内网使用,无需注册功能,账号通过管理员添加
- 增加新用户
中文名
用户名:姓名的全拼音,如果有重名就往后面加编号,例如:zhangsan2
电子邮箱:填写公司的邮箱(让开发人员自己提供一下)
GitLab 备份与恢复
创建备份文件
docker exec gitlab gitlab-rake gitlab:backup:create
生成的备份文件为:1623140468_2021_06_08_11.1.4_gitlab_backup.tar,所在目录为:/home/gitlab/data/backups
定时备份
- 配置主从机器免密登录
# 在主机器上生成密钥(如果已经生成就跳过这一步)
ssh-keygen -t rsa
# 将密钥拷贝到从机器,实现主机免密登录从机
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.154
- 创建定时备份脚本 /home/auto_backup.sh
# 执行备份命令
docker exec gitlab gitlab-rake gitlab:backup:create
# 将备份文件拷贝到备用机器的 GitLab 数据目录下
scp -r /home/gitlab/data/backups root@192.168.0.154:/home/gitlab/data/backups
- 添加定时任务
vim /etc/crontab
# 每天备份两次, 12 点和 18 点各一次
0 12,18 * * * root sh /home/auto_backup.sh CRON=1
# 重新加载定时器
service cron reload
service cron restart
仓库恢复
注意:在从机器上必须按照上面的安装和配置步骤提前安装好 GitLab,然后执行以下步骤进行仓库恢复,以下操作均在从机器上执行:
- 将备份文件拷贝到要恢复的机器(从机器)的 GitLab 数据目录下
上面的定时任务如果没问题,这一步就可以省略了 - 进入 GitLab 容器,执行以下恢复命令
# 进入容器
docker exec -it gitlab /bin/bash
# 停止相关数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
# 为备份文件赋予执行权限
chmod -R 7777 /var/opt/gitlab/backups
cd /var/opt/gitlab/backups
# 备份文件编号备份的 tar 包数字部门,例如:1623140468_2021_06_08_11.1.4_gitlab_backup.tar,编号为:1623140468_2021_06_08_11.1.4
gitlab-rake gitlab:backup:restore BACKUP=备份文件编号
gitlab-ctl start