Linux에 GitLab 설치하기

What does the fox say?

 

 

이번에 설치할 GitLab은 내부서버용이다.

 

서버 관련 정보가 아래와 같다고 해보자.

ip (host) 192.1.1.37
id (server user) root
password (server user) passw@rd
사용 할 repository 경로 /data/gitlab

 


🧪 GitLab 설치 명령어

# 1. 필수 패키지 설치
sudo yum install -y curl policycoreutils-python-utils openssh-server

 

# 2. SSH 서비스 시작
sudo systemctl enable sshd
sudo systemctl start sshd
# 3. 방화벽 설정
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
# 4. GitLab 저장소 추가
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
# 5. GitLab 설치 (external_url 지정 방법) => 실제 설치
sudo EXTERNAL_URL="http://192.1.1.37:3333" yum install -y gitlab-ee
# 6. 추가 포트 열기 (필요한 경우)
sudo firewall-cmd --permanent --add-port=3333/tcp
sudo firewall-cmd --permanent --add-port=3335/tcp
sudo firewall-cmd --reload
# 7. GitLab 재구성
sudo gitlab-ctl reconfigure

🛠️설정 바꾸기

경로예시 : /etc/gitlab/gitlab.rb

  • 변경 한 이후에는 반드시 reconfigure가 필요하다.
  • 충돌을 방지하기 위해서는 stop → reconfigure → start 순서가 좋다

1. external_url 지정

  • external_url는 설치 시 지정 가능하다 (우리는 위에서 설정했다)
  • 또는 sudo EXTERNAL_URL="<http://192.168.1.22:3333>" yum install -y gitlab-ee

gitlab.rb

 

2. puma 서버 포트 변경

gitlab.rb

더보기

@ 설정에서 포트를 변경해야 하는 상황은 어떤걸까?

⚠️ 포트 충돌 문제

문제 상황

서버에서 이미 사용중인 포트 존재
Tomcat : 8080 포트 사용GitLab Puma: 8080 포트 사용 (기본 값)⇒ 포트 충돌 발생

 

따라서 8080 포트가 사용 중인 서버에서는 GitLab의 Puma 포트를 8080이 아닌 다른 포트로 변경해야 한다.


※ GitLab의 두 가지 포트 (참고용)

사용자 → [도메인 포트] → Nginx → [웹 서버 포트] → Puma/Unicorn
  • 도메인 포트
    • 사용자가 브라우저에서 접속하는 포트 (예: 80, 3333)
    • 외부에서 접속하는 포트 (방화벽에서 열어야 함)
  •  웹 서버 포트
    • GitLab 내부에서 Ruby 애플리케이션이 실행되는 포트 (기본: 8080)
    • GitLab 내부에서만 사용 (Tomcat과 겹치면 변경 필요)
  • Ruby 웹 서버
    • Puma/Unicorn이 실제 GitLab 애플리케이션을 실행|
    Puma/Unicorn이란? - GitLab은 Ruby on Rails로 만들어짐 → Ruby 애플리케이션을 실행하는 웹 서버가 필요
    • Puma: 최신 GitLab에서 사용 (멀티스레드)
    • Unicorn: 구버전에서 사용 (멀티프로세스)

3. smtp 정보 수정

smtp는 초대 메일, 관리자에게 승인 메일 발송 등 실제 메일 발송 시 필요하다.

👉 메일이 발송이 될 수 있도록 실제 smtp 서버 설정을 해주어야 한다!

gitlab_rails['smtp_enable'] = true   #SMTP 사용 여부. true면 메일 발송을 SMTP 방식으로 처리
gitlab_rails['smtp_address'] = "mail.test.net"   #메일 서버 주소. 실제 SMTP 서버가 동작하는 도메인 또는 IP
gitlab_rails['smtp_port'] = 25   #메일 서버 포트 번호
gitlab_rails['smtp_user_name'] = "sender"   #SMTP 서버에 로그인할 계정 아이디
gitlab_rails['smtp_password'] = "senderpass"   #위 계정의 비밀번호
gitlab_rails['smtp_domain'] = "test.net"   #메일 도메인(보통 SMTP 서버와 동일)
gitlab_rails['smtp_authentication'] = "login"   #인증 방식(일반적으로 login, plain, cram_md5 등을 지원)
gitlab_rails['smtp_enable_starttls_auto'] = true   #STARTTLS 자동 사용 여부(true: 가능하면 TLS(암호화)로 연결 시도)
gitlab_rails['smtp_tls'] = false   #SSL/TLS 직접 연결 여부(true: 포트 465에서 SSL 직접 연결)
gitlab_rails['smtp_pool'] = false   #SMTP 연결 풀링 여부(여러 메일을 빠르게 보낼 때 연결 재사용)

 

