GitLab 서버 이전기: CentOS 7에서 Ubuntu 24.04로, 15.8.1에서 18.10.0까지

EOL된 CentOS 7을 버리고 Ubuntu 24.04로 GitLab을 마이그레이션하면서 3년치 버전을 한번에 업그레이드

·약 6분·조회 872·수정일: 2026년 10월 5일

CentOS 7이 2024년 6월에 EOL되면서 GitLab 업그레이드가 막혔다. 17.7이 CentOS 7에서 지원하는 마지막 버전이라, 새 서버로 이전하면서 최신 버전까지 올리기로 했다.

마이그레이션 개요

┌───────────────┐         ┌───────────────┐
│   기존 서버 (CentOS 7)   │         │   신규 서버 (Ubuntu 24.04)│
│                         │         │                         │
│   GitLab 15.8.1         │         │   GitLab 18.10.0        │
│   ↓                     │  rsync  │                         │
│   GitLab 17.7.0 ─────│────▶│   GitLab 17.7.0        │
│   (CentOS 마지막 버전)   │         │   ↓                     │
│                         │         │   GitLab 18.10.0        │
│   /data/git-data (135GB)│         │   /data (300GB)         │
└───────────────┘         └───────────────┘
┌───────────────┐         ┌───────────────┐
│   기존 서버 (CentOS 7)   │         │   신규 서버 (Ubuntu 24.04)│
│                         │         │                         │
│   GitLab 15.8.1         │         │   GitLab 18.10.0        │
│   ↓                     │  rsync  │                         │
│   GitLab 17.7.0 ─────│────▶│   GitLab 17.7.0        │
│   (CentOS 마지막 버전)   │         │   ↓                     │
│                         │         │   GitLab 18.10.0        │
│   /data/git-data (135GB)│         │   /data (300GB)         │
└───────────────┘         └───────────────┘

왜 이렇게 해야하는가?

1.GitLab은 한번에 최신버전으로 업그레이드가 불가능하다. - 반드시 정해진 경로로 순차 업그레이드 필요.

2.Ubuntu 24.04는 GitLab 17.1.0부터 지원 - 15.x 를 바로 설치할 수 없음

3.CentOS 7 은 17.7까지만 지원 - 이후 버전은 패키지가 없음

결국 CentOS에서 17.7까지 올린 후, Ubuntu로 이전해서 나머지를 올리기로 했다.

Phase 1: CentOS 7에서 업그레이드(15.8.1 -> 17.7.0)

유지보수 모드 & 백업

# 푸시 차단
sudo gitlab-ctl deploy-page up

#백업 생성
sudo gitlab-backup create

#설정 파일 백업
sudo cp /etc/gitlab/gitlab.rb /root/gitlab.rb.backup
sudo cp /etc/gitlab/gitlab-secrets.json /root/gitlab-secrets.json.backup
# 푸시 차단
sudo gitlab-ctl deploy-page up

#백업 생성
sudo gitlab-backup create

#설정 파일 백업
sudo cp /etc/gitlab/gitlab.rb /root/gitlab.rb.backup
sudo cp /etc/gitlab/gitlab-secrets.json /root/gitlab-secrets.json.backup

업그레이드 경로

GitLab 공식 문서에서 제시하는 업그레이드 경로를 따랐다.

15.8.1 → 15.11.13 → 16.0.8 → 16.3.7 → 16.7.9 → 16.11.10 → 17.0.8 → 17.3.7 → 17.5.0 → 17.7.0
15.8.1 → 15.11.13 → 16.0.8 → 16.3.7 → 16.7.9 → 16.11.10 → 17.0.8 → 17.3.7 → 17.5.0 → 17.7.0
#한 단계씩 순차적으로 실행
sudo yum install -y gitlab-ce-15.11.13-ce.0.el7
sudo yum install -y gitlab-ce-16.0.8-ce.0.el7
sudo yum install -y gitlab-ce-16.3.7-ce.0.el7
sudo yum install -y gitlab-ce-16.7.9-ce.0.el7
sudo yum install -y gitlab-ce-16.11.10-ce.0.el7
sudo yum install -y gitlab-ce-17.0.8-ce.0.el7
sudo yum install -y gitlab-ce-17.3.7-ce.0.el7
sudo yum install -y gitlab-ce-17.5.0-ce.0.el7
sudo yum install -y gitlab-ce-17.7.0-ce.0.el7

#yum install만 해도 자동으로 reconfigure와 restart가 실행된다. 각 단계마다 5분정도 소요.
#한 단계씩 순차적으로 실행
sudo yum install -y gitlab-ce-15.11.13-ce.0.el7
sudo yum install -y gitlab-ce-16.0.8-ce.0.el7
sudo yum install -y gitlab-ce-16.3.7-ce.0.el7
sudo yum install -y gitlab-ce-16.7.9-ce.0.el7
sudo yum install -y gitlab-ce-16.11.10-ce.0.el7
sudo yum install -y gitlab-ce-17.0.8-ce.0.el7
sudo yum install -y gitlab-ce-17.3.7-ce.0.el7
sudo yum install -y gitlab-ce-17.5.0-ce.0.el7
sudo yum install -y gitlab-ce-17.7.0-ce.0.el7

