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 界面,那么最简单的方法是停止 sidekiq 和 puma,这样就能有效确保无法对 GitLab 进行任何更改:
sudo gitlab-ctl stop sidekiq
sudo gitlab-ctl stop puma当您准备好恢复此设置时:
sudo gitlab-ctl start sidekiq
sudo gitlab-ctl start puma使数据库变为只读
如果您希望允许用户继续使用 GitLab 界面,请确保数据库处于只读状态:
-
进行一次 GitLab 备份,以防出现意外情况。
-
以管理员用户身份在控制台中进入 PostgreSQL:
sudo \ -u gitlab-psql /opt/gitlab/embedded/bin/psql \ -h /var/opt/gitlab/postgresql gitlabhq_production -
创建
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; -
获取
gitlab_read_only用户的哈希密码并复制结果:sudo gitlab-ctl pg-password-md5 gitlab_read_only -
编辑
/etc/gitlab/gitlab.rb并添加上一步中的密码:postgresql['sql_user_password'] = 'a2e20f823772650f039284619ab6f239' postgresql['sql_user'] = "gitlab_read_only" -
重新配置 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 用户。