카테고리 없음

Gitea 설치 가이드 with 글로벌호스트 울트라VPS

globalhost 2026. 10. 20. 09:35

사내 소스코드를 외부 클라우드가 아닌 우리 서버에 두고 싶다면,  Rocky Linux + Gitea 를 설치하세요.

 

Gitea는 저장소, 이슈, 풀 리퀘스트, 코드 리뷰, 권한 관리까지  제공하는 오픈소스 Git 서버입니다.

 

실행 파일 하나로 동작해 가볍고, 5~10명 규모 개발팀이 VPS 한 대로 운영하기에 알맞습니다.

 

이 글의 모든 명령어는 Gitea 공식 문서와 Rocky Linux 10.2 릴리스 노트로 검증했으며, 글로벌호스트 Ultra VPS를 통해 설치했습니다.

 

Git, GitHub, Gitea, GitLab 비교

소규모 팀에는 Gitea가 가장 가볍고 설치가 간단합니다.

네 가지를 한눈에 비교하면 다음과 같습니다.

 

소프트웨어정체 Rocky Linux 10.2 설치권장 메모리

Git 소스코드 버전 관리 프로그램 dnf로 바로 설치 -
GitHub Git 기반 클라우드 서비스 불가 (Enterprise Server는 가상 어플라이언스) -
Gitea GitHub와 비슷한 자체 Git 서버 가능, 이 글의 추천 4GB면 충분
GitLab CE GitHub와 비슷한 자체 Git 서버 (CI/CD 내장) 가능 (EL10 패키지 18.6.0부터) 8GB 이상 권장

 

GitLab은 기능이 많은 대신 무겁습니다. 공식 패키지는 RHEL 10과 AlmaLinux 10을 18.6.0부터 지원하고, Rocky Linux 10.1에서 설치를 테스트한 가이드는 RAM 8GB 이상을 권합니다.

 

처음 사내 Git 서버를 꾸린다면 Gitea로 시작하는 편이 부담이 적습니다.

설치 전 준비: 서버 사양과 CPU 요건부터 확인하세요

가장 먼저 확인할 것은 CPU입니다.

 

Rocky Linux 10은 x86_64에서 x86-64-v3 이상의 CPU만 지원하며, v2 이하 하드웨어에서는 동작하지 않습니다.

 

  • Proxmox 등 가상화 환경: VM의 CPU 타입을 기본값(kvm64 등)으로 두면 부팅되지 않을 수 있습니다. host 또는 x86-64-v3로 지정하세요.
  • 클라우드 VPS: 대부분의 업체가 이미 Rocky Linux 10.2 이미지를 제공하므로 목록에서 선택하면 됩니다.
  •  
  • 기존 Rocky Linux 10.0/10.1 서버: sudo dnf -y upgrade로 10.2까지 올릴 수 있습니다. 9.x 이하에서는 새로 설치해야 합니다.

5~10명 개발팀 기준 권장 사양은 다음과 같습니다. 저장소 크기와 CI/CD 사용 여부에 따라 늘리면 됩니다.

 

항목권장 사양

vCPU 2~4개
RAM 4GB
디스크 SSD 100GB
데이터베이스 SQLite3 (소규모), PostgreSQL (확장 운영)

 

1단계: Git 설치

Gitea는 서버에 설치된 Git(2.0 이상)을 사용하므로 Git부터 설치합니다.

sudo dnf update -y
sudo dnf install -y git curl wget
git --version

 

2단계: Gitea 전용 계정과 디렉터리 만들기

Gitea는 root가 아닌 전용 git 계정으로 실행합니다. 공식 문서의 Fedora/RHEL 계열 절차와 같습니다.

sudo groupadd --system git

sudo useradd \
  --system \
  --shell /bin/bash \
  --comment 'Git Version Control' \
  --gid git \
  --home-dir /home/git \
  --create-home \
  git

이어서 데이터와 설정 디렉터리를 만들고 권한을 지정합니다.

sudo mkdir -p /var/lib/gitea/{custom,data,log}
sudo chown -R git:git /var/lib/gitea
sudo chmod -R 750 /var/lib/gitea

sudo mkdir -p /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea

/etc/gitea에 쓰기 권한(770)을 주는 것은 웹 설치 화면이 설정 파일을 저장할 수 있게 하기 위한 임시 조치입니다. 설치가 끝나면 7단계에서 다시 잠급니다.

3단계: Gitea 내려받고 서명 검증하기

공식 바이너리를 내려받습니다. 아래는 공식 문서에 실린 Gitea 28.1.0, 64비트 x86용 예시입니다. 설치 시점의 최신 버전은 다운로드 페이지에서 확인하고 주소의 버전 번호를 바꾸세요.

cd /tmp
wget -O gitea https://dl.gitea.com/gitea/28.1.0/gitea-28.1.0-linux-amd64
wget https://dl.gitea.com/gitea/28.1.0/gitea-28.1.0-linux-amd64.asc

운영 서버에 올릴 파일은 변조 여부를 꼭 확인합니다. GPG 서명 검증 명령은 다음과 같습니다.

gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
gpg --verify gitea-28.1.0-linux-amd64.asc gitea

결과에 Good signature from "Teabot <teabot@gitea.io>"가 보이면 정상입니다. "신뢰된 서명이 아니다"라는 경고는 무시해도 됩니다. v1.27부터는 sigstore(cosign) 서명도 제공되므로 cosign을 쓰는 팀이라면 그 방식으로 검증해도 됩니다.

