웹사이트 검색

Ubuntu 18.04에서 GitLab을 설치하고 구성하는 방법


소개

GitLab은 Git 리포지토리를 호스팅하는 데 주로 사용되는 오픈 소스 애플리케이션으로 문제 추적과 같은 추가 개발 관련 기능이 있습니다. 자체 인프라를 사용하여 호스팅하도록 설계되었으며 개발 팀을 위한 내부 리포지토리 저장소, 사용자와의 공용 인터페이스 또는 기여자가 자신의 프로젝트를 호스팅하는 수단으로 배포할 때 유연성을 제공합니다.

GitLab 프로젝트를 사용하면 최소한의 설치 메커니즘으로 자체 하드웨어에 GitLab 인스턴스를 생성할 수 있습니다. 이 가이드에서는 Ubuntu 18.04 서버에서 GitLab Community Edition을 설치하고 구성하는 방법을 배웁니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 루트가 아닌 sudo 사용자와 기본 방화벽이 있는 Ubuntu 18.04 서버. 이를 설정하려면 Ubuntu 18.04 초기 서버 설정 가이드를 따르세요.

게시된 GitLab 하드웨어 요구 사항은 최소 다음과 같은 서버 사용을 권장합니다.

  • CPU용 4코어
  • 메모리용 4GB RAM

일부 스왑 공간을 RAM으로 대체할 수는 있지만 권장하지는 않습니다. 이 가이드의 다음 예제에서는 이러한 최소 리소스를 사용합니다.

  • 서버를 가리키는 도메인 이름. 자세한 내용은 DigitalOcean에서 DNS를 시작하는 방법에 대한 설명서를 읽어보십시오. 이 자습서에서는 your_domain을 예로 사용하지만 실제 도메인 이름으로 바꿔야 합니다.

1단계 - 종속성 설치

GitLab을 설치하기 전에 설치 중에 그리고 지속적으로 활용하는 소프트웨어를 설치하는 것이 중요합니다. 필요한 소프트웨어는 Ubuntu의 기본 패키지 저장소에서 설치할 수 있습니다.

먼저 로컬 패키지 인덱스를 새로 고칩니다.

  1. sudo apt update

그런 다음 다음 명령을 입력하여 종속성을 설치합니다.

  1. sudo apt install ca-certificates curl openssh-server postfix tzdata perl

이 소프트웨어 중 일부는 이미 설치되어 있을 것입니다. postfix 설치의 경우 메시지가 표시되면 인터넷 사이트를 선택합니다. 다음 화면에서 서버의 도메인 이름을 입력하여 시스템이 메일을 보내는 방법을 구성합니다.

이제 의존성을 설치했으므로 GitLab을 설치할 준비가 되었습니다.

2단계 - GitLab 설치

종속 항목이 준비되면 GitLab을 설치할 수 있습니다. 이 프로세스는 설치 스크립트를 활용하여 GitLab 리포지토리로 시스템을 구성합니다.

먼저 /tmp 디렉토리로 이동합니다.

  1. cd /tmp

그런 다음 설치 스크립트를 다운로드합니다.

  1. curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh

다운로드한 스크립트를 자유롭게 검토하여 수행할 작업에 익숙한지 확인하십시오. GitLab 설치 지침에서 호스트 버전의 스크립트를 찾을 수도 있습니다.

  1. less /tmp/script.deb.sh

스크립트의 안전성에 만족하면 설치 프로그램을 실행합니다.

  1. sudo bash /tmp/script.deb.sh

이 스크립트는 GitLab 유지 관리 리포지토리를 사용하도록 서버를 설정합니다. 이를 통해 다른 시스템 패키지에 사용하는 것과 동일한 패키지 관리 도구로 GitLab을 관리할 수 있습니다. 이 작업이 완료되면 apt를 사용하여 실제 GitLab 애플리케이션을 설치할 수 있습니다.

  1. sudo apt install gitlab-ce

이렇게 하면 시스템에 필요한 구성 요소가 설치되며 완료하는 데 약간의 시간이 걸릴 수 있습니다.

3단계 - 방화벽 규칙 조정

GitLab을 구성하기 전에 방화벽 규칙이 웹 트래픽을 허용할 만큼 충분히 허용되는지 확인해야 합니다. 전제 조건에 링크된 가이드를 따랐다면 이미 ufw 방화벽이 활성화되어 있을 것입니다.

다음을 실행하여 활성 방화벽의 현재 상태를 확인합니다.

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

현재 규칙은 SSH 트래픽을 허용하지만 다른 서비스에 대한 액세스는 제한됩니다. GitLab은 웹 애플리케이션이므로 HTTP 액세스를 허용해야 합니다. Let's Encrypt에서 무료 TLS/SSL 인증서를 요청하고 활성화하는 GitLab의 기능을 활용하게 되므로 HTTPS 액세스도 허용하십시오.

