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 (可见性控制级别)
      • 勾选“内部”和“公开”

新建用户.jpg

2、控制用户创建群组权限

未来新建用户

  • 使用管理员用户登录 GitLab ,访问“Admin Area(管理中心)”,进入“Overview(概览)”菜单的”Users(用户)“界面,编辑(“Edit”)用户,Access(访问类型)功能块:
    • Can create group(是否可以创建群组)
      • 取消勾选
        image.png

修改默认值(一劳永逸

  • 编辑配置文件gitlab.rb
    • gitlab_rails['gitlab_default_can_create_group'] = false

已存在用户

方法一、在用户列表编辑
  • 进入指定用户的编辑界面,Access(访问类型)功能块:
    • Can create group(是否可以创建群组)
      • 取消勾选
方法二、后台设置
  • 在服务器调用控制台:
    • gitlab-rails console
  • 修改参数:
    • 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()
      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()  
      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 (不可创建项目)

image.png

修改默认值(一劳永逸

  • 使用管理员用户登录 GitLab ,访问“Admin Area(管理中心)”,进入“Settings(设置)”页面的”Account and Limit Settings(账户和限制)“功能块:
    • Default projects limit(默认项目限制)
      • 设置为 0

未命名.jpg

已存在用户

方法一、在用户列表编辑
  • 进入指定用户的编辑界面,Access(访问类型)功能块:
    • Projects limit(项目限制)
      • 设置为 0
方法二、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()
      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()  
      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(启用登录)
      • 取消勾选

未命名1.jpg

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()
      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()  
      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、用户默认头像显示

  • 部署好 GitLab 后,会发现用户默认头像显示有问题,原因是 GitLab 默认使用 Gravatar 服务的头像。Gravatar 服务由于网络原因无法访问。
    image.png

可访问互联网的 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)
      • 取消勾选

image.png

4、删除幽灵用户(Ghost User)

  • 当删除用户时候选择“仅删除用户”,没有删除所有与用户关联的记录,那么这些记录不会被删除,而是会移动到用户名为幽灵用户(Ghost User)的系统范围用户。
  • GitLab 的幽灵用户代表所有已删除的用户。
  • 任何已删除用户创建的问题和评论将转移给幽灵用户。

方法一、API

方法二、后台删除

  • 在服务器调用控制台:
    • gitlab-rails console
  • 删除幽灵用户:
    • user = User.find_by(username: "ghost")
    • User.delete(user.id)
  • 如果用户被删除,则输出将为 1,如果为 0,则用户未被删除

5、取消邮箱验证

  • 取消原因考量:
    • 批量新增用户
    • 外网无法收到邮箱验证

取消验证

  • 编辑用户文件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 部分功能页面报错,需要逐一排查。

image.png

  • 通过跟踪 production.log 日志查找报错并修复:
    • 默认位置:/var/log/gitlab/gitlab-rails/production.log
    • 查找文件:find / -name production.log

image.pngimage.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYt0G6MU' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片