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

相关推荐
jiayong236 小时前
Git 核心概念:Tag 与 Branch 的本质区别
git
Serene_Dream9 小时前
git 合并冲突的分支
git
我是一只puppy10 小时前
使用AI进行代码审查
javascript·人工智能·git·安全·源代码管理
玄同76510 小时前
Git常用命令指南
大数据·git·elasticsearch·gitee·github·团队开发·远程工作
十步杀一人_千里不留行13 小时前
Git提交前ESLint校验实践(Husky + lint-staged)
git·github
hh随便起个名16 小时前
适合小白的git的基础使用方法
git
我会一直在的17 小时前
Devps持续集成
git·ci/cd
不倒翁玩偶17 小时前
Gitlab拉取代码token换成账号密码登录
gitlab
CoderJia程序员甲18 小时前
GitHub 热榜项目 - 日榜(2026-02-08)
git·ai·开源·llm·github
xixingzhe218 小时前
ubuntu安装gitlab
linux·ubuntu·gitlab