{{< details >}}

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: 私有化部署

{{< /details >}}

{{< alert type=”note” >}}

将极狐GitLab 设置为只读的推荐方式为启用维护模式

{{< /alert >}}

在某些情况下,你可能希望将极狐GitLab置于只读状态。这样做的配置取决于你想要的结果。

使代码库只读

你首先要完成的是确保代码库不能被更改。你可以通过两种方式来实现:

  • 要么停止 Puma 以使内部 API 无法访问:

    sudo gitlab-ctl stop puma
    
  • 或者,打开 Rails 控制台:

    sudo gitlab-rails console
    

    将所有项目的代码库设置为只读:

    Project.all.find_each { |project| project.update!(repository_read_only: true) }
    

    若只设置部分代码库为只读,请运行以下命令:

    # 列出要设置为只读的项目 ID 列表。
    projects = [1,2,3]
    
    projects.each do |p|
     project =  Project.find p
     project.update!(repository_read_only: true)
     rescue ActiveRecord::RecordNotFound
     puts "Project ID #{p} not found"
    
    end
    

    当你准备好还原此设置时,将项目的 repository_read_only 更改为 false。例如,运行以下命令:

    Project.all.find_each { |project| project.update!(repository_read_only: false) }
    

关闭极狐GitLab UI

如果你不介意关闭极狐GitLab UI,那么最简单的方法就是停止 sidekiqpuma,这样你就能有效地确保极狐GitLab 不会被更改:

sudo gitlab-ctl stop sidekiq
sudo gitlab-ctl stop puma

当你准备好还原此设置时:

sudo gitlab-ctl start sidekiq
sudo gitlab-ctl start puma

使数据库只读

如果你想允许用户使用极狐GitLab UI,确保数据库是只读的:

  1. 进行一次 极狐GitLab 备份,以防事情不如预期。
  2. 以管理员用户身份进入 PostgreSQL 控制台:

    sudo \
        -u gitlab-psql /opt/gitlab/embedded/bin/psql \
        -h /var/opt/gitlab/postgresql gitlabhq_production
    
  3. 创建 gitlab_read_only 用户。密码设置为 mypassword,可以根据需要更改:

    -- NOTE: 使用之前定义的密码
    CREATE USER gitlab_read_only WITH password 'mypassword';
    GRANT CONNECT ON DATABASE gitlabhq_production to gitlab_read_only;
    GRANT USAGE ON SCHEMA public TO gitlab_read_only;
    GRANT SELECT ON ALL TABLES IN SCHEMA public TO gitlab_read_only;
    GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO gitlab_read_only;
    
    -- 由 "gitlab" 创建的表应该自动为 "gitlab_read_only" 设置为只读。
    ALTER DEFAULT PRIVILEGES FOR USER gitlab IN SCHEMA public GRANT SELECT ON TABLES TO gitlab_read_only;
    ALTER DEFAULT PRIVILEGES FOR USER gitlab IN SCHEMA public GRANT SELECT ON SEQUENCES TO gitlab_read_only;
    
  4. 获取 gitlab_read_only 用户的哈希密码并复制结果:

    sudo gitlab-ctl pg-password-md5 gitlab_read_only
    
  5. 编辑 /etc/gitlab/gitlab.rb 并添加上一步的密码:

    postgresql['sql_user_password'] = 'a2e20f823772650f039284619ab6f239'
    postgresql['sql_user'] = "gitlab_read_only"
    
  6. 重新配置极狐GitLab并重启 PostgreSQL:

    sudo gitlab-ctl reconfigure
    sudo gitlab-ctl restart postgresql
    

当你准备好还原只读状态时,删除 /etc/gitlab/gitlab.rb 中添加的行,并重新配置极狐GitLab 和重启 PostgreSQL:

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart postgresql

在确认一切按预期工作后,从数据库中删除 gitlab_read_only 用户。