#yum install만 해도 자동으로 reconfigure와 restart가 실행된다. 각 단계마다 5분정도 소요.

Phase 2: Ubuntu 24.04 서버 준비

디스크 마운트

300GB 용량의 오브젝트 스토리지를 /data에 마운트 했다.

# 파티션 생성
sudo parted /dev/vdb --script mklabel gpt mkpart primary ext4 0% 100%

# 파일시스템 생성(꽤 오랜시간이 걸렸다.)
sudo mkfs.ext4 /dev/vdb1

# 마운트
sudo mkdir -p /data
sudo mount /dev/vdb1 /data

# 영구 마운트 설정
echo '/dev/vdb1 /data ext4 defaults 0 2' | sudo tee -a /etc/fsta
# 파티션 생성
sudo parted /dev/vdb --script mklabel gpt mkpart primary ext4 0% 100%

# 파일시스템 생성(꽤 오랜시간이 걸렸다.)
sudo mkfs.ext4 /dev/vdb1

# 마운트
sudo mkdir -p /data
sudo mount /dev/vdb1 /data

# 영구 마운트 설정
echo '/dev/vdb1 /data ext4 defaults 0 2' | sudo tee -a /etc/fsta

GitLab 17.7.0 설치

Ubuntu 24.04 에서는 17.1.0 이상만 설치 가능하다. CentOS와 동일한 버전인 17.7.0을 설치했다.

# 필수 패키지
sudo apt update
sudo apt install -y curl openssh-server ca-certificates tzdata perl

# GitLab 저장소 추가
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

# 동일 버전 설치
sudo apt install gitlab-ce=17.7.0-ce.0
# 필수 패키지
sudo apt update
sudo apt install -y curl openssh-server ca-certificates tzdata perl

# GitLab 저장소 추가
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

# 동일 버전 설치
sudo apt install gitlab-ce=17.7.0-ce.0

Phase 3: 데이터 이전

gitlab-backup 실패

CentOS에서 백업을 시도했지만 문제가 발생했다..

Out of memory, malloc failed (tried to allocate 386278394 bytes)
Out of memory, malloc failed (tried to allocate 386278394 bytes)

메모리 여유가 없는 서버라서,, 135GB에 달하는 레포지토리 백업을 하던 중 실패했다.
(오랜시간 기다렸는데..)

메모리만의 문제는 아니었다. 8GB의 스왑메모리를 추가했지만, 결과적으로는 디스크 용량또한 부족해서 백업 파일 생성에 실패했다.

해결 : rsync + pg_dump 방식

백업을 하는대신 데이터를 직접 옮기기로 했다.

# CentOS → Ubuntu SSH 연결 확인 후

# 설정 파일 전송
scp /etc/gitlab/gitlab.rb root@UBUNTU_IP:/data/gitlab-config/
scp /etc/gitlab/gitlab-secrets.json root@UBUNTU_IP:/data/gitlab-config/

# 리포지토리 데이터 전송 (135GB, 약 1시간 소요)
rsync -avz --progress /data/git-data/ root@UBUNTU_IP:/data/git-data/

# PostgreSQL 데이터 전송
rsync -avz --progress /var/opt/gitlab/postgresql/ root@UBUNTU_IP:/data/postgresql/
# CentOS → Ubuntu SSH 연결 확인 후

# 설정 파일 전송
scp /etc/gitlab/gitlab.rb root@UBUNTU_IP:/data/gitlab-config/
scp /etc/gitlab/gitlab-secrets.json root@UBUNTU_IP:/data/gitlab-config/

# 리포지토리 데이터 전송 (135GB, 약 1시간 소요)
rsync -avz --progress /data/git-data/ root@UBUNTU_IP:/data/git-data/

# PostgreSQL 데이터 전송
rsync -avz --progress /var/opt/gitlab/postgresql/ root@UBUNTU_IP:/data/postgresql/

DB 데이터 인식불가

rsync로 PostgreSQL 데이터를 복사했으나, GitLab에서 로그인에 실패하길래 확인해보니, 데이터가 이전되지 않았다. reconfigure 시 새로운 DB가 생성되어 있었던 것이다.

# CentOS에서 덤프 생성
cd /tmp
sudo -u gitlab-psql /opt/gitlab/embedded/bin/pg_dump \
  -h /var/opt/gitlab/postgresql gitlabhq_production > /tmp/gitlab_db.sql

# Ubuntu로 전송
scp /tmp/gitlab_db.sql root@UBUNTU_IP:/tmp/

# Ubuntu에서 복원
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq

