로컬 Gitea(Self-hosted Git service) 환경 구성하기 #1

Paul
13 min readMay 8, 2024

--

Photo by Yancy Min on Unsplash

Gitea는 오픈 소스 소프트웨어이며, Go 언어로 작성된 자체 호스팅 Git 서버입니다. 저장소 파일 편집기, 프로젝트 이슈 추적, 사용자 관리, 알림, 내장 위키까지 포함된 서비스를 제공합니다. 또한 로컬 환경에서 Git 서버를 구성하기에 좋게 경량 애플리케이션이며, 메모리 사용량이 작다는 장점이 있습니다. 또한 Gitea 1.19 버전 부터 Gitea Actions를 통해서 CI/CD 환경을 구성할 수 있습니다.

Docker 기반의 Gitea 환경 구성하기

Docker Hub에 Gitea의 최신 버전의 Docker 이미지는 제공되며, Docker Compose를 사용하여 빠르게 구성을 할 수 있습니다. 예시에서는 Windows 10 OS 환경에 VagrantVirtualBox를 설치하고 Ubuntu 20.04 가상환경을 구축하고 Gitea 시스템을 설치했습니다. 자세한 내용은 아래 GitHub 주소를 참조하시기 바랍니다.

Git 소스를 다운로드 받은 후에 vagrant up 명령어를 통해서 가상 환경을 실행합니다. vagrant ssh gitea 명령어를 통해 Vagrant 머신에 접속을 합니다.

PS C:\Private\gitea-tutorial> vagrant up
Bringing machine 'gitea' up with 'virtualbox' provider...
==> gitea: Checking if box 'bento/ubuntu-20.04' version '202401.31.0' is up to date...
==> gitea: Clearing any previously set forwarded ports...
==> gitea: Clearing any previously set network interfaces...
==> gitea: Preparing network interfaces based on configuration...
...
...
PS C:\Private\gitea-tutorial> vagrant ssh gitea
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-170-generic x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro

System information as of Sat 27 Apr 2024 12:33:39 PM UTC

System load: 0.37 Processes: 165
Usage of /: 12.1% of 30.34GB Users logged in: 0
Memory usage: 11% IPv4 address for eth0: 10.0.2.15
Swap usage: 0% IPv4 address for eth1: 192.168.56.173


This system is built by the Bento project by Chef Software
More information can be found at https://github.com/chef/bento
vagrant@gitea:~$

Gitea 실행하기 위해서 /vagrant/docker/gitea 폴더로 이동을 합니다. 해당 폴더에서는 Gitea 설정 정보가 있는 app.ini 파일과 Gitea 에서 HTTPS지원을 위한 self-signed certificate 관련 파일이 미리 구성이 되어 있습니다. docker-compose 명령어를 실행 합니다.

This system is built by the Bento project by Chef Software
More information can be found at https://github.com/chef/bento
vagrant@gitea:~$
vagrant@gitea:~$ cd /vagrant/docker/gitea
vagrant@gitea:/vagrant/docker/gitea$ tree
.
├── app.ini
├── app.ini.default
├── certs
│ ├── cert.pem
│ └── key.pem
└── docker-compose.yaml

1 directory, 5 files
vagrant@gitea:/vagrant/docker/gitea$ ls -al
vagrant@gitea:/vagrant/docker/gitea$ docker-compose up -d
[+] Running 1/1
⠿ Container gitea Started 0.8s
vagrant@gitea:/vagrant/docker/gitea$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
f00f30c1e3d7 gitea/gitea:1.21.10 "/usr/bin/entrypoint…" 5 minutes ago Up 2 seconds 3000/tcp, 0.0.0.0:3300->3300/tcp, :::3300->3300/tcp, 0.0.0.0:222->22/tcp, :::222->22/tcp gitea

브라우저를 실행 해서 https://192.168.56.173:3300/ 접속 후 계정을 생성 하고 로그인을 합니다.

계정 등록 화면

Gitea에 HTTPS 설정하기

Gitea 기본 설정에서는 HTTP설정이며, Gitea에 HTTPS를 활성화 하는 방법에 대해서 알아보겠습니다. Gitea 에서는 gitea cert — host [HOST] 명령어를 통해서 self-signed certificate 생성할 수 있습니다.

vagrant@gitea:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5c2ddc43bacc gitea/gitea:1.21.10 "/usr/bin/entrypoint…" 22 minutes ago Up 22 minutes 3000/tcp, 0.0.0.0:3300->3300/tcp, :::3300->3300/tcp, 0.0.0.0:222->22/tcp, :::222->22/tcp gitea
vagrant@gitea:~$ docker exec -it 5c2ddc43bacc /bin/bash
5c2ddc43bacc:/#
5c2ddc43bacc:/# cd /data/certs/
5c2ddc43bacc:/data/certs# gitea cert --host 192.168.56.173
2024/04/27 14:21:31 Written cert.pem
2024/04/27 14:21:32 Written key.pem