HTTP 및 HTTPS에 대한 프로토콜 대 포트 매핑은 /etc/services 파일에서 사용할 수 있으므로 해당 트래픽을 이름별로 허용할 수 있습니다. OpenSSH 트래픽을 아직 활성화하지 않은 경우 해당 트래픽을 허용해야 합니다.

  1. sudo ufw allow http
  2. sudo ufw allow https
  3. sudo ufw allow OpenSSH

ufw status를 다시 확인하여 최소한 다음 두 서비스에 대한 액세스 권한을 부여했는지 확인할 수 있습니다.

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443/tcp ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443/tcp (v6) ALLOW Anywhere (v6)

이 출력은 이제 애플리케이션을 구성하면 GitLab 웹 인터페이스에 액세스할 수 있음을 나타냅니다.

4단계 — GitLab 구성 파일 편집

애플리케이션을 사용하기 전에 구성 파일을 업데이트하고 재구성 명령을 실행하십시오. 먼저 원하는 텍스트 편집기로 GitLab의 구성 파일을 엽니다. 이 예에서는 nano를 사용합니다.

  1. sudo nano /etc/gitlab/gitlab.rb

external_url 구성 줄을 검색합니다. 도메인과 일치하도록 업데이트하고 httphttps로 변경하여 사용자를 Let’s Encrypt 인증서로 보호되는 사이트로 자동 리디렉션합니다.

...
## 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 'https://your_domain'
...

다음으로 letsencrypt[contact_emails] 설정을 찾습니다. nano를 사용하는 경우 CTRL+W를 눌러 검색 프롬프트를 활성화할 수 있습니다. 프롬프트에 letsencrypt[contact_emails]를 입력하고 ENTER를 누르십시오. 이 설정은 도메인에 문제가 있는 경우 Let’s Encrypt 프로젝트가 연락하는 데 사용할 수 있는 이메일 주소 목록을 정의합니다. 발생할 수 있는 문제에 대해 스스로 알 수 있도록 주석을 제거하고 작성하는 것이 좋습니다.

letsencrypt['contact_emails'] = ['sammy@example.com']

변경을 마치면 파일을 저장하고 닫습니다. nano를 사용하는 경우 CTRL+X, Y, ENTER를 차례로 누르면 됩니다. .

다음 명령을 실행하여 GitLab을 재구성합니다.

  1. sudo gitlab-ctl reconfigure

이렇게 하면 서버에 대해 찾을 수 있는 정보를 사용하여 GitLab이 초기화됩니다. 이것은 완전히 자동화된 프로세스이므로 어떤 프롬프트에도 응답할 필요가 없습니다. 이 프로세스는 도메인에 대한 Let’s Encrypt 인증서도 구성합니다.

5단계 - 웹 인터페이스를 통해 초기 구성 수행

GitLab을 실행하면 웹 인터페이스를 통해 애플리케이션의 초기 구성을 수행할 수 있습니다.

처음으로 로그인

웹 브라우저에서 GitLab 서버의 도메인 이름을 방문하십시오.

https://your_domain

처음 방문하면 로그인 페이지가 표시됩니다.

GitLab은 초기 보안 암호를 생성합니다. 관리 sudo 사용자로 액세스할 수 있는 폴더에 저장됩니다.

  1. sudo nano /etc/gitlab/initial_root_password
# WARNING: This value is valid only in the following conditions
#          1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the firs$
#          2. Password hasn't been changed manually, either via UI or via command line.
#
#          If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

Password: YOUR_PASSWORD

# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.

로그인 페이지로 돌아가서 다음을 입력합니다.

  • 사용자 이름: root
  • 암호: [/etc/gitlab/initial_root_password에 나열된 암호]

이 값을 필드에 입력하고 로그인 버튼을 클릭합니다. 애플리케이션에 로그인하고 프로젝트 추가를 시작하라는 메시지를 표시하는 랜딩 페이지로 이동합니다.

이제 GitLab 인스턴스를 미세 조정할 수 있습니다.

비밀번호 업데이트

로그인 후 가장 먼저 해야 할 일 중 하나는 비밀번호를 변경하는 것입니다. 이렇게 변경하려면 탐색 표시줄의 오른쪽 상단 모서리에 있는 아이콘을 클릭하고 프로필 편집을 선택합니다.

그런 다음 사용자 설정 페이지로 들어갑니다. 왼쪽 탐색 모음에서 암호를 선택하여 GitLab에서 생성한 암호를 안전한 암호로 변경한 다음 업데이트가 완료되면 암호 저장 버튼을 클릭합니다.

