본문 바로가기
Git-DevOps

NCP Server를 이용한 GitLab 서버 구축

by 간식주인 2022. 8. 25.

개발자분들이 소스코드를 관리하기 위해 Git Hub를 많이 사용하지만, 간혹 금융존 혹은 공공존 보안 요건으로 애플리케이션 코드를 외부 Repository에 보관하면 안되는 경우가 있었습니다.

이러한 보안 요건을 충족하기 위해 사설 GitLab서버를 구축하여 NCP 서버 내부에서만(혹은 VPN을 통해서만) 접근할 수 있도록 구성할 수 있습니다.

 

요건

 - 소스코드 관리를 위해 Git Hub 대신 GitLab 서버를 구축하여 사용

 - 필요 시 공인 아이피 없이 내부 아이피를 통해 사설망에서만 사용할 수 있음(보안 요건)

 - 이번 테스트에는 Global DNS 서비스를  사용하기 위해 공인 아이피를 사용합니다.

 

환경

  • NCP Server(ubuntu 20.04 , 2cpu 8GB RAM) + 1 Public IP
  • NCP Global DNS

Process

  1. NCP 서버 생성
  2. NCP Global DNS를 통한 도메인 호스트 등록
  3. NCP 서버를 이용한 GitLab 서버 구축
  4. GitLab 계정 생성 및 Repository(Project) 생성
  5. Git Push를 이용한 소스코드 업로드

주의 사항

- GitLab 서버 구축 시 메모리를 4GB로 주게되면 간혹가다 멈추는 경우가 있었습니다. Cloud Insight로 확인한 결과 GitLab이 서버의 리소스를 많이 사용하므로 여유롭게 8GB로 서버 스펙을 조정하도록 합니다.

 

==================================================================================

1. NCP 서버 생성

NCP Console에서 수동으로 VPC, Subnet, Server, ACG를 생성하거나 Terraform을 이용하여 서버를 생성합니다.

2022.08.05 - [Terraform] - Terraform을 이용하여 NCP 서버 배포

 

Terraform을 이용하여 NCP 서버 배포

엔지니어라면 특정 CSP의 서버를 통해 여러가지 테스트를 진행하는 경우가 있습니다. 오늘은 NCP에서 공인아이피가 부착된 Ubuntu 20.04 서버를 빠르게 생성하는 테라폼 코드에 대해 다뤄보도록 하

enginnersnack.tistory.com

 

Terraform을 이용해 간단하게 서버를 생성할 수 있습니다.

 

2. NCP Global DNS를 통한 도메인 호스트 등록

NCP Server가 준비되었다면, 해당 서버의 공인 아이피에 Global DNS 서비스를 이용하여 호스트를 매핑합니다.

해당 과정을 진행하는 이유는 추후 GitLab 서버 접근 시 공인 아이피가 아닌 도메인으로 접근하기 위함입니다.

2022.08.25 - [NCP] - NCP Global DNS를 이용하여 구입한 도메인 등록

 

NCP Global DNS를 이용하여 구입한 도메인 등록

요건  - 개인적으로 구매한 도메인을 NCP Global DNS 서비스에 연결 환경 도메인 호스팅 사이트에서 구입한 도메인 1개(가비아, 후이즈등) NCP Global DNS Process 도메인 호스팅 사이트에서 개인 도메인

enginnersnack.tistory.com

도메인 질의 시 정상적으로 서버의 공인 아이피 정보가 확인되어야 합니다.

 

3. NCP 서버를 이용한 GitLab 서버 구축

서버에 접속하여 필요한 패키지를 다운로드 받습니다.(편의상 root 계정으로 진행합니다.)

NCP Ubuntu 20.04에서는 필요한 패키지들이 전부 설치되어 있는 상태였습니다.

apt-get update -y

apt-get install -y ca-certificates curl openssh-server

 

GitLab의 경우 Community Edition을 사용할 예정입니다.

(더욱 다양한 기능을 지원하는 Enterprise Edition을 사용해도 되며, Core 라이센스를 이용한다면 Community Edition과 동일하게 무료로 사용할 수 있습니다. 또한 추후 라이센스 업그레이드가 가능합니다.)

 

*GitLab CE를 설치하기 위해 레파지토리를 추가합니다. 

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh |sudo bash

 

*GitLab 설치를 진행합니다.

GitLab의 경우 아이피가 아닌 도메인으로 접근할 예정이므로 EXTERNAL_URL을 지정하여 설치를 진행합니다.

gitlab 설치 시 어느정도 소요시간이 있습니다.

EXTERNAL_URL="git.kbotest.shop" apt-get -y install gitlab-ce

 

