当前文档只在 14.5.0 版本下测试通过!
0x00 下载与安装
(镜像)各版本安装包: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/focal/main/g/gitlab-ce
sudo apt-get install wget
# 下载
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/focal/main/g/gitlab-ce/gitlab-ce_14.5.0-ce.0_amd64.deb
# 安装
sudo dpkg -i gitlab-ce_14.5.0-ce.0_amd64.deb
0x01 使用自带的nginx和redis等配置
配置文件: /etc/gitlab/gitlab.rb
. 默认存储路径是/var/opt/gitlab/git-data
(实际存储在下面的repositories, 这个文件夹会自动建立).
# 修改外部url 注意: 这里是修改, 不是追加!!!!
external_url 'http://192.168.0.204'
nginx['listen_port'] = 8000
gitlab_rails['redis_port'] = 6380
redis['port'] = 6380
# redis不需要集群的话, 有关sentinel的不用改
# 修改文件存储路径, 注意权限设置: `chown -R git.git /git/git-data`
git_data_dirs({
"default" => {
"path" => "/git/git-data"
}
})
重新配置gitlab(耗时较长):
sudo gitlab-ctl reconfigure
重启:
sudo gitlab-ctl restart
每次修改
/etc/gitlab/gitlab.rb
后都需要运行sudo gitlab-ctl reconfigure
账号root的初始密码在/etc/gitlab/initial_root_password
gitlab自带nginx的配置文件
/var/opt/gitlab/nginx/conf/nginx.conf
, 加载的vhost配置是/var/opt/gitlab/nginx/conf/gitlab-http.conf
0x02 备份与恢复
参考官方文档备份和恢复
- 备份将会创建一个包含所有数据库(用户,权限,job等)、仓库和附件的归档文件
- 恢复时必须使用相同版本的gitlab.
- 需要自己设置cron进行备份! 需要自己设置cron进行备份! 需要自己设置cron进行备份!
备份的相关配置
配置 /etc/gitlab/gitlab.rb
:
#路径, 默认是 /var/opt/gitlab/backups
gitlab_rails['backup_path'] = '/data/backup/gitlab'
#备份保留时间(秒), 默认是7天
gitlab_rails['backup_keep_time'] = 604800
自定义目录需要设置权限:
mkdir -pv /data/backup/gitlab
sudo chown -R git.git /data/backup/gitlab
配置修改后执行 gitlab-ctl reconfigure
更新设置.
备份
sudo /usr/bin/gitlab-rake gitlab:backup:create
执行结果:
# 这里只是第一次备份的简单的记录, 具体执行时内容可能更多
Creating backup archive: 1638266276_2021_11_30_14.5.0_gitlab_backup.tar ... done
Uploading backup archive to remote storage ... skipped
Deleting tmp directories ... done
done
done
done
done
done
done
done
Deleting old backups ... done. (0 removed)
Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
Backup task is done.
注意: 重要的文件/etc/gitlab/gitlab.rb
和/etc/gitlab/gitlab-secrets.json
需要手动备份
恢复备份
恢复操作前确保:
- 安装和备份的软件版本一致: 区分不同版本/ce/ee
- 至少执行过一次配置:
sudo gitlab-ctl reconfigure
建议先恢复配置/etc/gitlab/gitlab.rb
- GitLab在运行:
sudo gitlab-ctl start
- 备份文件的owner是git:
sudo chown git.git 备份文件
停止数据库连接:
sudo gitlab-ctl stop puma
# 停止队列
sudo gitlab-ctl stop sidekiq
sudo gitlab-ctl stop unicorn ###这个官方文档没有提到
#检查状态
sudo gitlab-ctl status
执行恢复操作
注意: 名称不要带备份文件名后面的"_gitlab_backup.tar". 比如备份的文件名是"1638321295_2021_12_01_14.5.0_gitlab_backup.tar", 调用命令时只能使用"1638321295_2021_12_01_14.5.0", 否则会报错: 找不到文件
# 恢复
sudo gitlab-backup restore BACKUP=/data/backup/gitlab/1638321295_2021_12_01_14.5.0
恢复配置文件
恢复/etc/gitlab/gitlab-secrets.json
重启服务
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
# 校验
sudo gitlab-rake gitlab:check SANITIZE=true
0x03 Gitlab配置
管理员登录后, 点击Gitlab图标后的 Menu => Admin 进入管理界面.
1. 关闭自动注册
Admin -> Settings -> General -> Sign Uprestrictions -> 取消Sign-up enabled
2. 合并时默认选中"delete source branch"选项, 这个目前没有全局配置, 只能合并时注意了.
3. 用户权限
- 群组(Group)下添加的用户, 默认会拥有该群组的仓库的权限. 如果用户在某仓库中需要更高的权限, 在该仓库中重新添加该账户并设置更高权限即可.
- gitlab默认只有维护(
maintainer
)才有权限merge并push到main
, 而开发(developer
)没有权限合并(虽然能本地merge,但是不能push)
4. 附件上传大小限制
Admin -> Settings -> General -> Account and limit -> "Maximum attachment size(MB)"
如果调大, 则相应的/etc/gitlab/gitlab.rb
配置中的nginx设置也要修改:
nginx['client_max_body_size'] = '1024m'
实测: 本地gitlab中设置1m, 无效, 阻止不了大于1m的文件的push.....
5. 禁止用户创建项目
- 通用设置: Admin -> Settings -> General -> Account and limit -> "Default projects limit" 设置为0
- 已有用户: User -> Edit -> Access -> "Projects limit" 设置为
0
6. 禁止用户创建群组(Group)
- 已有用户: User -> Edit -> Access -> 取消"Can create group"选中
7. 用户角色与权限
官方文档: 用户权限
角色分为: Guest, Reporter, Developer, Maintainer, Owner
普通开发人员设置 developer即可, 可以建立&提交自己的分支, 但是不能合并到master
maintainer/owner: 可以合并分支到master
0x04 服务调整与降低内存的占用
官方要求硬件配置至少2核4G, 除了系统占用的1G内存, gitlab大概用去3G内存. 通过降低参数+关闭部分服务, 可以将使用内存降低至2G, 10人以下团队够用了.
gitlab中的各种服务
- nginx: web服务
- redis: 消息队列
- puma: Ruby的http应用服务器. 从13.0开始取代了unicorn成为默认的web服务器
- prometheus: 监控, 可以关闭
- grafana: 数据可视化工具, 用以显示Prometheus的指标, 可以关闭.
- <xxx>_exporter: 用于prometheus监控的xxx数据导出, 可以关闭
- alertmanager: 报警模块, 可以关闭
优化设置参考
# 优化: 减少服务的内存占用
puma['worker_processes'] = 2
postgresql['shared_buffers'] = "128MB"
postgresql['max_worker_processes'] = 4
sidekiq['max_concurrency'] = 2
sidekiq['min_concurrency'] = 1
# 闭关不需要的服务
prometheus['enable'] = false
grafana['enable'] = false
redis_exporter['enable'] = false
gitlab_exporter['enable'] = false
node_exporter['enable'] = false
postgres_exporter['enable'] = false
alertmanager['enable'] = false
参考资料: