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

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

未来新建用户

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

修改默认值(一劳永逸

  • 编辑配置文件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
  • 核心代码块:
    *

    ini 复制代码
    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 ,访问"Admin Area(管理中心)",进入"Settings(设置)"页面的"Account and Limit Settings(账户和限制)"功能块:
    • Default projects limit(默认项目限制)
      • 设置为 0

已存在用户

方法一、在用户列表编辑
  • 进入指定用户的编辑界面,Access(访问类型)功能块:
    • Projects limit(项目限制)
      • 设置为 0
方法二、API批量修改
Python3
  • 第三方库准备:

    • pip install python-gitlab
  • 核心代码块:
    *

    ini 复制代码
    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(启用登录)
      • 取消勾选

2、批量新增用户

Python3

  • 准备好新增用户的信息文本文件,格式如下所示:

    • 用户名,姓名,邮箱,密码
  • 核心代块:
    *

    ini 复制代码
    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 服务由于网络原因无法访问。

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

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 部分功能页面报错,需要逐一排查。
  • 通过跟踪 production.log 日志查找报错并修复:
    • 默认位置:/var/log/gitlab/gitlab-rails/production.log
    • 查找文件:find / -name production.log

相关推荐
Cosmoshhhyyy7 小时前
mac环境下安装git并配置密钥等
git·macos
yuwei0218 小时前
git大全解
git
小林的技术分享12 小时前
版本控制系统-Git 学习 《progit》电子书学习记录 第一章 (仅隔个人学习记录用)
git
weixin_4569042713 小时前
Git登录配置的详细方法
git
鄃鳕17 小时前
Git , 本地落后远端
git
Yusei_052321 小时前
迅速掌握Git通用指令
大数据·git·elasticsearch
qq_377572771 天前
git commit - revert + reset + checkout + reorder
git
2301_767233222 天前
Git使用和理解上的一些问题
git
nyf_unknown2 天前
(vue)将文件夹打成tar包, Git Bash(推荐)具体使用
vue.js·git·bash
兔老大RabbitMQ2 天前
Git Revert 特定文件/路径的方法
git