Skip to content
VDS · 앱 및 봇

나만의 Git: Forgejo 또는 Gitea

웹 인터페이스, SSH 접근, 빌드 실행 기능을 갖춘 개인 저장소 서버를 설정하는 방법과 코드를 잃지 않기 위해 복사해야 할 것을 알아봐요.

업데이트 2026년 8월 23일

코드가 다른 사람의 플랫폼으로 나가면 안 되거나, 비공개 저장소와 빌드 시간에 제한을 두고 싶지 않을 때는 자체 Git이 필요해요. Forgejo와 Gitea는 밀접하게 관련된 두 프로젝트예요(Forgejo는 Gitea에서 갈라져 나왔어요). 둘 다 컨테이너 하나에 설치되고 적당한 사양의 머신에서 실행돼요.

무엇을 고르고 리소스는 얼마나 필요한가

일상적인 작업에서는 차이가 거의 없어요. 인터페이스, 이슈, 풀 리퀘스트, 미러, 빌드용 Actions 모두 마찬가지예요. Forgejo는 커뮤니티가, Gitea는 회사가 개발해요. 프로젝트의 독립성이 중요하다면 Forgejo를 고르세요.

두세 명이라면 VDS-1이면 충분해요. 빌드용 러너를 추가하는 순간 VDS-3 이상으로 가세요. 빌드는 CPU와 디스크를 많이 잡아먹고, 디스크 속도는 티어에 따라 제한돼요.

Compose로 설치하기

services:
  forgejo:
    image: codeberg.org/forgejo/forgejo:11
    container_name: forgejo
    restart: unless-stopped
    environment:
      - USER_UID=1000
      - USER_GID=1000
    volumes:
      - ./data:/data
      - /etc/timezone:/etc/timezone:ro
    ports:
      - "3000:3000"
      - "2222:22"
docker compose up -d
docker compose logs -f forgejo

http://<machine-address>:3000을 열고 초기 설정을 진행하세요. 처음 생성한 사용자가 관리자가 돼요.

포트 3000을 외부에 열어 둘 필요는 없어요. 닫고 인증서가 있는 웹 서버를 서비스 앞에 두세요. 그러면 HTTPS를 쓸 수 있고 설정 패널을 외부인에게 보여주지 않아도 돼요. 설정이 끝나기 전에는 주소를 연 사람 누구나 먼저 관리자를 만들 수 있어요.

SSH 접속

컨테이너 내부의 포트 22는 2222로 포워딩돼요. 22는 시스템 SSH가 쓰고 있기 때문이에요. 저장소 설정에서 주소는 이렇게 보여요.

git clone ssh://git@example.com:2222/user/repo.git

포트 없이 익숙한 git@example.com:user/repo.git 형태를 쓰고 싶다면 2222를 컨테이너에 남겨 두고 호스트에서 시스템 SSH를 통해 포워딩을 설정하거나, 관리용 SSH를 다른 포트로 옮기세요(접속 보호 참고).

빌드

Actions는 별도의 러너가 실행해요. 관리자 설정에서 받은 토큰으로 등록하는 forgejo-runner 컨테이너예요. Docker 소켓에 대한 접근 권한은 신중하게 주세요. 머신의 root 권한과 같아요. 빌드용으로는 러너를 메모리와 CPU로 제한하는 게 좋아요. 리소스 제한을 참고하세요.

무엇을 백업할까

모든 상태는 ./data 볼륨에 저장돼요. 저장소, 데이터베이스, 첨부 파일, 설정 모두요. 백업은 이렇게 해요.

docker compose stop forgejo
restic -r <repository> backup ./data
docker compose start forgejo

SQLite를 쓴다면 서비스를 중지해야 해요. 그렇지 않으면 데이터베이스 스냅샷이 일관되지 않을 수 있어요. PostgreSQL이라면 중지 없이 pg_dump만으로 충분해요. 자세한 내용은 무엇을 정확히 백업할까와 Restic을 참고하세요.

흔한 실수

  • 저장소 크기를 잊는 것. 게임 서버 빌드와 미디어는 디스크 공간을 순식간에 잡아먹어요. 입문 티어의 40 GB는 어느새 사라져요.
  • 이메일을 설정하지 않는 것. 이메일이 없으면 초대와 비밀번호 재설정이 작동하지 않아요. 자체 메일 서버를 설정하는 것보다 외부 SMTP를 연결하는 게 더 쉬워요.
  • 백업 없이 업데이트하는 것. 메이저 버전을 바꾸면 데이터베이스 스키마가 바뀌어요. 먼저 백업하고, 그다음 docker compose pull을 하세요. 컨테이너 업데이트를 참고하세요.