Help us learn about your current experience with the documentation. Take the survey.

将 GitLab 置于只读状态

  • 版本:Free, Premium, Ultimate
  • 产品:GitLab Self-Managed

将 GitLab 置于只读状态的推荐方法是启用维护模式

在某些情况下,您可能希望将 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 界面

如果您不介意关闭 GitLab 界面,那么最简单的方法是停止 sidekiqpuma,这样就能有效确保无法对 GitLab 进行任何更改:

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

当您准备好恢复此设置时:

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

使数据库变为只读

如果您希望允许用户继续使用 GitLab 界面,请确保数据库处于只读状态:

  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,您可以将其更改为自己喜欢的密码:

    -- 注意:使用前面定义的密码
    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 用户。