지금은 내부 메일 서버로 맺는다는 가정 하에 위와 같이 설정했지만,

외부 클라우드 환경과 같다면 보통 587+TLS / 465+SSL을 권장한다.

4. repository 경로 수정

# repository 변경
gitlab_rails['repositories_storages'] = {
  'default' => {
    'path' => '/data/gitlab',
    'gitaly_address' => 'unix:/var/opt/gitlab/gitaly/gitaly.socket'
  }
}

## Gitaly 서버 설정
gitaly['configuration'] = {
  socket_path: '/var/opt/gitlab/gitaly/gitaly.socket',
  storage: [
    {
      name: 'default',
      path: '/data/gitlab'
    }
  ]
}

 

더보기

@설정 풀어보기

1. 저장소 경로 지정

'path' => '/data/gitlab'
  • 실제 Git 저장소(프로젝트 코드)가 저장될 위치를 /data/gitlab으로 지정
  • GitLab의 기본 위치(/var/opt/gitlab/git-data) 대신, 직접 관리하기 쉽게 별도 디렉토리를 쓰는 경우가 많다

2. Gitaly 소켓 연결

 
'gitaly_address' => 'unix:/var/opt/gitlab/gitaly/gitaly.socket'
  • GitLab이 저장소에 접근할 때 Gitaly라는 서비스를 통해 접근한다
  • 여기서 unix 소켓으로 같은 서버의 Gitaly와 통신하도록 설정한다

3. Gitaly 서버 설정 블록

 
gitaly['configuration'] = {
  socket_path: '/var/opt/gitlab/gitaly/gitaly.socket',
  storage: [
    {
      name: 'default',
      path: '/data/gitlab'
    }
  ]
}
  • socket_path : GitLab Rails와 Gitaly가 소통하는 채널
  • storage : 이름(default)과 실제 경로(/data/gitlab)를 연결
  • 여러 스토리지를 추가할 수도 있다 (ex; SSD, HDD 따로 지정 등)

설정이 올바른지 확인하기 위해서 아래의 명령어를 입력하면 된다

sudo cat /var/opt/gitlab/gitaly/config.toml | grep -A 5 "storage"

명령어 결과 값

실제로 Project 생성 후 정상적으로 git이 생성되었는지 확인해야 한다!

더보기

@Project 저장 확인하기 (서비스 시작까지 한 이후)

간단하게 저장소 개수로 확인하기

# 1. 현재 저장소 개수 확인
echo "Before: $(find /data/gitlab/@hashed/ -name "*.git" | wc -l) repositories"

# 2. GitLab에서 새 프로젝트 생성

# 3. 저장소 개수 다시 확인
echo "After: $(find /data/gitlab/@hashed/ -name "*.git" | wc -l) repositories"

 

FTP 클라이언트 등을 이용해서 봐도 좋다

 

⇒ 실제로 /data/gitlab/@hashed/ 경로에 저장소가 생성되고 있다면 설정이 올바르게 동작하는 것이다.

 

GitLab 저장소 구조 간단 설명

1. /data/gitlab/repositories/ 디렉토리의 역할

  • Gitaly 메타데이터 저장소: 실제 Git 저장소가 아닌 Gitaly 서비스의 메타데이터와 설정 파일들을 저장
  • +gitaly/ : Gitaly 서비스 관련 파일들
  • .gitaly-metadata : Gitaly 메타데이터 파일

2. 실제 Git 저장소

  • GitLab은 Hashed Storage를 사용한다.

♻️ GitLab 재구성

위에서 GitLab 설정 파일을 수정했기 때문에 재구성 진행해야 한다.
(재구성 시에는 시간이 다소 걸린다.)

 

아래의 명령어를 순차적으로 입력하자.

sudo gitlab-ctl stop         # gitlab 중지
sudo gitlab-ctl reconfigure  # 설정 적용
sudo gitlab-ctl restart      # gitlab 재시작

🔗 설정한 external_url로 접속해보자!

짜잔~


👤 초기 관리자 정보 변경

초기 관리자 계정으로 접속해야, 사용자들 가입 승인을 해줄 수 있다.

관리자 계정 ID : root
관리자 초기 비밀번호 확인 : /etc/gitlab/initial_root_password 참고 (또는 아래 명령어)

sudo cat /etc/gitlab/initial_root_password

방법은 간단히 두가지가 있다.

1) gitlab console에서 변경하기

gitlab-rails console     # 접속(오래 걸림)
user = User.where(id: 1).first
user.password = '변경 할 비밀번호'
user.password_confirmation = '변경 할 비밀번호'
user.save
exit

2) 웹브라우저에서 변경하기

⇒ 다만 이 방법도 접속은 /etc/gitlab/initial_root_password 에 작성된 초기 비밀번호로 접속해야 한다...