비밀번호가 변경되었다는 알림과 함께 로그인 화면으로 돌아갑니다. GitLab 인스턴스에 다시 로그인하려면 새 비밀번호를 입력하십시오.

프로필 설정 조정

GitLab은 몇 가지 합리적인 기본값을 선택하지만 소프트웨어 사용을 시작하면 일반적으로 적절하지 않습니다.

필요한 수정을 하려면 탐색 표시줄의 오른쪽 상단 모서리에 있는 사용자 아이콘을 클릭하고 프로필 편집을 선택합니다.

"Administrator\ 및 "admin@example.com\의 이름과 이메일 주소를 더 정확하게 조정할 수 있습니다. 선택한 이름은 다른 사용자에게 표시되며 이메일은 기본 아바타 감지, 알림, 인터페이스를 통한 Git 작업 등에 사용됩니다.

업데이트가 완료되면 하단의 프로필 설정 업데이트 버튼을 클릭합니다. 변경 사항을 확인하기 위해 비밀번호를 입력하라는 메시지가 표시됩니다.

제공한 주소로 확인 이메일이 전송됩니다. GitLab에서 계정을 사용할 수 있도록 이메일의 지침에 따라 계정을 확인하세요.

계정 이름 변경

그런 다음 왼쪽 탐색 모음에서 계정을 선택합니다.

여기에서 이중 인증을 활성화하고 사용자 이름을 변경할 수 있습니다. 기본적으로 첫 번째 관리 계정에는 root라는 이름이 지정됩니다. 알려진 계정 이름이므로 다른 이름으로 변경하는 것이 더 안전합니다. 여전히 관리 권한이 있습니다. 변경되는 유일한 것은 이름입니다. root를 원하는 사용자 이름으로 바꾸십시오.

사용자 이름 업데이트 버튼을 클릭하여 변경합니다. 이후에 변경 사항을 확인하라는 메시지가 표시됩니다.

다음에 GitLab에 로그인할 때 새 사용자 이름을 사용해야 합니다.

계정에 SSH 키 추가

Git에서 SSH 키를 활성화하여 GitLab 프로젝트와 상호 작용할 수 있습니다. 이렇게 하려면 SSH 공개 키를 GitLab 계정에 추가해야 합니다.

왼쪽 탐색 모음에서 SSH 키를 선택합니다.

로컬 컴퓨터에 이미 생성된 SSH 키 쌍이 있는 경우 다음을 입력하여 공개 키를 볼 수 있습니다.

  1. cat ~/.ssh/id_rsa.pub
Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 sammy@mydesktop

이 텍스트를 복사하여 GitLab 인스턴스 내부의 키 텍스트 상자에 입력합니다.

대신 다른 메시지가 표시되면 시스템에 SSH 키 쌍이 아직 구성되지 않은 것입니다.

Output
cat: /home/sammy/.ssh/id_rsa.pub: No such file or directory

이 경우 다음 명령을 입력하여 SSH 키 쌍을 생성할 수 있습니다.

  1. ssh-keygen

기본값을 수락하고 선택적으로 암호를 제공하여 키를 로컬로 보호합니다.