sudo gitlab-psql -d postgres -c "DROP DATABASE gitlabhq_production;"
sudo gitlab-psql -d postgres -c "CREATE DATABASE gitlabhq_production OWNER gitlab;"
sudo gitlab-psql -d gitlabhq_production < /tmp/gitlab_db.sql

sudo gitlab-ctl start
# CentOS에서 덤프 생성
cd /tmp
sudo -u gitlab-psql /opt/gitlab/embedded/bin/pg_dump \
  -h /var/opt/gitlab/postgresql gitlabhq_production > /tmp/gitlab_db.sql

# Ubuntu로 전송
scp /tmp/gitlab_db.sql root@UBUNTU_IP:/tmp/

# Ubuntu에서 복원
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq

sudo gitlab-psql -d postgres -c "DROP DATABASE gitlabhq_production;"
sudo gitlab-psql -d postgres -c "CREATE DATABASE gitlabhq_production OWNER gitlab;"
sudo gitlab-psql -d gitlabhq_production < /tmp/gitlab_db.sql

sudo gitlab-ctl start

복호화키를 담고 있는 gitlab-secrets.json 도 꼭 옮겨주자.

scp /etc/gitlab/gitlab-secrets.json root@UBUNTU_IP:/etc/gitlab/

# Ubuntu에서 재시작
sudo gitlab-ctl stop
sudo chmod 600 /etc/gitlab/gitlab-secrets.json
sudo gitlab-ctl reconfigure
sudo gitlab-ctl start
scp /etc/gitlab/gitlab-secrets.json root@UBUNTU_IP:/etc/gitlab/

# Ubuntu에서 재시작
sudo gitlab-ctl stop
sudo chmod 600 /etc/gitlab/gitlab-secrets.json
sudo gitlab-ctl reconfigure
sudo gitlab-ctl start

gitlab-secrets.json은 암호화된 데이터(비밀번호, 2FA 등)를 복호화하는 키를 담고 있다. 이게 없으면 기존 계정 로그인이 불가능하다.

Phase 4 : Ubuntu에서 최신 버전 업그레이드 (17.7.0 -> 18.10.0)

업그레이드 경로

#17.7.0 → 17.8.x → 17.11.x → 18.0.x → 18.2.x → 18.5.x → 18.8.x → 18.10.0

sudo apt install gitlab-ce=17.8.7-ce.0
sudo apt install gitlab-ce=17.11.7-ce.0
# gitlab.rb 수정 (git_data_dirs → gitaly configuration)
sudo gitlab-ctl reconfigure
sudo apt install gitlab-ce=18.0.2-ce.0
sudo apt install gitlab-ce=18.2.2-ce.0
sudo apt install gitlab-ce=18.5.2-ce.0
sudo apt install gitlab-ce=18.8.6-ce.0
sudo apt install gitlab-ce=18.10.0-ce.0
#17.7.0 → 17.8.x → 17.11.x → 18.0.x → 18.2.x → 18.5.x → 18.8.x → 18.10.0

sudo apt install gitlab-ce=17.8.7-ce.0
sudo apt install gitlab-ce=17.11.7-ce.0
# gitlab.rb 수정 (git_data_dirs → gitaly configuration)
sudo gitlab-ctl reconfigure
sudo apt install gitlab-ce=18.0.2-ce.0
sudo apt install gitlab-ce=18.2.2-ce.0
sudo apt install gitlab-ce=18.5.2-ce.0
sudo apt install gitlab-ce=18.8.6-ce.0
sudo apt install gitlab-ce=18.10.0-ce.0

git_data_dirs 설정 변경 (18.0)

18.0부터 git_data_dirs 설정이 제거되었다.

# 기존 (17.x)
git_data_dirs({"default" => {"path" => "/data/git-data"}})

# 변경 (18.0+)
gitaly['configuration'] = {
  storage: [
    {
      name: 'default',
      path: '/data/git-data/repositories'
    }
  ]
}
# 기존 (17.x)
git_data_dirs({"default" => {"path" => "/data/git-data"}})

# 변경 (18.0+)
gitaly['configuration'] = {
  storage: [
    {
      name: 'default',
      path: '/data/git-data/repositories'
    }
  ]
}

Let's Encrypt 인증서 설정

# /etc/gitlab/gitlab.rb
external_url 'https://git.example.com'
letsencrypt['enable'] = true
letsencrypt['auto_renew'] = true
# /etc/gitlab/gitlab.rb
external_url 'https://git.example.com'
letsencrypt['enable'] = true
letsencrypt['auto_renew'] = true

처음에 인증서 발급이 실패했는데, http로 먼저 정상 동작시킨 후 https로 전환하니 해결되었다.

최종 결과

항목

Before

After

OS

CentOS 7 (EOL)

Ubuntu 24.04 LTS

GitLab

15.8.1

18.10.0

디스크

135GB 사용

300GB 할당

총 업그레이드 단계

-

약 15단계

공유