gitea 로 git remote 서버를 집에서 구축하기

며칠전에 코드도사에서는 gitlab 리소스 문제로 인해 gitea 로 git 서버를 이전하려는 계획을 세운 적이 있다.

나름 방법을 찾아보고 해서 메모리 최적화 작업을 진행했으나 gitlab 을 설치한 서버가 여전히 높은 CPU 점유율과 메모리 사용율로 인해 시간이 지나면 다시 먹통(?) 이 되는 상황이 재현되었다. 따라서 더이상의 gitlab 사용은 포기하고 대안을 찾은게 바로 “gitea” 다. 

gitea 는 gitlab 과 같이 웹상에서 형상관리도구인 git 을 관리할 수 있는 도구이다. 쉽게 생각하면 github(깃허브) 와 비슷한 도구를 구축하여 사용하는 솔루션이라고 보면 된다. 

위 글에서도 잠깐 소개를 했지만 gitea의 독보적인 특징이 있다. 그것은 “시스템 리소스를 적게 소모하는 것”이다. 

gitea 공식 사이트에서 소개하는 gitea 의 특징이다. 위 4개의 특징들이 전부 눈에 띄지만 가장 눈에 띄는 것은 “가벼움” 이다. 소개 문구를 보면 라즈베리파이에서도 돌아갈 만큼 적은 시스템 리소스를 소모한다고 되어 있다. 과연 그럴까? 직접 설치해 보고 확인을 해봐야 할꺼 같다. 

일단은 라즈베리파이에서 돌아갈 정도이면 리소스를 적게 먹는다는 것은 어느정도 사실일 듯 한데, 이참에 gitea 를 직접 설치하여 git 서버를 이전하기로 결정하였다. 여기저기 알아본 결과로도 gitea가 시스템 자원을 적게 소모한다는 내용을 봤고 추천을 해줘서 다소 번거롭지만 gitea 를 설치해보기로 했다. 

gitea 다운로드

아래 링크로 접속하여 먼저 현재 최신 버전을 확인한 후에 다운로드를 진행한다. 

 

2022년 6월 현재 최신 버전은 1.16.8 이다 gitea 는 다양한 OS를 지원하는데 내가 설치한 서버는 Linux 이기 때문에 Linux 64 bit 버전을 다운로드 하면 된다. 위 빨간 네모의 파일은 실행파일이다.  다운로드를 하려면 위 파일의 링크를 복사한 후 아래와 같이 wget 를 통해 다운로드를 한다. 

wget -O gitea https://dl.gitea.io/gitea/1.16.8/gitea-1.16.8-linux-amd64
chmod +x gitea

일단 나의 경우에는 내 계정에서 “gitea” 라는 디렉토리를 생성하여 wget 으로 다운로드를 진행하였다. 그 다음에 gitea 는 실행파일이기 때문에 실행권한을 줘야 한다.

gitea 초기 설정

gitea 는 별도로 설치를 하지 않고 다운로드한 실행파일을 실행 시키기만 하면 바로 동작이 가능하다. gitea 를 다운로드 받은 디렉토리로 이동하여 gitea를 실행시킨다. 

위와 같이 실행이 되면 gitea가 정상적으로 구동이 된 것이다. gitea 는 포트가 3000 이므로 웹 브라우저를 통해 http://(IP혹은 도메인):3000 으로 접속하면 된다. 

초기 접속 화면에서 사용자가 입력해야 할 정보는 크게 2가지 정도이다. DB정보와 사이트 정보인데 DB는 mysql, PostgreSQL, SQLite3, MSSQL, TiDB 등이 지원된다. 그런데 SQLite3 빼고는 추가적으로 DB를 설치해야 하기 때문에 번거로워서 일단 SQLite3를 선택하였다. 

사이트 제목의 경우에는 바꿔도 되고 안바꿔도 된다. 아무래도 내가 구축하는 서버라면 내 입맛에 맞게 바꿔주는 것도 괜찮을 것이다. 나머지 항목의 경우에는 안바꿔도 상관은 없으나 본인의 환경과 취향에 맞게 바꿔줘도 된다. 여기서 “Gitea 기본 URL”의 경우에는 서버 IP 주소로 바꿔줄 필요가 있다. 나 같은 경우는 서버로 사용할 것이기 때문에 localhost 가 아닌 IP 주소로 변경을 해줬다. 물론 처음에는 localhost 로 설정한 다음에 추후에 바꿔도 된다. (바꾸는게 간단하다)

설정이 다 끝났으면 “Gitea 설치하기” 버튼을 누르면 설치 및 설정이 진행된다.

위 그림이 나오면 설치 및 설정이 완료된 것이다. 그런 다음에 다음과 같이 나타난다.

초기에 로그인을 하면 위와 같이 로그인 창이 뜨게 된다. 현재는 아무 계정도 없기 때문에 관리자가 계정을 가입해야 한다. 위의 빨간네모의 링크를 클릭한다.

가입하기 창이 뜨면 사용자명과 이메일주소, 비밀번호 등을 입력해 준다. 다음에 “계정 등록” 버튼을 누르면 가입이 완료된다. 처음 가입한 사용자가 관리자가 된다. 

 

설치가 완료된 gitea 의 웹 접속 모습이다. gitlab 보다 UI는 화려하지 않지만 깔끔하면서 심플하다. 내 입장에서는 gitlab의 다양한 기능이 필요가 없으므로 이정도면 꽤나 충분하다고 볼 수 있다. 

gitea를 systemctl 에 등록하기

설치가 끝났으면 이제 gitea 를 시스템 관리자인 systemctl 에 등록을 해줘야 한다. 우분투기반의 리눅스는 systemd 로 데몬들이 관리가 되므로 gitea도 시스템이 시작되면 자동으로 시작되거나 kill 되면 자동 재시작을 하게끔 systemd 에서 처리하게 등록이 필요하다. 

gitea 의 경우에는 별도로 설치 단계가 없으므로 systemd 에 등록을 수동으로 해줘야 한다. 일단 아래와 같이 vi 로 systemd 설정 파일을 작성한다. 

sudo vi /etc/systemd/system/gitea.service

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
#After=mysqld.service
#After=postgresql.service
#After=memcached.service
#After=redis.service

