비-Linux 패키지 설치에서 Linux 패키지 설치로 업그레이드하기

Tier: Free, Premium, Ultimate Offering: Self-Managed

비-Linux 패키지 설치에서의 업그레이드는 GitLab에서 테스트되지 않았습니다.

gitlab.yml, puma.rb, smtp_settings.rb와 같은 파일의 설정을 잃게 됩니다. 여기에서 /etc/gitlab/gitlab.rb에서 이러한 설정을 구성해야 합니다.

마이그레이션을 시작하기 전에 반드시 GitLab의 동일한 버전으로 이동하는지 확인하세요. 설치를 Linux 패키지를 사용하도록 변환하려면 다음과 같이 합니다:

  1. 현재 설치에서 백업을 생성합니다:

    cd /home/git/gitlab
    sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
    
  2. Linux 패키지를 사용하여 GitLab을 설치합니다.
  3. 백업 파일을 새 서버의 디렉토리 /var/opt/gitlab/backups/에 복사합니다.
  4. 새 설치에서 백업을 복원합니다 (자세한 지침):

    # 이 명령은 GitLab 데이터베이스의 내용을 덮어씁니다!
    sudo gitlab-backup restore BACKUP=<FILE_NAME>
    

    복원은 데이터베이스와 Git 데이터의 크기에 따라 몇 분이 걸릴 수 있습니다.

  5. Linux 패키지 설치에서 모든 설정이 /etc/gitlab/gitlab.rb에 저장되므로 새로운 설치를 구성해야 합니다. 개별 설정을 gitlab.yml, puma.rb, smtp_settings.rb와 같은 설정 파일로부터 수동으로 이동해야 합니다. 모든 사용 가능한 옵션을 보려면 gitlab.rb 템플릿을 참조하세요.
  6. 변경 사항을 적용하려면 이전 설치에서 비밀을 새로운 설치로 복사해야 합니다. GitLab은 데이터베이스 암호화, 세션 암호화 등 여러 목적으로 비밀을 사용합니다. Linux 패키지 설치에서는 모든 비밀이 한 파일 /etc/gitlab/gitlab-secrets.json에 저장되고, 소스 설치에서는 비밀이 여러 파일에 저장됩니다.
    1. 먼저, Rails와 관련된 비밀을 복원해야 합니다. /home/git/gitlab/config/secrets.yml (자체 컴파일 설치)에서 db_key_base, secret_key_base, otp_key_base의 값을 /etc/gitlab/gitlab-secrets.json (Linux 패키지 설치)에 있는 해당 항목으로 복사합니다.
    2. 그런 다음, /home/git/gitlab-shell/.gitlab_shell_secret (GitLab 소스)의 내용을 /etc/gitlab/gitlab-secrets.json (Linux 패키지 설치)에 있는 GitLab Shell의 secret_token로 복사합니다. 다음과 유사합니다:

       {
         "gitlab_workhorse": {
           "secret_token": "..."
         },
         "gitlab_shell": {
           "secret_token": "..."
         },
         "gitlab_rails": {
           "secret_key_base": "...",
           "db_key_base": "...",
           "otp_key_base": "...",
         }
         ...
       }
      
  7. 변경 사항을 적용하려면 GitLab을 다시 구성합니다:

    sudo gitlab-ctl reconfigure
    
  8. /home/git/gitlab-shell/.gitlab_shell_secret을 마이그레이션했다면 Gitaly를 다시 시작해야 합니다:

    sudo gitlab-ctl restart gitaly
    

비-Linux 패키지 PostgreSQL에서 Linux 패키지 설치로 백업을 사용하여 업그레이드

비-Linux 패키지 설치에서 백업을 생성하고 Linux 패키지 설치에서 복원하여 업그레이드합니다. 이때 반드시 GitLab의 정확히 동일한 버전을 사용하고 있어야 합니다(예: 6.7.3). 이 작업을 수행하기 전에 백업을 만들기 위해 비-Linux 패키지 설치를 업그레이드해야 할 수 있습니다.

업그레이드 후 gitlab:check 작업을 실행하여 확인하세요:

sudo gitlab-rake gitlab:check

/home/git과 같은 디렉토리에서 symbolic link를 찾지 못할 때와 같은 오류가 발생하면 다음 명령을 실행하여 Git hooks 경로를 수정하세요:

find . -lname /home/git/gitlab-shell/hooks -exec sh -c 'ln -snf /opt/gitlab/embedded/service/gitlab-shell/hooks $0' {} \;

gitlab-shell/home/git에 위치한다고 가정합니다.

비-Linux 패키지 PostgreSQL에서 Linux 패키지 설치로 인플레이스 업그레이드

소스 설치를 Linux 패키지 설치로 인플레이스 업그레이드하는 것도 가능합니다. 여기서는 Ubuntu에서 PostgreSQL을 사용하고 있으며, 현재 GitLab 버전과 일치하는 Linux 패키지를 사용하고 있다고 가정합니다. 또한 GitLab의 소스 설치가 모든 기본 경로와 사용자를 사용하고 있다고 가정합니다.

먼저, GitLab, Redis 및 NGINX를 중지하고 비활성화합니다.

# Ubuntu
sudo service gitlab stop
sudo update-rc.d gitlab disable

sudo service nginx stop
sudo update-rc.d nginx disable

sudo service redis-server stop
sudo update-rc.d redis-server disable

서버에서 GitLab을 관리하기 위해 구성 관리 시스템을 사용하고 있다면 해당 시스템에서 GitLab 및 관련 서비스를 비활성화해야 합니다. 다음 단계에서는 Git 사용자의 기존 홈 디렉토리(/home/git)를 /var/opt/gitlab로 변경할 것으로 가정합니다.

이제 새 설정을 위한 gitlab.rb 파일을 생성하세요:

sudo mkdir /etc/gitlab
sudo tee -a /etc/gitlab/gitlab.rb <<'EOF'
# 여기에 고유한 GitLab URL을 사용합니다
external_url 'http://gitlab.example.com'

# 저장소가 /home/git/repositories에 있는 것으로 가정합니다 (소스 설치의 기본값)
git_data_dirs({ 'default' => { 'path' => '/home/git' } })

# 이미 실행 중인 PostgreSQL을 재사용합니다
postgresql['enable'] = false
# 이 db_host 설정은 Debian PostgreSQL 패키지를 위한 것입니다
gitlab_rails['db_host'] = '/var/run/postgresql/'
gitlab_rails['db_port'] = 5432
# GitLab DB 사용자를 'git'이라고 가정합니다
gitlab_rails['db_username'] = 'git'
EOF

그런 다음 Linux 패키지를 설치하고 설치를 다시 구성하세요:

sudo gitlab-ctl reconfigure

아직 끝나지 않았습니다! gitlab-ctl reconfigure 실행으로 Git 사용자의 홈 디렉토리가 변경되었으므로 OpenSSH에서 authorized_keys 파일을 찾지 못합니다. 다음 명령을 사용하여 키 파일을 다시 빌드하세요:

sudo gitlab-rake gitlab:shell:setup

이제 기존의 저장소 및 사용자가 있는 GitLab 서버에 HTTP 및 SSH 액세스 권한이 있어야 합니다.

GitLab 웹 인터페이스로 로그인할 수 있다면, 다음 단계는 이전 서비스가 Linux 패키지 설치에 영향을 미치지 않도록 서버를 다시 부팅하는 것입니다.

LDAP와 같은 특별한 기능을 사용하는 경우에는 설정 문서를 참조하여 gitlab.rb에 설정해야 합니다.