Output
Generating public/private rsa key pair. Enter file in which to save the key (/home/sammy/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/sammy/.ssh/id_rsa. Your public key has been saved in /home/sammy/.ssh/id_rsa.pub. The key fingerprint is: SHA256:I8v5/M5xOicZRZq/XRcSBNxTQV2BZszjlWaIHi5chc0 sammy@gitlab.docsthat.work The key's randomart image is: +---[RSA 2048]----+ | ..%o==B| | *.E =.| | . ++= B | | ooo.o . | | . S .o . .| | . + .. . o| | + .o.o ..| | o .++o . | | oo=+ | +----[SHA256]-----+

이 키가 있으면 다음 명령을 입력하여 공개 키를 이전 예와 같이 표시할 수 있습니다.

  1. cat ~/.ssh/id_rsa.pub
Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 sammy@mydesktop

출력에 이 텍스트 블록을 삽입하고 GitLab 인스턴스 내부의 키 텍스트 상자에 입력합니다. 설명이 포함된 제목을 지정하고 키 추가 버튼을 클릭합니다.

이제 GitLab 계정 자격 증명을 제공하지 않고도 로컬 컴퓨터에서 GitLab 프로젝트 및 리포지토리를 관리할 수 있습니다.

6단계 - 공개 가입 제한 또는 비활성화

현재 설정에서는 GitLab 인스턴스의 랜딩 페이지를 방문할 때 누구나 계정에 가입할 수 있습니다. 공개 프로젝트를 호스팅하려는 경우 원하는 것일 수 있습니다. 그러나 많은 경우 더 제한적인 설정이 바람직합니다.

시작하려면 상단 탐색 모음에서 햄버거 메뉴를 클릭하여 관리 영역으로 이동하고 드롭다운에서 관리자를 선택합니다.

왼쪽 탐색 모음에서 설정을 선택합니다.

GitLab 인스턴스의 전역 설정으로 이동합니다. 여기에서 새 사용자의 가입 가능 여부와 액세스 수준에 영향을 미치는 다양한 설정을 조정할 수 있습니다.

가입 비활성화

가입을 완전히 비활성화하려면 가입 제한 섹션으로 스크롤하고 확장을 눌러 옵션을 봅니다.

그런 다음 가입 활성화 확인란의 선택을 취소합니다.

변경한 후에는 변경 사항 저장 버튼을 클릭해야 합니다.

이제 가입 섹션이 GitLab 랜딩 페이지에서 제거되었습니다.

도메인별 가입 제한

도메인과 연결된 이메일 주소를 제공하는 조직의 일부로 GitLab을 사용하는 경우 가입을 완전히 비활성화하는 대신 도메인별로 제한할 수 있습니다.

가입 제한 섹션에서 가입 시 확인 이메일 보내기 상자를 선택하면 사용자가 이메일을 확인한 후에만 로그인할 수 있습니다.

그런 다음 등록을 위해 허용된 도메인 상자에 도메인을 한 줄에 하나씩 추가합니다. 별표 "*”를 사용하여 와일드카드 도메인을 지정할 수 있습니다.

완료되면 변경 사항 저장 버튼을 클릭합니다.

이제 가입 섹션이 GitLab 랜딩 페이지에서 제거되었습니다.

프로젝트 생성 제한

기본적으로 새 사용자는 최대 10개의 프로젝트를 만들 수 있습니다. 외부의 새 사용자에게 가시성 및 참여를 허용하고 싶지만 새 프로젝트 생성에 대한 액세스를 제한하려면 계정 및 한도 설정 섹션에서 그렇게 할 수 있습니다.

내부에서 기본 프로젝트 제한을 0으로 변경하여 새 사용자가 프로젝트를 만들지 못하도록 완전히 비활성화할 수 있습니다.

새 사용자는 여전히 수동으로 프로젝트에 추가할 수 있으며 다른 사용자가 만든 내부 또는 공개 프로젝트에 액세스할 수 있습니다.

업데이트 후에는 변경 사항 저장 버튼을 클릭해야 합니다.

이제 새 사용자는 계정을 만들 수 있지만 프로젝트를 만들 수는 없습니다.

Let’s Encrypt 인증서 갱신

기본적으로 GitLab에는 external_url을 기반으로 정확한 분으로 4일마다 자정 이후에 Let’s Encrypt 인증서를 갱신하도록 설정된 예약된 작업이 있습니다. /etc/gitlab/gitlab.rb 파일에서 이러한 설정을 수정할 수 있습니다.

예를 들어 7일마다 12시 30분에 갱신하려면 그렇게 하도록 구성할 수 있습니다. 먼저 구성 파일로 이동합니다.

  1. sudo nano /etc/gitlab/gitlab.rb

그런 다음 파일에서 다음 줄을 찾아 #를 제거하고 다음과 같이 업데이트합니다.

...
################################################################################
# Let's Encrypt integration
################################################################################
# letsencrypt['enable'] = nil
letsencrypt['contact_emails'] = ['sammy@digitalocean'] # This should be an array of email addresses to add as contacts
# letsencrypt['group'] = 'root'
# letsencrypt['key_size'] = 2048
# letsencrypt['owner'] = 'root'
# letsencrypt['wwwroot'] = '/var/opt/gitlab/nginx/www'
# See http://docs.gitlab.com/omnibus/settings/ssl.html#automatic-renewal for more on these settings
letsencrypt['auto_renew'] = true
letsencrypt['auto_renew_hour'] = "12"
letsencrypt['auto_renew_minute'] = "30"
letsencrypt['auto_renew_day_of_month'] = "*/7"
...

letsencrypt[auto_renew]false로 설정하여 자동 갱신을 비활성화할 수도 있습니다.

...
letsencrypt['auto_renew'] = false
...

자동 갱신을 사용하면 서비스 중단에 대해 걱정할 필요가 없습니다.

결론

이제 자체 서버에서 호스팅되는 작동하는 GitLab 인스턴스가 있습니다. 새 프로젝트 가져오기 또는 만들기를 시작하고 팀에 대한 적절한 액세스 수준을 구성할 수 있습니다. GitLab은 정기적으로 기능을 추가하고 플랫폼을 업데이트하므로 프로젝트 홈페이지를 확인하여 개선 사항이나 중요한 알림에 대한 최신 정보를 확인하세요.