altair의 프로젝트 일기

라즈베리파이 Raspbian 64bit에 GitLab 설치하기 본문

IT/라즈베리파이

라즈베리파이 Raspbian 64bit에 GitLab 설치하기

altair823 2023. 1. 26. 11:30

개요

 이번 글에서는 라즈베리파이에 GitLab을 설치하는 방법을 소개한다. GitLab은 공식적으로 32비트 라즈비안에서만 설치가 가능하다. 이 깃랩을 64비트 라즈비안에 설치하는 것까지 다룰 것이다. 

 

깃허브

 새로운 프로젝트를 할 때마다 원격 리포지토리로 깃허브를 사용하는 편이다. 워낙 많은 사람들이 쓰고 있기 때문에 퍼블릭으로 공개하면 사람들이 이슈를 올려주거나 기여를 해주는 경우도 있다. 그렇지만 무엇보다도 깃을 처음 배울 때부터 쓰던 익숙함에 깃허브를 계속 사용한다. 

 깃허브 Copilot가 세상에 나온지 꽤 시간이 지났다. 나는 대학생 혜택으로 사용하고 있는데, 코딩하는 시간과 노력을 많이 줄여주는 건 고맙지만 마음 한 구석에서는 찜찜한게 사실이다. 모든 퍼블릭 리포지토리가 Copilot의 학습 대상인 점, 즉 깃허브와 마이크로소프트가 언제든 내 코드를 상업적인 용도로 인공지능을 위해 사용할 수 있다는 점이 썩 내키진 않는다. 

 데이터가 자산이 된 시대에 내 민감한 데이터를 적절한 수준으로 보호하는 것도 굉장히 중요해졌다. 그래서 이번에는 그런 데이터를 저장할 리포지토리를 만들어보고 싶었다. 바로 내 눈 앞에서 항상 돌아가는 라즈베리파이에 말이다. 

 

대안은?

 처음에는 SVN을 써볼까도 생각해봤다. 그렇지만 아무래도 깃이 아주 큰 부분을 점유하고 있고 나도 깃이 더 익숙하기 때문에 깃 기반 서비스로 결정했다. SVN은 다음 기회에 써볼 생각이다. 

 가장 중요하게 생각했던 점은 내 서버에 설치할 수 있는지 여부다. SSH를 사용하면 깃과 리눅스만으로도 원격 리포지토리 서버를 구동할 수 있다. 사실 테스트 단계에서는 모두 직접 해본 작업들이다. 깃 공식 문서에서 자세한 정보를 얻을 수 있다. 

 간단하게 설명하자면, 리포지토리 서버는 로컬, Git, ssh, http 와 같은 네 개의 프로토콜로 통신할 수 있다. '원격' 저장소이니 로컬은 제외하고, 인증 단계가 존재하지 않는 Git 데몬도 제외한다. 남은건 ssh와 http인데 개인적으론 http를 사용하고 싶었다. 웹 서버를 사용해 깃 허브처럼 웹 페이지로 관리하면 더 좋고. 

 그러다 알게 된 것이 바로 GitLab이다. 기본적으론 깃허브와 다를 바 없는 서비스지만 깃랩은 설치형 깃랩을 제공한다. 즉, 내 서버에 직접 설치할 수 있다는 것이다. 게다가 사용자 인증과 웹 관리 페이지도 제공한다. 내가 외부에서도 접속해 웹 페이지로 내용을 확인할 수 있다. 무엇보다 평소에 쓰던 깃허브와 굉장히 비슷한 인터페이스를 갖고 있었다. 

 

깃랩

 깃랩은 여러 운영체제에 설치할 수 있도록 가이드를 제공한다. 우분투와 데비안, AWS와 아치 리눅스를 비롯해 쿠버네티스, 심지어 도커 이미지까지 제공한다. 그리고 라즈베리파이 OS 이미지를 지원하는데 오직 32비트 운영체제만 지원한다. 한 서버에서 코드 컴파일과 빌드, 개인용 사설 VPN, 여러 임베디드 프로젝트들을 모두 감당해야 하는데 32비트 운영체제를 쓰기에는 영 찜찜한 구석이 있다. 

 

64비트 OS에서 설치

 먼저 32비트 라즈비안에 설치해 정상작동을 확인한 뒤, 64비트 라즈비안에 설치하는 방법을 찾아보았다. 아래의 방법은 깃랩의 블로그가 그 출처임을 밝힌다. 

 대부분은 공식 홈페이지의 가이드를 그대로 따르면 된다. 

