
이번에 설치할 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

2. puma 서버 포트 변경

@ 설정에서 포트를 변경해야 하는 상황은 어떤걸까?
⚠️ 포트 충돌 문제
문제 상황
서버에서 이미 사용중인 포트 존재
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: 최신 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 에 작성된 초기 비밀번호로 접속해야 한다...