[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
RestartSec=2s
Type=simple
User=codedosa
Group=codedosa
WorkingDirectory=/home/codedosa/gitea
ExecStart=/home/codedosa/gitea/gitea web
Restart=always
Environment=USER=codedosa
HOME=/home/codedosa
# If you want to bind Gitea to a port below 1024 uncomment
# the two values below
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

작성이 다 끝났으면 저장을 하고 빠져나온 다음에 아래와 같이 system 에 등록하고 gitea 서비스를 구동시켜주면 된다. 

sudo systemctl daemon-reload
sudo systemctl enable gitea
sudo systemctl start gitea

만약 정상적으로 구동이 되었는지 확인하려면 아래와 같이 확인한다. 

sudo systemctl status gitea
# 로그를 보고 싶다면
sudo vi /var/log/syslog

Status 가 위와 같이 나온다면 정상적으로 gitea 가 구동을 하고 있는 것이다. 

gitlab 에서 gitea 이 git 저장소 이전하기

실제로 gitea 설치보다 기존 gitlab의 저장소에서 gitea 의 저장소로 이전하는게 가장 번거롭고 시간이 많이 걸린 듯하다. gitlab 저장소의 저장된 소스들이 무려 15 GB 나 되다보니 이전하는게 만만치 않은 듯 하다. 

일단 나의 경우에는 git 저장소의 모든 커밋 이력과 브렌치 들을 전부 그대로 이전해야 하기 때문에 아래와 같은 방식으로 이전하였다. 

# PC나 서버에 아래의 커맨드로 git 저장소를 clone 
git clone --mirror "기존 gitlab 리모트 주소"

# 저장소이름.git 으로 이동

# 이전하려는 저장소(gitea)로 remote 주소를 등록
git remote set-url --push origin "이전하려는 remote 주소"
# 이전하려는 저장소로 push
git push --mirror

기존 저장소에서 일단 이력을 –mirror 옵션으로 전부 clone 을 해 놓은 다음에 이전하려는 저장소로 remote 를 등록하고 push 를 해주는 방식이다. –mirror 옵션을 사용하면 커밋 이력부터 브렌치 까지 전부 그대로 이동이 가능하다.  –mirror 옵션을 쓰면 소스 디렉토리가 xxxx.git 으로 생성되므로 xxxx.git 으로 이동하여 리모트 주소 등록후 push 를 해주면 된다. 

그런데 gitlab 이 리소스를 워낙 많이 먹고 있는 바람에 git clone 자체가 제대로 되지 않아서 git 저장소 이전에 꽤나 많은 시간이 소요되었다. git clone 할때 시스템 리소스가 100에 육박하여 정상 구동이 되지 않았기 때문이다. 한개 clone 할때마다 시간도 오래 걸리서 다시 시스템 리붓 후 재시도 등등… 이번 경험을 계기로 gitlab은 가정에서 사용하기 어려운 도구라는것을 다시 깨닫게 되었다.

저장소 용량이 15 GB 씩이나 되다 보니 이전에 하루 왠종일 시간이 소요되었다. 그렇게 이전이 완료된 후에… gitea를 설치한 시스템 리소스를 확인해 보니 신세계가 따로없다. 정말 리소스를 적게 먹는게 사실이었다. 

참고로 gitlab 을 삭제하는 커맨드는 아래와 같다. 

#우분투 기준

sudo gitlab-ctl uninstall
sudo gitlab-ctl cleanse
sudo gitlab-ctl remove-accounts
sudo dpkg -P gitlab-ce 

gitlab VS gitea 리소스 비교

이번에 gitlab이 리소스를 많이 소모한다는 것을 알게 되면서 gitlab 의 안좋은 특징을 알게 되었는데 저장소의 파일 사이즈가 늘어나면 늘어날 수록 시스템 리소스를 급격하게 많이 잡아먹는다는 점이다. gitlab을 설치하고 초기에 운영할때는 CPU나 메모리를 많이 잡아먹기는 해도 100퍼센트에 육박하진 않았지만 저장소가 하나 둘씩 늘어나면서 급격하게 리소스를 잡아먹게 되는 걸로 보인다.

저장소 용량이 15 GB 에 육박했을때는 CPU는 4개의 Core 가 Full 로 점유율을 기록하고 있었고 메모리도 20기가에서 거의 100%를 소모하고 있었던 것이다. 이렇게 되면 gitlab의 웹 접속은 수시로 되지 않는 상황이 발생하고 git clone 조차 안되는 상황이 자주 발생한다. 또한 SSH 접속도 제대로 되지 않는다. 

그러다가 저장소를 차근차근 이전하면서 저장소 용량이 조금씩 줄어들자 점점 리소스 점유율이 줄어드는 것을 목격하였다. 그럼에도 gitlab의 특징은 시스템의 자원을 만만치 않게 점유를 하는 것이다. 아무래도 gitlab은 성능이 좋은 CPU(Xeon같은)와 많은 메모리가 있는 서버 장치에 적합하지 않나 싶다. 

그래서 gitlab과 gitea의 리소스 점유가 어떤지 비교를 하고 싶어졌다. 일단 gitlab을 구동했던 시스템의 스펙은 아래와 같다. 

AMD A10-6800K 라는 CPU 이다. 8년 전 모델이긴 한데 CPU Clock 이 최대 4.4 Ghz 까지 지원하고 4개의 Core 를 가지고 있다. 여기에 메모리는 20 GB 가 달려있는 PC 이다. 

htop 으로 본 리소스 상태의 모습이다. CPU, 메모리 모두 거의 Full 에 육박하고 있다. 이 상태에는 gitlab 웹 접속이 정상적이지 않고 git clone 도 느리거나 끊기는 등의 문제가 발생한다. 

이번에는 gitea 를 설치한 PC의 스펙이다. gitea를 설치한 PC는 리눅스를 설치한 노트북인데 gitlab을 설치했던 PC에 비해 스펙은 훨씬 낮다. 

인텔 펜티엄 N3700 1.6 Ghz 프로세서이고 코어가 4개, 메모리는 4 GB 이다. 하드 디스크는 최근에 SSD로 교체를 한 상태이다. 

gitea 웹에 접속하여 refresh 를 했을때 모습이다. CPU 점유율도 꽤나 낮고 메모리 점유율도 1/6 수준이다. 

대기 상태일 때의 모습이다. CPU  점유율이 더 낮아진 것을 볼 수 있다. 

gitea는 놀라울 정도로 시스템 자원을 소모하지 않는 것을 볼 수가 있다. 반면에 gitlab은 생각보다 꽤 많은 자원을 낭비하고 있다는 것도 알 수가 있다. gitlab 이 설치되어 있었던 PC는 다소 오래된 CPU를 탑재하고 있지만 최대 클럭 속도 4.4 Ghz 에 DDR3 20 GB 메모리가 장착되어 있어서 gitlab 을 충분히 돌릴 수 있을 것이라 생각했지만 의외로 시스템 자원을 Full 로 소모하고 속도마저 느리거나 접속이 끊기는 등의 문제가 발생하였다. 

반면에 펜티엄 N3700 CPU를 탑재하고 메모리가 4GB(DDR3) 인 (2015년도 출시가 되었으니 벌써 7년이 되었다) 노트북에서 gitea 는 시스템 리소스를 매우 적게 소모할 뿐더러 속도도 굉장히 빠른 모습을 보여준다. git remote 저장소가 동일한 용량임에도 말이다. 

현재 gitlab 을 설치했던 PC는 gitlab 을 제거하고 순수 개발 서버 용도로 사용하고 있고 gitea 를 설치한 노트북은 그대로 git 저장소 서버로 사용하고 있는 중이다. 3일째 사용하고 있는데에도 웹 접속 속도가 매우 빠르고 단순한 GUI 구성이지만 있을 것은 다 있는 형상 관리 도구인듯 하다. gitea 를 써보니 일단은 꽤나 만족스러웠다. 

위와 같은 테스트 결과로 봤을때 gitea 는 라즈베리파이 3 B+ 정도면 구동하기에 큰 문제가 없을 것으로 생각된다. 정말 gitea 공식 사이트의 설명처럼 가볍고 빠르며 시스템 리소스를 적게 소모하는게 맞는 걸로 보인다. 

일단 앞으로도 계속 gitea 를 사용하여 git 서버 용도로 사용할 계획이다. 나중에 시간이 나면 직접 “라즈베리파이 3 B+” 에 gitea 를 설치하여 구동을 해볼 생각도 있다. 라즈베리파이 3 B+ 에서 문제없이 구동이 되면 저전력 시스템인 라즈베리파이 3 B+를 git 서버로 활용하는 것도 좋을 것으로 생각된다. 

나와 같이 집이나 작은 사무실에다 git 서버를 운영할 생각이라면 gitea는 매우 추천이다. 반면에 gitlab 의 모든 기능을 사용하고 싶다면 CPU 는 성능이 좋아야 하고 메모리는 32 GB 이상인 고성능이 PC나 시스템에 gitlab 을 설치해야 할지도 모른다. 일단 일반 PC나 나스에 gitlab 설치는 비추천이다.

'코드도사(codedosa.com)'에는 쿠팡파트너스 등의 제휴링크가 포함되어 있으며 수수료를 제공받을 수 있습니다.