写在前面
前段时间,接到任务:尝试搭建一个私有化的代码仓库给前端团队使用。刚好在此之前我用Docker搭建过一个Gitlab,但使用了几天,出现了诸多问题,维护起来也比较麻烦,最终决定按照传统方法重新搭建。截至目前,服务已平稳运行数月。本文主要记录《私有化代码仓库Gitlab的落地与应用》系列(一):Gitlab传统搭建方式及后台维护,内容主要分为以下几个部分:
- 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 -ycurl 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
- 编辑配置文件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
三、常见问题及解决
1.前端页面访问出现502
出现502可能有以下原因:
- 正在启动中由于Gitlab组件较多,启动需要一定过程,因此,在输入启动命令后可稍等2分钟,待其完全启动,再次刷新前端页面即可。
- 内存不足由于Gitlab组件多、整体较为庞大,因此在部署成功启动运行后会占用相当一部分内存,大约在3-5G左右。出现前端访问页面报502可以考虑杀掉一些其他无用的进程,释放内存后,再重新启动Gitlab。
- 端口被占用默认的端口号是8080,可以使用netstat -ntpl 或 lsof -i:8080 命令来查看端口占用情况
通过后台运行日志,排查如果是因为端口被占用引起的,可以按照上述修改配置文件方法,将配置文件中的端口号修改即可,修改后需要按照第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 stopgitla-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 gitlab-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]',解决方法:
chmod2770 /var/opt/gitlab/git-data/repositories
六、代码仓库自动备份
方式一:使用gitlab配置文件设置自动备份
1.配置gitlab.rb
编辑 /etc/gitlab/gitlab.rb文件,找到以下内容并按照如下配置:
- 本地默认备份路径:/var/opt/gitlab/backups
- gitlab备份命令:gitlab-rake gitlab:backup:create
- gitlab恢复命令:gitlab-rake gitlab:backup:restore BACKUP=备份包名
- gitlab备份配置修改:/etc/gitlab/gitlab.rb
2.更新配置
gitlab-ctl reconfigure
方式二:使用Linux系统crondtab服务自动备份
1.配置定时任务,设置开机自启
1)配置定时任务
crontab -e # 进入定时任务编辑模式
2)查看定时任务
crontab -l
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create 表示每天凌晨两点执行备份命令
3)设置cron服务开机自启
systemctl enable crond.service
4)修改后重启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)设置两台服务器免密登录
① 生成秘钥文件
在主机A上执行如下命令,并一路回车,默认生成的文件为 ~/.ssh 目录下的id_rsa和id_rsa.pub
ssh-keygen -t rsa
② 上传公钥到服务器B
scp id_rsa.pub root@192.168.1.2:~/.ssh
③ 追加公钥到认证文件
登录服务器B,找到上传的 id_rsa.pub 文件,将公钥(id_rsa.pub)追加到认证文件authorized_keys
cd ~/.ssh/ cat id_rsa.pub >> authorized_keys
2)编写自动上传备份文件shell脚本
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技能:
- 文件及文件夹的增删改查复制等:vi、touch、rm、find、cat、cd、cp、mv、mkdir命令
- 文件远程拷贝:scp命令
- 赋予文件权限:chmod命令
- shell脚本编写
- 定时任务工具crontab的用法
- 配置免密登录
- 查看端口占用:lsof、netstat命令
- 查看内存:free命令
【下集预告】
《私有化代码仓库Gitlab的落地与应用》系列(二):测试代码接入Gitlab仓库