likes
comments
collection
share

GitLab幕后故事——生产实践篇

作者站长头像
站长
· 阅读数 56

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

GitLab幕后故事——生产实践篇

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

未来新建用户

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

修改默认值(一劳永逸

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

已存在用户

方法一、在用户列表编辑
  • 进入指定用户的编辑界面,Access(访问类型)功能块:
    • 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
      
  • 修改参数:
    • 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 (不可创建项目)

GitLab幕后故事——生产实践篇

修改默认值(一劳永逸

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

GitLab幕后故事——生产实践篇

已存在用户

方法一、在用户列表编辑
  • 进入指定用户的编辑界面,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()  
      

三、用户管理

1、取消用户注册功能

  • 出于保障 GitLab 使用安全考虑,GitLab 用户账号审批后统一分配,禁止自注册
  • 使用管理员用户登录 GitLab ,访问“Admin Area(管理中心)”,进入“Settings(设置)”页面的”Sign-in Restrictions(注册限制)“功能块:
    • Sign-in enabled(启用登录)
      • 取消勾选

GitLab幕后故事——生产实践篇

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
      
  • 重置密码:
    • # 指定管理员账号
      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
      
  • 重置密码:
    • # 查找用户账号
      # 通过邮箱
      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幕后故事——生产实践篇

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

GitLab幕后故事——生产实践篇

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
      
  • 删除幽灵用户:
    • 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 部分功能页面报错,需要逐一排查。

GitLab幕后故事——生产实践篇

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

GitLab幕后故事——生产实践篇 GitLab幕后故事——生产实践篇

转载自:https://juejin.cn/post/7265879354231865399
评论
请登录