팀에서 기존에 사용 중이던 Git 서버를 반납해야 했기에, 새로운 Git 서버를 구축해야 하는 미션이 떨어졌다.
우선 기존 GitBlit을 버리고 GitLab으로 갈아타기로 마음먹었으며, 이번 기회에 팀 내의 Git Branch 전략을 새롭게 정립하고 CI/CD 또한 개선하려 한다.
이번 포스팅에서는 Internet이 안되는 Intranet 환경에서 GitLab을 설치하는 과정과, Git Repository를 이전하는 방법에 대해 다룬다.
1. Install and configure the necessary dependencies
1.1 gitlab 설치에 필요한 패키지 설치
$ sudo yum install -y curl policycoreutils-python openssh-server perl
1.2 sshd 실행
$ sudo systemctl enable sshd
$ sudo systemctl start sshd
1.3 http, https 방화벽 open
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo systemctl reload firewalld
# open 확인
$ sudo firewall-cmd --list-all
# 방화벽 재시작
$ sudo systemctl restart firewalld
iptables -L -vn
으로 firewall list 확인
1.4 메일링을 위한 postfix 메일서버 설치
$ sudo yum install postfix
$ sudo systemctl enable postfix
$ sudo systemctl start postfix
2. Add the GitLab package repository and install the package
인터넷이 된다면 아래 명령어를 이용하여 GitLab package repository를 등록하고 설치하면 된다.
$ curl -s <https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh> | sudo bash
$ sudo yum install gitlab-ce-13.11.3-ce.0.el7.x86_64
우리는 offline 환경이기 때문에 GitLab에서 제공하는 RPM 패키지를 다운받아서 설치하자.
https://packages.gitlab.com/gitlab/gitlab-ce
$ rpm -Uvh gitlab-ce-13.11.3-ce.0.el7.x86_64.rpm
3. Configure GitLab
3.1 /etc/gitlab/gitlab.rb
경로의 파일에서 gitlab 설정 확인
$ vi /etc/gitlab/gitlab.rb
3.2 external_url 변경
도메인 이름을 설정하려면 external_url
변수를 수정하면 된다.
## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! <https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab>
##!
##! Note: During installation/upgrades, the value of the environment variable
##! EXTERNAL_URL will be used to populate/replace this value.
##! On AWS EC2 instances, we also attempt to fetch the public hostname/IP
##! address from AWS. For more details, see:
##! <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html>
external_url "<http://gitlab.example.com>"
3.3 IP, Port 변경
만약 IP와 Port를 변경하고 싶은 경우 unicorn['listen']
과 unicorn['port']
변수를 수정하면 된다.
################################################################################
## GitLab Unicorn
##! Tweak unicorn settings.
##! Docs: <https://docs.gitlab.com/omnibus/settings/unicorn.html>
################################################################################
### Advanced settings
# unicorn['listen'] = 'localhost'
# unicorn['port'] = 8080
# unicorn['socket'] = '/var/opt/gitlab/gitlab-rails/sockets/gitlab.socket'
# unicorn['pidfile'] = '/opt/gitlab/var/unicorn/unicorn.pid'
# unicorn['tcp_nopush'] = true
# unicorn['backlog_socket'] = 1024
###! **Make sure somaxconn is equal or higher then backlog_socket**
# unicorn['somaxconn'] = 1024
3.4 data repo 변경
git_data_dirs({
"default" => {
"path" => "/mnt/nfs-01/git-data"
}
)}
만약 이 부분을 설정하지 않고 #
주석 처리가 되어 있다면, default 저장소 path는 /var/opt/gitlab/git-data
로 설정된다.
나는 이 부분을 새로 마운트한 /data volume으로 변경해주었다.
만약 directory를 새롭게 추가하였다면, gitlab이 접근할 수 있도록 권한을 확인해 주어야 한다.
권한이 없다면 아래 명령어로 권한을 부여하자
$ chown -R git:git /data/git-data/
3.5 SMTP setting
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.server"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "smtp user"
gitlab_rails['smtp_password'] = "smtp password"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
# If your SMTP server does not like the default 'From: gitlab@localhost' you
# can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'
# If your SMTP server is using self signed certificates you can specify a custom ca file
gitlab_rails['smtp_ca_file'] = '/path/to/your/cacert.pem'
참고 : https://docs.gitlab.com/omnibus/settings/smtp.html
4. GitLab 초기화 및 설치 진행
$ sudo gitlab-ctl reconfigure
5. Web 접속 및 로그인
최초 접속 시 password reset 화면으로 redirect 된다.
default 계정의 username은 root
이다.
password 설정 후 root로 로그인하여 사용할 유저를 등록하면 된다.
6. Git Repository Migration (GitBlit → GitLab)
이제 준비는 끝났다.
기존에 사용하던 GitBlit의 Repository를 새로 구축한 GitLab으로 이동해야 한다.
--mirror
옵션을 사용하면 원격 저장소(Remote Repository)의 복사본을 만들어 간단하게 Repository를 이전할 수 있다.
참고로 --mirror
는 --bare
옵션을 포함한다.
git clone --mirror {기존 리파지토리 주소}
cd {기존 리파지토리 명}.git
git remote set-url --push origin {신규 리파지토리 주소}
git push --mirror
Reference
- https://about.gitlab.com/install/#centos-7
- https://docs.gitlab.com/omnibus/manual_install.html
- https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md