写在前面
前段时间,接到任务:尝试搭建一个私有化的代码仓库给前端团队使用。刚好在此之前我用Docker搭建过一个Gitlab,但使用了几天,出现了诸多问题,维护起来也比较麻烦,最终决定按照传统方法重新搭建。截至目前,服务已平稳运行数月。本文主要记录《私有化代码仓库Gitlab的落地与应用》系列(一):Gitlab传统搭建方式及后台维护,内容主要分为以下几个部分:
一、Gitlab简介
GitLab是一个由GitLabInc.开发、利用Ruby on Rail开发的开源应用程序,用于实现一个自托管的Git项目仓库,可以通过web 界面进行访问公开的或者私人项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。GitLab拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释,可以管理团队对仓库的访问。GitLab是专门为Unix操作系统开发的,不可运行在Windows操作系统上面,所以需要在Linux虚拟机或者 Docker上安装。GitLab分为社区版Community Edition 和 企业版Enterprise Edition。
二、Gitlab搭建步骤
1.安装依赖
yum install -y curl policycoreutils-python openssh-server
2.下载镜像文件并上传至服务器
国内镜像地址:
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
3.安装Gitlab
rpm -i gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
4.配置Gitlab
vi /etc/gitlab/gitlab.rb
主要涉及两处改动:
external_url 'http://192.168.1.122' # 改为自己的IP地址
unicorn['port'] = 8080 # 默认8080端口,需提前确认端口是否被占用
5.启动Gitlab
gitlab-ctl reconfigure # 重新加载配置文件,每次改动配置文件都需要执行
gitlab-ctl restart # 重启gitlab服务
6.访问Gitlab
http://192.168.1.122:8090
三、常见问题及解决
1.前端页面访问出现502
出现502可能有以下原因:
通过后台运行日志,排查如果是因为端口被占用引起的,可以按照上述修改配置文件方法,将配置文件中的端口号修改即可,修改后需要按照第4步重新加载配置文件、重启服务。更多配置信息,可以在 /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml 中进行查看。
四、Gitlab配置信息及常用操作命令
1.常见配置
默认安装的gitlab,主要有四个目录:
◆ /opt/gitlab/ # 主目录
◆ /etc/gitlab/ # 放置配置文件
◆ /var/opt/gitlab/ # 各个组件
◆ /var/log/gitlab/ # 放置日志文件
2.常用命令
◆ gitlab-ctl start # 启动所有 gitlab 组件;
◆ gitlab-ctl stop # 停止所有 gitlab 组件;
◆ gitlab-ctl restart # 重启所有 gitlab 组件;
◆ gitlab-ctl status # 查看服务状态;
◆ vim /etc/gitlab/gitlab.rb # 修改gitlab配置文件;
◆ gitlab-ctl reconfigure # 重新编译gitlab配置;
◆ gitlab-ctl tail # 查看日志;
◆ gitlab-ctl help # 查看相关的帮助
五、代码仓库数据迁移
1.旧服务器数据手动备份
先停掉gitlab,然后执行备份命令
gitlab-ctl stop
gitla-rake gitlab:backup:create
生成的备份文件会存在/var/opt/backups/目录下,生成的文件名如1633777959_2021_10_09_14.0.6_gitlab_backup.tar,其中14.0.6是当前gitlab的版本号,恢复时使用的gitlab必须是同样的版本号,否则没法进行恢复。该文件里面包含了所有user、group、git repository数据。
2.新服务器上恢复数据
将备份文件复制到新服务器的/var/opt/backups/目录下,停掉gitlab的puma、sidekiq两个服务,然后执行恢复操作
gitlab-ctl stop puma
gitlab-ctl stop sidekiq
gitla-rake gitlab:backup:restore BACKUP=1633777959_2021_10_09_14.0.6
gitlab-ctl start puma
gitlab-ctl start sidekiq
特别注意:
gitlab不能跨版本升级,只能一个一个大版本地升级
可能遇到的报错:
Error executing action `run` on resource 'ruby_block[directory resource: /var/opt/gitlab/git-data/repositories]'
解决方法:
chmod 2770 /var/opt/gitlab/git-data/repositories
六、代码仓库自动备份
方式一:使用gitlab配置文件设置自动备份
1.编辑 /etc/gitlab/gitlab.rb文件,找到以下内容并按照如下配置:
2.更新配置
gitlab-ctl reconfigure
方式二:使用Linux系统crondtab服务自动备份
1.配置定时任务:crontab -e
查看定时任务:crontab -l
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create 表示每天凌晨两点执行备份命令
设置cron服务开机自启:systemctl enable crond.service
修改后重启cron服务:systemctl restart crond
【tips】:
tips1:
cron服务的启停:
systemctl start crond.service 服务启动
systemctl stop crond.service 服务停止
systemctl restart crond.service 服务重新启动
systemctl reload crond.service 服务重新加载配置
tips2:
* * * * * command
分 时 日 月 周 命令
其中,
第1列表示分钟,1~59,每分钟用*表示
第2列表示小时,1~23,(0表示0点)
第3列表示日期,1~31
第4列表示月份,1~12
第5列表示星期,0~6(0表示星期天)
第六列表示要运行的命令
2.自动上传gitlab的备份文件到另一台服务器
1)设置两台服务器免密登录
2)编写自动上传备份文件shell脚本:gitlab-upload.sh,内容如下:
#!/bin/bash
backup_dir='/var/opt/gitlab/backups/new_backups'
last_file=`ls $backup_dir -t | head -n 1`
cd $backup_dir
`scp $last_file root@192.168.1.122:/home/gitlab_auto_bakcups/`
编写完成后要对文件赋予执行权限:chmod +x gitlab-upload.sh
3)设置crondtab定时任务
执行crondtab -e命令,设置为每天凌晨三点执行远程传输备份文件任务,内容如下,
0 3 * * * /opt/gitlab/bin/gitlab-upload.sh
保存后要重载crond服务:systemctl reload crond.service
七、小结
总的来说,Gitlab的搭建过程比一般软件的搭建要繁琐,另外像数据自动备份、数据迁移所用到的Linux技能也较多,可以按需配置和操作。最后,总结一下本次用到的Linux技能:
更多Linux技能可点击关注小程序,一起打卡提升:
【下集预告】
《私有化代码仓库Gitlab的落地与应用》系列(二):测试代码接入Gitlab仓库