GitLab을 읽기 전용 상태로 설정하기

Tier: Free, Premium, Ultimate Offering: Self-managed
note
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_onlyfalse로 변경하여 이 상태를 되돌립니다.
    예를 들어, 다음을 실행합니다:

    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
사용자를 제거하십시오.