GitLab幕后故事——生产实践篇
介绍生产中 GitLab 常用设置,适用于对安全性有一定要求的非互联网环境
一、GitLab 汉化
方法一、系统设置
- GitLab 的语言切换功能尚处于实验阶段,翻译尚未完成。
- 登录用户,展开最顶部的 V 形。
- 选择“Preferences(首选项)”,进入”User Settings(用户设置)“。
- 滚动到“Localization(本地化)”部分,然后选择中文。
方法二、自定义汉化
- 在中文社区找到对应版本汉化包:
- 停止 GitLab 服务:
gitlab-ctl stop
- 上传汉化包:
- 默认安装的对应目录:/opt/gitlab/embedded/service/gitlab-rails/
- 加载配置重新启动:
gitlab-ctl reconfigure
gitlab-ctl restart
二、用户应用安全
1、限制项目可见性级别
- 使用管理员用户登录 GitLab ,访问“Admin Area(管理中心)”,进入“Settings(设置)”页面的”Visibility and Access Controls(可见性与访问控制)“功能块:
- Default project visibility (默认项目可见性)
- 勾选“私有”
- Default snippet visibility (默认代码段可见性)
- 勾选“私有”
- Default group visibility (默认群组可见性)
- 勾选“私有”
- Restricted visibility levels (可见性控制级别)
- 勾选“内部”和“公开”
- Default project visibility (默认项目可见性)
2、控制用户创建群组权限
未来新建用户
- 使用管理员用户登录 GitLab ,访问“Admin Area(管理中心)”,进入“Overview(概览)”菜单的”Users(用户)“界面,编辑(“Edit”)用户,Access(访问类型)功能块:
- Can create group(是否可以创建群组)
- 取消勾选
- 取消勾选
- Can create group(是否可以创建群组)
修改默认值(一劳永逸)
- 编辑配置文件
gitlab.rb
:gitlab_rails['gitlab_default_can_create_group'] = false
已存在用户
方法一、在用户列表编辑
- 进入指定用户的编辑界面,Access(访问类型)功能块:
- Can create group(是否可以创建群组)
- 取消勾选
- Can create group(是否可以创建群组)
方法二、控制台设置
- 调用控制台:
- Omnibus 安装:
gitlab-rails console
- 源程序安装:
sudo -u git -H bundle exec rails console -e production
- Docker 安装:
-
# 查看 pod kubectl --namespace gitlab get pods -lapp=toolbox # 进入 pod kubectl exec -it <toolbox-pod-name> -- bash # 启动控制台 /srv/gitlab/bin/rails console
- Omnibus 安装:
- 修改参数:
User.update_all can_create_group:false
方法三、API批量修改
(1) REST API
curl --request PUT http://xxxxxx/api/v4/users/:id?can_create_group=false
(2) Python3
- 第三方库准备:
pip install python-gitlab
- 核心代码块:
-
import gitlab # GitLab 地址 url= 'http://xxx.xxx.xxx.xxx:xxxx/' # GitLab 私有令牌(root用户) private_token= 'xxxxxxxxxx' # 获取 GitLab 操作对象 gl = gitlab.Gitlab(url, private_token) # 获取全部用户列表 users = gl.users.list(all=True) for i in users: if i.id != 1: i.can_create_group = False i.save()
-
3、控制用户创建项目权限
未来新建用户
- 使用管理员用户登录 GitLab ,访问“Admin Area(管理中心)”,进入“Overview(概览)”菜单的”Users(用户)“界面,编辑(“Edit”)用户,Access(访问类型)功能块:
- Projects limit(项目限制)
- 设置为 0 (不可创建项目)
- Projects limit(项目限制)
修改默认值(一劳永逸)
- 使用管理员用户登录 GitLab ,访问“Admin Area(管理中心)”,进入“Settings(设置)”页面的”Account and Limit Settings(账户和限制)“功能块:
- Default projects limit(默认项目限制)
- 设置为 0
- Default projects limit(默认项目限制)
已存在用户
方法一、在用户列表编辑
- 进入指定用户的编辑界面,Access(访问类型)功能块:
- Projects limit(项目限制)
- 设置为 0
- Projects limit(项目限制)
方法二、API批量修改
Python3
- 第三方库准备:
pip install python-gitlab
- 核心代码块:
-
import gitlab # GitLab 地址 url= 'http://xxx.xxx.xxx.xxx:xxxx/' # GitLab 私有令牌(root用户) private_token= 'xxxxxxxxxx' # 获取 GitLab 操作对象 gl = gitlab.Gitlab(url, private_token) # 获取全部用户列表 users = gl.users.list(all=True) for i in users: if i.id != 1: i.projects_limit = 0 i.save()
-
三、用户管理
1、取消用户注册功能
- 出于保障 GitLab 使用安全考虑,GitLab 用户账号审批后统一分配,禁止自注册
- 使用管理员用户登录 GitLab ,访问“Admin Area(管理中心)”,进入“Settings(设置)”页面的”Sign-in Restrictions(注册限制)“功能块:
- Sign-in enabled(启用登录)
- 取消勾选
- Sign-in enabled(启用登录)
2、批量新增用户
Python3
- 准备好新增用户的信息文本文件,格式如下所示:
用户名,姓名,邮箱,密码
- 核心代块:
-
import gitlab import requests # 用户文件 path = 'user.txt' # 新增用户 with open(path, encoding = 'utf-8', mode = 'r') as file: for i in file.readlines(): # 拆分字段 用户名 姓名 邮箱 密码 key = i.strip() username = key.split(',')[0] name = key.split(',')[1] email = key.split(',')[2] password = key.split(',')[3] # 创建用户 data = {'email':email, 'password':password, 'username':username, 'name':name } user = gl.users.create(data) print(user.name, user.id) print('创建用户成功') f.close()
-
3、重置密码
重置管理员密码
- 调用控制台:
- Omnibus 安装:
gitlab-rails console
- 源程序安装:
sudo -u git -H bundle exec rails console -e production
- Docker 安装:
-
# 查看 pod kubectl --namespace gitlab get pods -lapp=toolbox # 进入 pod kubectl exec -it <toolbox-pod-name> -- bash # 启动控制台 /srv/gitlab/bin/rails console
- Omnibus 安装:
- 重置密码:
-
# 指定管理员账号 user = User.where(id: 1).first # 设定新密码 # 特殊字符可能需要转义 user.password = 'xxxxxxxx' # 确认密码 user.password_confirmation = 'xxxxxxxx' # 保存操作(返回 true) user.save!
-
重置用户密码
- 重置用户密码需要管理员权限操作
方法一、GitLab UI 操作
- 使用管理员用户登录 GitLab ,访问“Admin Area(管理中心)”,进入“Overview(概览)”菜单的”Users(用户)“界面,编辑(“Edit”)用户,修改为新密码。
方法二、控制台操作
- 调用控制台:
- Omnibus 安装:
gitlab-rails console
- 源程序安装:
sudo -u git -H bundle exec rails console -e production
- Docker 安装:
-
# 查看 pod kubectl --namespace gitlab get pods -lapp=toolbox # 进入 pod kubectl exec -it <toolbox-pod-name> -- bash # 启动控制台 /srv/gitlab/bin/rails console
- Omnibus 安装:
- 重置密码:
-
# 查找用户账号 # 通过邮箱 user=User.where(email:'xxx').first # 通过用户名 user=User.where(username:'xxx').first # 设定新密码 # 特殊字符可能需要转义 user.password = 'xxxxxxxx' # 确认密码 user.password_confirmation = 'xxxxxxxx' # 保存操作(返回 true) user.save!
-
4、用户默认头像显示
- 部署好 GitLab 后,会发现用户默认头像显示有问题,原因是 GitLab 默认使用 Gravatar 服务的头像。Gravatar 服务由于网络原因无法访问。
可访问互联网的 GitLab 实例解决方法
更换 Gravatar 镜像
-
编辑配置文件
gitlab.rb
:gitlab_rails['gravatar_plain_url'] = 'https://gravatar.loli.net/avatar/%{hash}?s=%{size}&d=identicon'
gitlab_rails['gravatar_ssl_url'] = 'https://gravatar.loli.net/avatar/%{hash}?s=%{size}&d=identicon'
-
加载配置重新启动:
gitlab-ctl reconfigure
gitlab-ctl restart
不可访问互联网的 GitLab 实例解决方法
(1) 自行搭建 Gravatar 服务
(2) 关闭 Gravatar 服务
- 使用管理员用户登录 GitLab ,访问“Admin Area(管理中心)”,进入“Settings(设置)”页面的”Account and Limit Settings(账户和限制)“功能块:
- Gravatar enabled(启用 Gravatar)
- 取消勾选
- Gravatar enabled(启用 Gravatar)
5、删除幽灵用户(Ghost User)
- 当删除用户时候选择“仅删除用户”,没有删除所有与用户关联的记录,那么这些记录不会被删除,而是会移动到用户名为幽灵用户(Ghost User)的系统范围用户。
- GitLab 的幽灵用户代表所有已删除的用户。
- 任何已删除用户创建的问题和评论将转移给幽灵用户。
方法一、API
方法二、后台删除
- 调用控制台:
- Omnibus 安装:
gitlab-rails console
- 源程序安装:
sudo -u git -H bundle exec rails console -e production
- Docker 安装:
-
# 查看 pod kubectl --namespace gitlab get pods -lapp=toolbox # 进入 pod kubectl exec -it <toolbox-pod-name> -- bash # 启动控制台 /srv/gitlab/bin/rails console
- Omnibus 安装:
- 删除幽灵用户:
user = User.find_by(username: "ghost")
User.delete(user.id)
- 如果用户被删除,则输出将为 1,如果为 0,则用户未被删除
6、取消邮箱验证
- 取消原因考量:
- 批量新增用户
- 外网无法收到邮箱验证
取消验证
- 编辑用户文件
user.rb
:- 默认位置:/opt/gitlab/embedded/service/gitlab-rails/app/models/user.rb
- 查找文件:
find / -name user.rb
- 找到
:confirmable
删除
- 加载配置重新启动:
gitlab-ctl reconfigure
gitlab-ctl restart
排查页面报错
- 由于取消了邮箱校验,会导致 GitLab UI 部分功能页面报错,需要逐一排查。
- 通过跟踪 production.log 日志查找报错并修复:
- 默认位置:
/var/log/gitlab/gitlab-rails/production.log
- 查找文件:
find / -name production.log
- 默认位置:
转载自:https://juejin.cn/post/7265879354231865399