sudo apt-get install curl openssh-server ca-certificates apt-transport-https perl
curl https://packages.gitlab.com/gpg.key | sudo tee /etc/apt/trusted.gpg.d/gitlab.asc
sudo apt-get install -y postfix
sudo curl -sS https://packages.gitlab.com/install/repositories/gitlab/raspberry-pi2/script.deb.sh | sudo bash

 가이드에서 나온 위 네 줄까지는 그대로 작동한다. 하지만 바로 그 다음 줄

sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ce

부터는 gitlab-ce 패키지를 찾을 수 없다며 오류를 내뿜는다. 

 이를 해결하기 위해서는 먼저 설치 경로를 수정하고 필요한 라이브러리를 받는다. 

curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
sudo apt-get update
sudo apt-get install debian-archive-keyring
sudo apt-get install curl gnupg apt-transport-https
curl -L https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey | sudo apt-key add -

 그리고 패키지를 받을 소스를 파일에 추가한다.

sudo vi /etc/apt/sources.list.d/gitlab_gitlab-ce.list

  다음 내용을 위 파일에 붙여넣는다. 

deb https://packages.gitlab.com/gitlab/gitlab-ce/debian/ buster main
deb-src https://packages.gitlab.com/gitlab/gitlab-ce/debian/ buster main

 그리고 다시 설치를 진행하면 된다. 

sudo apt-get update
sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ce

 만약 개인 도메인이 있다면 EXTERNAL_URL에 대입하면 된다. 만약 iptime 공유기를 쓴다면 아래와 같이 DDNS 서비스를 이용할 수 있다. 

 이것은 공유기의 외부 IP를 .iptime.org가 붙은 도메인으로 접속할 수 있도록 해주는 기능이다. 이것을 사용해 외부에서 접속할 도메인을 만들 수 있다. 내부에 연결된 서버가 외부에 연결될 수 있도록 포트포워드를 하는 것을 잊지 말자. 

 만약 SSL을 사용할 예정이라면 이후로 진행하기 전에 깃랩에 접속해 루트 사용자로 로그인하여 새 사용자를 만들어 놓기를 바란다. 루트 사용자 비밀번호는 터미널에서 안내하는 파일에 쓰여있으며 얼마 뒤 삭제되기 때문이다. 

 

SSL

 만약 https(SSL)을 적용할 생각이라면 iptime DDNS는 사용하지 않는 것이 좋다. iptime에서 제공하는 DDNS는 SSL 인증서가 발급되지 않는 경우가 많다. 

 Duck DNS와 같은 무료 DNS 서비스를 이용한다면 SSL 인증서를 받을 수 있다. 

 깃랩은 인증서를 받고 갱신하는 작업을 자동화 할 수 있는 설정을 제공한다. 먼저 해당 설정 파일을 열어보자. 

sudo vi /etc/gitlab/gitlab.rb

이 파일에서 몇 가지만 수정하면 된다. 

## GitLab instance
external_url "https://gitlab.example.com"         # Must use https protocol
letsencrypt['contact_emails'] = ['foo@email.com'] # Optional

...

# Renew every 7th day of the month at 12:30
letsencrypt['auto_renew_hour'] = "12"
letsencrypt['auto_renew_minute'] = "30"
letsencrypt['auto_renew_day_of_month'] = "*/7"

...

nginx['redirect_http_to_https'] = true

 위 설정들을 찾아서 수정해주자. URL의 경우 반드시 https를 사용해야 한다.

 그리고 아래의 명령어를 실행해 새로고침 해주자. 

sudo gitlab-ctl reconfigure

 이제 잠시 동안 깃랩이 스스로 인증서를 발급받고 설정한다. 이제 도메인에 접속하면 깃랩 로그인 화면이 보일 것이다. 

 

마무리

 이렇게 라즈베리파이 64비트 OS에 깃랩을 설치하고 SSL까지 적용하는 법을 알아보았다. 새로운 종류의 원격 리포지토리를 사용해보는 것도 좋은 경험이지만, 내가 스스로 유지보수할 수 있는 하드웨어에 직접 내 데이터를 보관하고 관리해보는 것이 더 기분 좋았다. 

Comments