검증이 끝나면 실행 권한을 주고 시스템 경로로 옮깁니다.

chmod +x gitea
sudo mv gitea /usr/local/bin/gitea
gitea --version

4단계: SELinux 레이블 지정 (서비스 시작 전에!)

Rocky Linux는 SELinux가 enforcing 모드로 켜져 있습니다. 바이너리로 설치한 Gitea는 정책이 모르는 경로에 놓이므로, 서비스를 시작하기 전에 레이블을 직접 지정해야 합니다. 순서를 거꾸로 하면 첫 실행이 실패한 것처럼 보입니다.

sudo dnf install -y policycoreutils-python-utils

sudo semanage fcontext -a -t bin_t '/usr/local/bin/gitea'
sudo restorecon -v /usr/local/bin/gitea

sudo semanage fcontext -a -t var_lib_t '/var/lib/gitea(/.*)?'
sudo restorecon -Rv /var/lib/gitea
  • semanage fcontext는 규칙을 기록하고, restorecon은 이미 있는 파일에 적용합니다. 재부팅 후 풀리는 chcon 대신 이 조합을 쓰세요.
  • /etc/gitea는 /etc의 기본 레이블로 읽히므로 따로 지정할 필요가 없습니다.
  • SELinux를 끄지 마세요. setenforce 0은 원인 확인용으로만 잠깐 쓰고 setenforce 1로 되돌립니다.

5단계: systemd 서비스로 등록하고 시작하기

서버가 재부팅돼도 Gitea가 자동으로 올라오도록 서비스로 등록합니다. 공식 저장소의 샘플 gitea.service를 바탕으로 이 글의 경로에 맞춘 최소 구성입니다.

sudo vi /etc/systemd/system/gitea.service
[Unit]
Description=Gitea Git Server
After=network.target

[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
RestartSec=2

[Install]
WantedBy=multi-user.target

SELinux 레이블을 마친 뒤 서비스를 켭니다.

sudo systemctl daemon-reload
sudo systemctl enable --now gitea
sudo systemctl status gitea

active (running)이 보이면 성공입니다.

6단계: 방화벽 열기

Gitea의 기본 웹 포트는 3000번입니다. 초기 설정을 위해 잠시 열어 둡니다.

sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload

운영 단계에서는 Nginx로 80/443 포트를 받고 3000번은 외부에서 닫는 것을 권장합니다. 방법은 아래 운영 팁에서 다룹니다.

7단계: 웹 초기 설정과 권한 잠그기

브라우저에서 http://서버IP:3000으로 접속하면 초기 설정 화면이 나옵니다.

설정 항목입력값

Database Type SQLite3
Site Title Company Git Server
Repository Root Path 기본값
SSH Server Domain 서버 IP 또는 도메인
SSH Port 22 (실제 SSH 포트에 맞춤)
HTTP Port 3000
Base URL http://서버IP:3000/

아래쪽에서 관리자 계정을 만들고, 공개 회원가입은 비활성화한 뒤 설치를 누릅니다.

설치가 끝나면 2단계에서 열어 둔 설정 디렉터리를 바로 읽기 전용으로 잠급니다.

sudo chmod 750 /etc/gitea
sudo chmod 640 /etc/gitea/app.ini

운영 팁: 설치 다음에 꼭 챙길 것

설치만으로는 "돌아가는" 서버이고, 아래까지 해야 "맡길 수 있는" 서버가 됩니다.

[embed: node/433c811e-ce90]

팀원은 HTTPS(Nginx 경유) 또는 SSH로 Gitea에 접속하고, 저장소와 DB는 VPS 밖의 백업 저장소로 매일 복사됩니다.

  • HTTPS 적용: Nginx를 리버스 프록시로 두고 80/443 포트를 받게 한 뒤, 방화벽에서 3000번을 닫습니다. Gitea를 root로 돌려 1024번 아래 포트를 직접 쓰는 방식은 피하세요.
  • ROOT_URL 변경: 도메인과 HTTPS로 옮겼다면 /etc/gitea/app.ini의 ROOT_URL을 https://git.회사도메인/ 형태로 바꿉니다. 그대로 두면 클론 주소가 :3000으로 표시됩니다.
  • 정기 백업: 저장소와 DB는 gitea dump 또는 Proxmox Backup Server 같은 별도 저장소로 매일 백업합니다.
  • 계정 보안: 관리자 계정에 2단계 인증(MFA)을 켜고, 팀원은 SSH 키로 접속하게 합니다.
  • 업그레이드: 서비스를 멈추고 /usr/local/bin/gitea 파일만 새 버전으로 교체한 뒤 재시작합니다. 파일 이름에 버전 번호를 붙이면 저장소 훅이 깨지니 이름은 gitea 그대로 둡니다. 교체 후 restorecon -v /usr/local/bin/gitea도 다시 실행하세요.

문제가 생겼을 때: 권한 문제처럼 보이는데 원인이 안 보이면 SELinux일 가능성이 큽니다. 거부 기록은 Gitea 로그가 아니라 감사 로그에 남습니다.

sudo ausearch -m AVC -c gitea --start recent

 

 

Rocky Linux 10.2 VPS 한 대와 Gitea만으로 사내 협업 환경을 만들 수 있습니다.

 

 

 

호스팅

 

참고 자료