Gitea에 HTTPS 설정을 하려면 app.ini파일을 변경해야 합니다. 변경되는 내용은 PROTOCOL, ROOT_URL,HTTP_PORT, CERT_FILE, KEY_FILE 관련 설정을 추가합니다.

# app.ini 파일
[server]
APP_DATA_PATH = /data/gitea
DOMAIN = 192.168.56.173
SSH_DOMAIN = 192.168.56.173 # vagrantfile 에 명시한 private_network 정보
PROTOCOL = https # https로 설정
ROOT_URL = https://192.168.56.173:3300/
HTTP_PORT = 3300
CERT_FILE = /data/certs/cert.pem # self-signed certificate
KEY_FILE = /data/certs/key.pem # self-signed certificate
DISABLE_SSH = false
SSH_PORT = 22
SSH_LISTEN_PORT = 22
LFS_START_SERVER = true
LFS_JWT_SECRET = QEzGj4d1DfcnkGI7HmP-PBk0s5lgWiqvb2KUrk7zCSo
OFFLINE_MODE = false
..

https://192.168.56.173:3300/ 접속한 후에 로그인 하고 저장소를 생성합니다.

저장소 생성 화면

새로운 저장소를 생성 하면 https:// 시작되는 저장소 주소를 확인 할 수 있습니다.

저장소 생성 완료 화면

생성된 저장소를 git clone 시“server certificate verification failed. CAfile: none CRLfile: none” 에러가 발생을 합니다. 해당 오류는 CA인증 파일을 인식하지 못하거나 잘못되었다는 의미입니다.

vagrant@gitea:~$ git clone https://192.168.56.173:3300/gitea/gitea-test-repo.git
Cloning into 'gitea-test-repo'...
fatal: unable to access 'https://192.168.56.173:3300/gitea/gitea-test-repo.git/':
server certificate verification failed. CAfile: none CRLfile: none
vagrant@gitea:~$

해결하는 방법은 http.sslVerify 값을 false 로 설정을 하면 됩니다. git config — global http.sslVerify false 통해서 전역 설정을 할 수 있지만 권장 하지 않습니다. git clone 시 -c 옵션을 통해서 해당 저장소를 clone 할때 http.sslVerify 값을 false 하도록 합니다. (git -c http.sslVerify=false clone https://xxxx.git)

vagrant@gitea:~$ git -c http.sslVerify=false clone https://192.168.56.173:3300/gitea/gitea-test-repo.git
Cloning into 'gitea-test-repo'...
Username for 'https://192.168.56.173:3300': gitea
Password for 'https://gitea@192.168.56.173:3300':
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), 949 bytes | 474.00 KiB/s, done.

또 다른 방법으로 Linux 환경의 루트/체인 인증서가 저장된 폴더(/etc/ssl/certs)에 Gitea 에서 생성된 cert.pem(self-signed certificate)를 복사 한 후에 git clone 을 하시면 “server certificate verification failed. CAfile: none CRLfile: none” 에러가 발생하지 않습니다.

vagrant@gitea:~$ cd /vagrant/docker/gitea
vagrant@gitea:/vagrant/docker/gitea$ ls
app.ini app.ini.default certs docker-compose.yaml
vagrant@gitea:/vagrant/docker/gitea$ tree
.
├── app.ini
├── app.ini.default
├── certs
│ ├── cert.pem
│ └── key.pem
└── docker-compose.yaml

1 directory, 5 files
# gitea cert.pem 파일을 /etc/ssl/certs/ 폴더 안에 복사함.
vagrant@gitea:/vagrant/docker/gitea$ sudo cp certs/cert.pem /etc/ssl/certs/
vagrant@gitea:/vagrant/docker/gitea$ git clone https://192.168.56.173:3300/gitea/gitea-test-repo.git
Cloning into 'gitea-test-repo'...
Username for 'https://192.168.56.173:3300': gitea
Password for 'https://gitea@192.168.56.173:3300':
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), 949 bytes | 31.00 KiB/s, done.

마무리하며

로컬 환경에서 Git 서버를 구축하기 위해 Gitea의 설치 방법을 살펴보았습니다. 다음으로는 Gitea에서 Git Actions을 사용할 수 있도록 Gitea Runner를 설정하는 방법을 알아보겠습니다.

참고사이트

--

--