웹사이트 검색

Ubuntu 18.04 LTS에서 Docker를 사용하여 Gitlab 서버를 설치하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • Ubuntu 20.04(Focal Fossa)
  • Ubuntu 18.04(Bionic Beaver)

이 페이지에서

  1. 전제 조건
  2. 1단계 - 종속성 설치
  3. 2단계 - 시스템 SSH 포트 변경
  4. 3단계 - 방화벽 구성\n
  5. 4단계 - Docker 설치
  6. 5단계 - Docker Compose 설치
  7. 6단계 - Gitlab 설치
  8. 7단계 - Gitlab 실행\n
  9. 8단계 - Gitlab 구성
    1. SMTP 구성
    2. Gitlab 프로필 구성\n
    3. 사용자 이름 변경
    4. 공개 가입 제한\n
    5. SSH 키 추가

    Gitlab CE 또는 Community Edition은 Git 리포지토리를 호스팅하는 데 사용되는 오픈 소스 애플리케이션입니다. Git 리포지토리를 자체 호스팅하면 데이터를 완벽하게 제어하는 동시에 귀하와 귀하의 팀 구성원에게 사용하기 쉬운 인터페이스를 제공할 수 있습니다.

    이 가이드에서는 Gitlabs 무료 제품인 Community Edition을 사용하여 Git 리포지토리를 설치하는 방법을 설명합니다. 병합 승인, 로드맵, 포트폴리오 관리, 재해 복구, 컨테이너 스캔 등과 같은 고급 기능을 원하는 경우 Enterprise Edition으로 업그레이드하도록 선택할 수 있습니다.

    전제 조건

    • 루트가 아닌 sudo 사용자가 있는 Ubuntu 18.04 기반 서버.
    • 100명의 사용자를 지원할 Gitlab CE의 지정된 하드웨어 요구 사항에 따라 최소 2개의 CPU 코어와 8GB RAM이 있는 VPS가 필요합니다. RAM을 스왑 공간으로 대체할 수 있지만 응용 프로그램 실행 속도가 느려지므로 권장하지 않습니다.\n

    1단계 - 종속성 설치

    Gitlab을 설치하기 전에 서버에 Gitlab이 제대로 실행되는 데 필요한 특정 소프트웨어가 있는지 확인해야 합니다. 다음 명령을 실행하여 종속성을 설치합니다.

    $ sudo apt update
    $ sudo apt install ca-certificates curl openssh-server ufw apt-transport-https -y
    

    위의 소프트웨어 중 일부는 사전 설치되어 있을 수 있습니다.

    2단계 - 시스템 SSH 포트 변경

    Gitlab은 SSH를 통해 리포지토리를 푸시하기 위해 포트 22를 사용합니다. 서버 SSH도 실행 중이므로 충돌이 발생합니다. 두 가지 방법이 있습니다. 시스템에 연결하는 데 사용하는 SSH 포트를 변경하거나 Gitlab이 SSH에 사용할 포트를 변경할 수 있습니다. 이 자습서에서는 서버 자체의 SSH 포트를 변경합니다.

    이렇게 하려면 /etc/ssh/sshd_config 파일을 편집해야 합니다. 나노 텍스트 편집기에서 파일을 엽니다.

    $ sudo nano /etc/ssh/sshd_config
    

    다음 줄을 찾아 22를 6622로 변경하고 앞의 #을 제거합니다. 원하는 포트를 선택할 수 있습니다.

    # Port 22
    

    Ctrl + X를 눌러 파일을 닫고 Y를 눌러 변경 사항을 저장합니다.

    SSH 서비스를 다시 시작합니다.

    $ sudo systemctl restart sshd
    

    현재 SSH 세션을 닫고 포트 6622로 새 세션을 만들고 서버에 다시 연결하십시오.

    $ ssh  -p 6622
    

    3단계 - 방화벽 구성

    이전 단계에서 ufw(복잡하지 않은 방화벽)를 설치했습니다. Gitlab 설치를 진행하기 전에 구성해야 합니다.

    잠기지 않도록 방금 생성한 SSH와 포트를 활성화합니다.

    $ sudo ufw allow OpenSSH
    $ sudo ufw allow 6622
    

    ufw 방화벽을 활성화합니다.

    $ sudo ufw enable
    

    또한 Gitlab이 작동하려면 http 및 https를 활성화해야 합니다.

    $ sudo ufw allow http
    $ sudo ufw allow https
    

    방화벽의 상태를 확인하십시오.

    $ sudo ufw status
    

    다음과 같은 출력이 표시되어야 합니다.

    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere                  
    6622                       ALLOW       Anywhere                  
    80/tcp                     ALLOW       Anywhere                  
    443/tcp                    ALLOW       Anywhere                  
    OpenSSH (v6)               ALLOW       Anywhere (v6)             
    6622 (v6)                  ALLOW       Anywhere (v6)      
    80/tcp (v6)                ALLOW       Anywhere (v6)             
    443/tcp (v6)               ALLOW       Anywhere (v6)             
    

    4단계 - 도커 설치

    시스템에 Dockers GPG 키를 추가합니다.

    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    

    다운로드한 키의 지문을 확인합니다.

    $ sudo apt-key fingerprint 0EBFCD88
    

    다음과 같은 출력이 표시되어야 합니다.

    pub   rsa4096 2017-02-22 [SCEA]
          9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
    uid           [ unknown] Docker Release (CE deb) <>
    sub   rsa4096 2017-02-22 [S]
    

    도커 저장소를 추가합니다.

    $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    

    패키지 데이터베이스를 업데이트하십시오.

    $ sudo apt update
    

    Docker-CE를 설치합니다. CE는 Docker의 Community Edition입니다.

    $ sudo apt install docker-ce -y
    

    지금 Docker를 설치해야 합니다. 실행 중인지 확인합니다.

    $ sudo systemctl status docker
    

    출력은 다음과 유사해야 합니다.

    ? docker.service - Docker Application Container Engine
       Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
       Active: active (running) since Thu 2019-10-11 21:10:31 UTC; 32s ago
         Docs: https://docs.docker.com
     Main PID: 19128 (dockerd)
        Tasks: 12
       CGroup: /system.slice/docker.service
               ??19128 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    

    종료하려면 q를 누르십시오.

    sudo 없이 docker를 실행할 수 있도록 제한된 Linux 사용자 계정을 docker 그룹에 추가합니다.

    sudo usermod -aG docker $USER
    

    $USER 변수는 현재 로그인한 사용자를 선택하여 도커 그룹에 추가합니다. 현재 해당 사용자로 로그인하지 않은 경우 $USER를 실제 사용자 이름으로 바꾸십시오.

    방금 추가한 사용자로 전환합니다. 이미 로그인한 경우에도 권한을 다시 로드하려면 다시 전환해야 합니다.

    $ su - ${USER}
    

    내장 "Hello World" 프로그램을 실행하여 모든 것이 제대로 실행되고 있는지 확인하십시오.

    $ docker run hello-world
    

    Docker가 설치되어 있고 제대로 작동하고 있음을 알려주는 다음 출력이 표시되어야 합니다.

    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    1b930d010525: Pull complete 
    Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    

    5단계 - Docker Compose 설치

    이 단계를 건너뛰고 진행할 수 있지만 Docker Compose를 설치하면 특히 둘 이상의 서버에서 수행하려는 경우 Gitlab을 훨씬 쉽게 실행할 수 있습니다.

    $ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    

    이 자습서를 작성할 당시에는 1.24.1이 Docker Compose의 현재 안정적인 릴리스입니다. Github 페이지에서 최신 릴리스 버전을 확인할 수 있습니다.

    docker compose 바이너리에 실행 권한을 적용합니다.

    $ sudo chmod +x /usr/local/bin/docker-compose
    

    Docker Compose에 명령 완성을 추가합니다.

    $ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
    

    설치가 성공했는지 확인하십시오.

    $ docker-compose --version
    

    다음 출력을 인쇄합니다.

    docker-compose version 1.24.1, build 4667896b
    

    6단계 - Gitlab 설치

    Dockerhub에서 Gitlabs Docker 이미지를 다운로드합니다. 이 이미지에는 nginx, PostgreSQL, Redis 등 Docker를 실행하는 데 필요한 모든 것이 포함되어 있습니다. 다음 명령을 실행하여 이미지를 다운로드합니다.

    $ docker pull gitlab/gitlab-ee:latest
    

    이 튜토리얼은 Community Edition 설치에 관한 것이지만 Gitlab의 Enterprise Edition 이미지를 가져옵니다. 라이선스를 입력하여 업그레이드하지 않는 한 Enterprise 버전은 Community Edition과 정확히 동일하게 작동하기 때문입니다. Community Edition 설치를 Enterprise Edition으로 업그레이드하면 더 복잡해집니다.

    전체 이미지를 다운로드하는 데 약간의 시간이 걸립니다. 작업이 완료되면 다음 명령을 실행하여 현재 시스템에 있는 모든 이미지를 확인할 수 있습니다.

    $ docker images
    

    출력은 다음과 유사해야 합니다.

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    gitlab/gitlab-ee    latest              4bacb2356d28        4 days ago          1.87GB
    hello-world         latest              fce289e99eb9        9 months ago        1.84kB
    

    7단계 - Gitlab 실행

    이 시점에서 단일 명령으로 모든 옵션을 제공하여 Gitlab 컨테이너를 바로 실행할 수 있지만 이는 컨테이너를 실행해야 할 때마다 이러한 변수를 제공해야 함을 의미합니다. Docker Compose를 사용하면 구성을 .yml 파일에 저장한 다음 컨테이너를 실행하고 시작하는 데 사용할 수 있으므로 이 프로세스가 더 쉬워집니다.

    docker-compose.yml을 만듭니다.

    $ nano docker-compose.yml
    

    다음 코드를 붙여넣습니다.

    web:
      image: 'gitlab/gitlab-ee:latest'
      container_name: 'gitlab-howtoforge-tutorial'
      restart: always
      hostname: 'gitlab.example.com'
      environment:
        GITLAB_OMNIBUS_CONFIG: |
          external_url 'https://gitlab.example.com'
          gitlab_rails['smtp_enable'] = true
    	  gitlab_rails['smtp_address'] = "smtp.gmail.com"
          gitlab_rails['smtp_port'] = 587
          gitlab_rails['smtp_user_name'] = ""
          gitlab_rails['smtp_password'] = "app-password"
          gitlab_rails['smtp_domain'] = "smtp.gmail.com"
          gitlab_rails['smtp_authentication'] = "login"
          gitlab_rails['smtp_enable_starttls_auto'] = true
          gitlab_rails['smtp_tls'] = false
          gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
          # Add any other gitlab.rb configuration here, each on its own line
      ports:
        - '80:80'
        - '443:443'
        - '22:22'
        - '587:587'
      volumes:
        - '/srv/gitlab/config:/etc/gitlab'
        - '/srv/gitlab/logs:/var/log/gitlab'
        - '/srv/gitlab/data:/var/opt/gitlab'
    

    위의 각 옵션이 의미하는 바를 살펴보겠습니다.

    • 이미지는 Dockerhub에서 Gitlab의 Docker 이미지 위치를 나타냅니다.
    • container_name을 사용하면 Docker 네트워크 내에서 컨테이너를 참조할 때 사용할 수 있도록 Docker 컨테이너에 레이블을 적용할 수 있습니다.\n
    • hostname은 컨테이너 내부 호스트 이름 또는 이 경우 Gitlab이 설치될 URL을 정의합니다.\n
    • restart는 컨테이너에 대한 재시작 정책을 지정합니다. 컨테이너가 종료되면 자동으로 다시 시작된다는 것을 의미하는 항상으로 설정했습니다.\n
    • 환경은 Gitlab 구성 설정을 입력할 수 있는 GITLAB_OMNIBUS_CONFIG 변수를 제공합니다. 이 경우 Gitlab이 사용할 외부 URL을 제공했습니다.\n
    • 볼륨은 영구 데이터를 저장하기 위해 서버에 마운트된 디렉토리를 정의합니다. 세 개의 볼륨/디렉토리는 애플리케이션 데이터, 로그 파일 및 구성 파일을 저장합니다. 세미콜론 왼쪽의 값은 서버의 로컬 디렉터리이고 오른쪽의 값은 컨테이너 내부의 디렉터리입니다.
    • publish는 호스트에 포트 또는 포트 범위를 게시하도록 컨테이너에 지시합니다. Gitlab에는 포트 22(SSH), 80(HTTP), 443(HTTPS) 및 587(SMPT - MSA)이 필요하므로 여기에 지정했습니다. Gitlab이 서버에서 비표준 포트를 사용하도록 하려면(아마도 사용할 수 없기 때문에) 먼저 호스트 포트를 제공한 다음 컨테이너 포트를 제공합니다. 예를 들어 서버가 이미 SSH(22) 포트를 사용하고 있으므로 Gitlab에 다른 포트(예: 3333)를 통해 SSH를 사용하도록 지시할 수 있습니다. 그런 다음 위 파일의 22:22를 3333:22로 변경합니다. 또한 위의 GITLAB_OMNIBUS_CONFIG 아래에 gitlab_rails[gitlab_shell_ssh_port] = 3333 줄을 추가해야 합니다.\n
    • external_url은 Gitlab이 설치될 도메인을 나타냅니다. Lets Encrypt SSL 인증서를 자동으로 설치하는 https를 선택했습니다.\n
    • Gmail을 사용하여 메일을 보내도록 Gitlab을 구성하는 추가 구성도 추가했습니다. 타사 SMTP 메일 서비스를 사용할 수 있습니다. Gitlab 문서에는 다양한 SMTP 서비스를 구성하는 방법에 대한 자세한 가이드가 있습니다.\n

    docker-compose.yml과 동일한 디렉토리에 있는지 확인하십시오. 다음 명령을 실행하여 Gitlab을 시작합니다.

    $ docker-compose up -d
    

    다음과 같은 내용이 표시됩니다.

    Creating gitlab-howtoforge-tutorial ... done
    

    브라우저를 통해 Gitlab에 액세스하려면 몇 분이 더 걸립니다. 다음 명령을 통해 시작 프로세스에 대한 자세한 내용을 확인할 수 있습니다.

    $ docker logs -f gitlab-howtoforge-tutorial
    

    로그 모니터링 프로세스를 종료하려면 Ctrl + C를 누릅니다.

    브라우저에서 Gitlab 사이트를 로드합니다. 컨테이너를 시작한 후 너무 빨리 로드하려고 하면 502 오류가 발생합니다. 이 경우 몇 분 더 기다린 후 다시 시도하십시오.

    모든 것이 정상이면 브라우저에 다음 페이지가 표시됩니다.

    8단계 - Gitlab 구성

    Gitlabs 관리자 암호에 대한 암호를 제공합니다. 다음 로그인 화면으로 이동합니다. 방금 로그인하기 위해 선택한 사용자 이름과 비밀번호로 root를 사용하십시오.

    SMTP 구성

    작업을 시작하기 전에 SMTP 설정을 활성화해야 합니다.

    Gitlab 프로필 구성

    오른쪽 상단 모서리에 있는 사용자 아이콘을 클릭하여 드롭다운 메뉴를 불러오고 설정을 선택합니다.

    프로필 설정 페이지로 이동합니다. 여기에 귀하의 이름과 이메일을 추가하십시오. 업데이트하려면 이메일 주소를 확인해야 합니다. 원하는 경우 여기에 자신에 대한 더 많은 정보를 추가할 수도 있습니다.

    완료되면 프로필 설정 업데이트를 클릭합니다.

    사용자 이름 변경

    다음으로 사용자 이름을 root에서 다른 이름으로 변경해야 합니다. root는 매우 일반적으로 추측할 수 있는 사용자 이름이기 때문입니다. 왼쪽 사이드바에서 계정을 클릭합니다.

    유지하려는 사용자 이름으로 사용자를 변경합니다. 완료하려면 사용자 이름 업데이트를 클릭하십시오. 또한 보안 강화를 위해 여기에서 2단계 인증을 활성화해야 합니다.

    공개 가입 제한

    기본적으로 Gitlab 설치를 통해 누구나 가입할 수 있습니다. 원하지 않으면 비활성화해야 합니다. 관리 영역에 액세스하려면 상단 표시줄에서 렌치 모양의 아이콘을 클릭하십시오.

    설정을 조정하려면 왼쪽 사이드바에서 설정을 클릭합니다.

    여기에서 가입 제한까지 아래로 스크롤하고 확장 버튼을 클릭합니다. 가입 가능 확인란의 선택을 취소하고 완료되면 변경 사항 저장을 클릭합니다.

    여전히 관리 인터페이스를 통해 새 사용자를 추가할 수 있습니다.

    SSH 키 추가

    마지막 단계는 SSH 키를 추가하는 것입니다. SSH 키가 있는 경우 다음 명령을 건너뛸 수 있습니다. 없는 경우 다음 명령을 사용하여 만들 수 있습니다.

    $ ssh-keygen
    

    이 명령은 Windows의 Mac OS, Linux 및 Git Bash/WSL에 공통입니다. 기본값을 수락하고 암호 필드를 비워 둡니다.

    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/gitlab
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in gitlab.
    Your public key has been saved in gitlab.pub.
    The key fingerprint is:
    SHA256:6dNGAPyd8JAkHAikYOW2PsFjGlzBBpwy4XQ9RQgVwK8 
    The key's randomart image is:
    +---[RSA 2048]----+
    |+*OB=*O=..       |
    |B+o+o+oo+        |
    |oo.+. ...= .     |
    |. + ..  .o+      |
    | o *.   S .      |
    |  =Eo  . o       |
    | . o    o o      |
    |    .    o       |
    |                 |
    +----[SHA256]-----+
    

    다음 명령을 통해 공개 키를 표시할 수 있습니다.

    $ cat ~/.ssh/gitlab.pub
    
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUf64YH7uJimFWVJSy/mgYiLRqBxVB6JJMTxZZ96DwExoINhWVRhQAgMgExBWGpUCpWXhLcNuIM+EfFRtCq+YYyLC+GlHsNdnLgecGgop72p8BEi8UckgCiCSuMrWCMAOFh5NKs2YHpF7bOUjXQRVvGujLuV1UBof7SXQ/za7e3aybNiH3KpA6oWSSmpqnOt8rZT54IjLnVFUSLx7ZxWDVW1bO29mI8NjWwzZGLAtNIkJQEOqVo8nhVkroFHvBTrZnUsmr5oFOWG++LPqED9EUSPTpO8PNnogYT3xsVncBMMAEt0pPE7ATmstQc161SEtqAUa98Qb0RRKqCKcKStOp 
    

    프로필 설정 영역으로 돌아가 사이드바에서 SSH 키에 액세스합니다.

    제공된 상자에 SSH 키를 붙여넣고 계속하려면 키 추가를 클릭하십시오.

    이제 Gitlab 자격 증명을 제공하지 않고도 리포지토리를 생성하고 커밋할 수 있습니다.

    9단계 - 첫 번째 프로젝트 만들기

    Gitlab의 각 저장소는 프로젝트에 속합니다. 프로젝트에는 리포지토리, 문제 추적기, 병합 요청, wiki, 지속적 통합 및 지속적 배포(CI/CD) 파이프라인 및 기타 많은 기능이 포함됩니다.

    첫 번째 리포지토리를 생성하려면 프로젝트 생성을 클릭합니다.

    새 프로젝트 페이지로 이동합니다. 프로젝트 이름을 입력합니다. 프로젝트 슬러그를 다른 것으로 변경할 수 있습니다. 원하는 경우 프로젝트에 대한 설명을 입력하고 원하는 대로 프로젝트의 가시성을 변경합니다. README 파일로 리포지토리를 초기화할 수 있습니다. 완료되면 프로젝트 만들기를 클릭합니다.

    빈 README.md 파일 하나만 있는 저장소 페이지로 이동합니다.

    이제 리포지토리가 활성화되었으므로 명령줄에서 변경 로그를 추가해 보겠습니다.

    컴퓨터에서 다음 명령을 입력하여 CHANGELOG 파일을 만들고 리포지토리로 다시 푸시합니다. 컴퓨터에 Git이 설치되어 있는지 확인하십시오.

    저장소를 복제합니다. SSH 또는 HTTPS를 사용하여 복제할 수 있습니다.

    SSH를 사용하여 복제합니다.

    $ git clone :user/howtoforge-test.git
    

    또는 HTTPS를 사용하여 복제합니다.

    $ git clone https://gitlab.example.com/user/howtoforge-test.git
    

    나머지 명령을 입력하여 CHANGELOG를 만들고 푸시합니다.

    $ cd howtoforge-test
    $ touch CHANGELOG  # Or create the file in your editor and enter a project description
    $ git add CHANGELOG
    $ git commit -m "add Changelog"
    $ git push -u origin master
    

    10단계 - Gitlab 컨테이너 관리

    실행 중인 모든 컨테이너를 보려면 다음 명령을 실행합니다.

    $ docker-ps
    

    Gitlab 컨테이너를 중지하려면 다음 명령을 실행합니다.

    $ docker stop gitlab-howtoforge-tutorial
    

    컨테이너를 다시 시작하려면 다음 명령을 사용하십시오.

    $ docker start gitlab-howtoforge-tutorial
    

    컨테이너를 제거하려는 경우 다음 명령을 사용하여 제거할 수 있습니다.

    $ docker container rm gitlab-howtoforge-tutorial
    

    11단계 - Gitlab 업그레이드

    Gitlab을 최신 버전으로 업그레이드하려면 기존 컨테이너를 중지 및 제거하고 최신 이미지를 가져온 다음 컨테이너를 다시 만들어야 합니다.

    $ docker stop gitlab-howtoforge-tutorial
    $ docker rm gitlab-howtoforge-tutorial
    $ docker pull gitlab/gitlab-ee:latest
    $ docker-compose up -d
    

    그리고 요청하기 전에 컨테이너를 제거하더라도 데이터는 안전합니다.

    이것으로 Docker를 사용하여 Ubuntu 18.04 서버에서 Gitlab을 설정하는 방법에 대한 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.