만약, EXTERNAL_URL을 지정하지 않고 설치를 진행한다면 vi /etc/gitlab/gitlab.rb 명령어를 통해 external_url 부분을 변경하면 됩니다.(변경 이후 gitlab-ctl reconfigure 명령어를 통해 적용 필요)

 

설치가 완료되면 로고와 함께 접속할 수 있는 도메인 정보를 확인할 수 있습니다.

 

http://git.kbotest.shop 도메인으로 접속하기 전에, 서버의 ACG를 확인하여 80 포트가 열려있는지 확인 후 접속을 진행합니다.(만약, external_url 설정 시 다른 포트를 지정하였다면 해당 포트로 ACG를 설정하면 됩니다.)

 

서버의 도메인으로 접속하여 GitLab 홈페이지를 확인합니다.

GitLab 홈페이지 모습

 

로그인을 진행해야되는데 계정 정보가 없다면 아래와 같이 진행합니다.

 

gitlab-rails console -e production
user = User.where(id:1).first
user.password='비밀번호'
user.password_confirmation=비밀번호'
user.save

 

root/변경한비밀번호 를 입력하여 홈페이지 내부로 접속합니다. 

 

 

4. GitLab 계정 생성 및 Repository(Project) 생성

GitLab Repository를 root 계정으로 생성하지 않고 별도로 사용할 계정을 만들어서 진행합니다.

 

GitLab 홈페이지 상단의 Menu > Admin 페이지로 이동합니다.

 

Admin Area 에서 User > New User를 클릭합니다.

 

가입할 계정정보를 입력합니다.

이 때, Username과 Email이 실제 로그인 시 사용할 계정 정보입니다.(Name은 NickName정도로 생각하시면 됩니다.)

 

User를 생성하였으면 바로 Edit을 누른 후 비밀번호를 설정합니다.

 

새 창을 열고 생성한 계정으로 로그인 합니다.(비밀번호를 변경 창이 나오면 변경합니다.)

 

정상적으로 로그인을 완료했다면 Project(Repository)를 생성합니다.

저는 spring-app, manifest란 이름의 Project를 생성하도록 하겠습니다.

 

Create Project > Create Blank Project 

Project Name을 입력하고 Create Project를 클릭합니다.

같은 방식으로 manifest Project도 생성합니다.

 

총 2개의 Project(spring-app,manifest)가 생성된 것을 확인할 수 있습니다.

 

 

5. Git Push를 이용한 소스코드 업로드

Local pc에 git이 설치되어있다고 가정합니다.(설치방법은 아래 링크를 참조합니다.)

https://git-scm.com/downloads

 

Git - Downloads

Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific exp

git-scm.com

 

먼저 로컬에서 GitLab저장소로 연결할 때 별도의 비밀번호를 입력하지 않고 ssh를 통해서 바로 연결하기 위해 ssh-keygen 명령어를 통해 public key와 private key를 발급 받습니다.(아래 링크 참조)

https://git-scm.com/book/ko/v2/Git-%EC%84%9C%EB%B2%84-SSH-%EA%B3%B5%EA%B0%9C%ED%82%A4-%EB%A7%8C%EB%93%A4%EA%B8%B0

 

Git - SSH 공개키 만들기

많은 Git 서버들은 SSH 공개키로 인증한다. 공개키를 사용하려면 일단 공개키를 만들어야 한다. 공개키를 만드는 방법은 모든 운영체제가 비슷하다. 먼저 키가 있는지부터 확인하자. 사용자의 SSH

git-scm.com

 

키를 발급 받은 이후 프로필 > edit profile을 클릭하여 SSH Key로 이동합니다.

 

로컬에서 cat ~/.ssh/id_rsa.pub 명령어를 통해 public key 정보를 조회한 후 입력하여 등록합니다.

 

이후 코드가 있는 폴더로 이동한 뒤 user.name과 user.email 설정을 진행합니다.

git config --global user.name "user"
git config --global user.email "user@gmail.com"

 

이후 git 초기화를 진행하고 원격 저장소를 연결합니다.

원격 저장소의 경우 GitLab Repository에서 확인할 수 있습니다.

git init
git remote add origin git@git.kbotest.shop:kbo/spring-app.git

 

로컬에서 사용할 branch를 설정하고 spring-app Repo에 있는 정보를 가져옵니다.

(해당 작업을 진행하지 않을 경우 로컬에서 git push가 실패할 수 있습니다.)

git branch -m main
git pull origin main

 

임의로 파일을 생성 한 후 아래 명령어를 통해 파일을 GitLab Repository로 업로드 합니다.

touch code1
git add .
git commit -m "create code file"
git push origin main

 

GitLab의 spring-app Repository를 확인하여 git push를 통해 업로드한 파일을 확인합니다.