기술 가이드

CentOS 7에 Gogs로 자체 Git 서버 설치 및 구성

7 min read DevOps 업데이트됨 08 Oct 2025
CentOS 7에 Gogs로 자체 Git 서버 설치
CentOS 7에 Gogs로 자체 Git 서버 설치

중요: 이 문서는 루트 권한과 CentOS 7 환경을 전제로 합니다. 프로덕션 환경에서는 추가적인 보안 및 백업 정책을 적용하세요.

주요 대상 및 관련 검색어

  • 주요 의도: Gogs 설치 및 구성
  • 관련 변형: CentOS 7 Gogs 설치, Gogs PostgreSQL 구성, Gogs Nginx 리버스 프록시, 자체 호스팅 Git 서버, Go 기반 Git 서비스

목차

  • 준비사항
  • 1단계: EPEL 저장소 설치
  • 2단계: PostgreSQL 설치 및 구성
  • 3단계: Go와 Git 설치 및 환경 구성
  • 4단계: Gogs 소스 다운로드 및 빌드
  • 5단계: Gogs 설정(custom/conf/app.ini) 구성
  • 6단계: systemd로 Gogs 서비스 등록 및 실행
  • 7단계: Nginx를 리버스 프록시로 설정
  • 8단계: 설치 검증 및 초기 관리자 계정 생성
  • 문제 발생 시 점검 항목
  • 대안과 확장 옵션
  • 보안 강화 권장 사항
  • 역할별 체크리스트
  • 간단한 용어집
  • 테스트 및 수용 기준
  • 요약

준비사항

  • CentOS 7 서버(최소 사양 권장: 1 CPU, 1GB RAM 이상) — 실제 트래픽에 따라 확장 필요
  • 루트 권한 또는 sudo 사용 가능한 계정
  • 방화벽(iptables/firewalld)을 사용하는 경우 포트 80 또는 리버스 프록시 포트가 열려 있어야 함

중요: 실제 서비스 도메인을 사용하는 경우 DNS가 올바르게 설정되어 있어야 합니다.

1단계 - EPEL 저장소 설치

EPEL(Extra Packages for Enterprise Linux)은 CentOS에서 널리 쓰이는 추가 패키지 저장소입니다. 먼저 EPEL을 설치합니다.

sudo yum -y install epel-release

성공하면 EPEL 저장소가 시스템에 추가됩니다.

2단계 - PostgreSQL 설치 및 구성

Gogs는 여러 DB(MariaDB/MySQL, PostgreSQL, SQLite 등)를 지원합니다. 이 가이드에서는 PostgreSQL을 사용합니다.

PostgreSQL 설치:

sudo yum -y install postgresql-server postgresql-contrib

데이터베이스 초기화:

sudo postgresql-setup initdb

PostgreSQL을 로컬 바인딩(127.0.0.1)으로 설정하고 md5 인증을 사용하도록 구성합니다.

Postgres 사용자로 전환:

su - postgres

데이터 디렉터리로 이동하여 설정 편집:

cd data/
vim postgresql.conf

listen_addresses를 찾아 아래처럼 주석 해제하고 값 변경:

listen_addresses = '127.0.0.1'

저장 후 pg_hba.conf 편집:

vim pg_hba.conf

로컬 접속 라인(127.0.0.1/32)을 md5로 설정:

host    all             all             127.0.0.1/32            md5

서비스 시작 및 부팅 시 자동 시작 활성화:

sudo systemctl start postgresql
sudo systemctl enable postgresql

PostgreSQL 설치 후 서비스 확인 스크린샷

PostgreSQL이 127.0.0.1:5432로 실행 중인지 netstat로 확인:

netstat -plntu

PostgreSQL이 로컬 주소와 포트 5432에서 실행되는 예시

데이터베이스 및 사용자 생성:

su - postgres
psql

psql에서 git 사용자 생성(데이터베이스 생성 권한 포함) 및 비밀번호 설정:

CREATE USER git CREATEDB;
\password git

Gogs용 데이터베이스 생성 및 소유자 지정:

CREATE DATABASE gogs_production OWNER git;
exit

PostgreSQL 데이터베이스 및 사용자 생성 스크린샷

참고: 운영 환경에서는 강력한 비밀번호 정책과 네트워크 접근 제어를 적용하세요.

3단계 - Go 및 Git 설치

기본 Git 설치:

sudo yum -y install git

‘gog’ 서비스를 실행할 전용 사용자 ‘git’ 생성:

useradd -m -s /bin/bash git
passwd git

git 사용자로 전환하여 로컬 디렉터리 생성:

su - git
mkdir -p /home/git/local

로컬 디렉터리로 이동해 Go 바이너리 다운로드(예시는 go1.9.2) — 최신 버전으로 교체 권장:

cd ~/local
wget https://dl.google.com/go/go1.9.2.linux-amd64.tar.gz

Go 압축 파일 다운로드 스크린샷

압축 해제 및 아카이브 삭제:

tar -xf go1.9.2.linux-amd64.tar.gz
rm -f go1.9.2.linux-amd64.tar.gz

환경 변수 설정(GOROOT, GOPATH, PATH):

cd ~/
echo 'export GOROOT=$HOME/local/go' >> $HOME/.bashrc
echo 'export GOPATH=$HOME/go' >> $HOME/.bashrc
echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> $HOME/.bashrc

쉘 환경 재로딩:

source ~/.bashrc

bash가 기본 쉘인지 확인하고 go 버전 확인:

go version

Go 버전 확인 예시

참고: Go 버전은 프로젝트 요구사항에 따라 달라질 수 있습니다. Gogs 안정 브랜치 및 권장 버전을 확인하세요.

4단계 - Gogs 설치(소스 다운로드 및 빌드)

git 사용자로 Gogs 소스 다운로드:

su - git
go get -u github.com/gogits/gogs

소스는 $GOPATH/src/github.com/gogits/gogs에 위치합니다. 빌드:

cd $GOPATH/src/github.com/gogits/gogs
go build

에러 없이 빌드되면 Gogs 실행:

./gogs web

기본적으로 포트 3000에서 모든 인터페이스(공개 IP)로 바인딩되어 실행됩니다.

Gogs 웹 서버가 포트 3000에서 실행되는 예시

브라우저에서 http://서버IP:3000 로 접속하면 초기 화면이 표시됩니다.

http://192.168.33.10:3000/

초기 Gogs 웹 UI 예시

터미널로 돌아가서 Ctrl+C로 서버를 중지합니다.

중요: 직접 실행 모드는 디버깅에 유용하지만, 프로덕션에서는 systemd 서비스로 실행하십시오.

5단계 - Gogs 구성(custom/conf/app.ini) 편집

Gogs 설치 디렉터리에서 사용자 정의 구성 디렉터리 생성:

cd $GOPATH/src/github.com/gogits/gogs
mkdir -p custom/conf/

기본 conf를 복사하고 수정:

cp conf/app.ini custom/conf/app.ini
vim custom/conf/app.ini

[server] 섹션에서 Gogs를 로컬 바인딩으로 제한:

[server]
 PROTOCOL = http
 DOMAIN = localhost
 ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/
 HTTP_ADDR = 127.0.0.1
 HTTP_PORT = 3000

[database] 섹션에서 PostgreSQL 정보 입력(예시):

[database]
 DB_TYPE = postgres
 HOST = 127.0.0.1:5432
 NAME = gogs_production
 USER = git
 PASSWD = aqwe123@

비밀번호는 예시이므로 안전한 값으로 변경하세요.

구성 확인을 위해 다시 Gogs 실행:

./gogs web

Gogs가 custom/conf 설정으로 실행되는 예시

Gogs가 127.0.0.1:3000에서 실행되어야 합니다.

6단계 - Gogs를 systemd 서비스로 실행

/etc/systemd/system에 gogs.service 파일 생성:

cd /etc/systemd/system
vim gogs.service

다음 내용을 붙여넣기(경로는 실제 Gogs 설치 경로에 맞게 수정):

[Unit]
 Description=Gogs
 After=syslog.target
 After=network.target
 After=mariadb.service mysqld.service postgresql.service memcached.service 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
 Type=simple
 User=git
 Group=git
 WorkingDirectory=/home/git/go/src/github.com/gogits/gogs
 ExecStart=/home/git/go/src/github.com/gogits/gogs/gogs web
 Restart=always
 Environment=USER=git HOME=/home/git
  
 [Install]
 WantedBy=multi-user.target

저장 후 systemd 리로드 및 서비스 시작/활성화:

systemctl daemon-reload
systemctl start gogs
systemctl enable gogs

서비스 상태 및 포트 확인:

netstat -plntu
systemctl status gogs

Gogs systemd 서비스 실행 및 상태 확인 예시

systemctl 상태 예시

중요: WorkingDirectory 및 ExecStart 경로가 실제 빌드 결과와 일치하는지 확인하세요.

7단계 - Nginx를 Gogs 리버스 프록시로 설정

EPEL에서 Nginx 설치:

yum -y install nginx

/etc/nginx/conf.d에 가상 호스트 파일 생성:

cd /etc/nginx/
vim conf.d/gogs.conf

예시 서버 블록(도메인 부분은 실제 도메인으로 변경):

server {
    listen 80;
    server_name git.hakase-labs.co;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

구성 문법 검사:

nginx -t

Nginx 재시작 및 부팅시 활성화:

systemctl restart nginx
systemctl enable nginx

포트 80이 열려 있는지 확인:

netstat -plntu

Nginx가 포트 80에서 수신 중인 예시

참고: 실제 서비스에서는 HTTPS(포트 443)를 사용해야 하며, Let’s Encrypt와 같은 CA를 통한 자동 갱신을 권장합니다.

8단계 - 설치 테스트 및 초기 관리자 계정 생성

브라우저에서 Gogs 도메인 또는 IP로 접속:

http://git.hakase-labs.co/

웹 설치 화면에서 PostgreSQL 연결 정보를 입력합니다(앞서 custom/conf에 입력한 값과 일치해야 함).

Gogs 설치 화면 - DB 정보 입력 예시

페이지 하단의 Admin account settings에서 관리자 계정(아이디, 비밀번호, 이메일) 입력:

관리자 계정 생성 UI 예시

Install Gogs 버튼 클릭 후 대시보드로 리디렉션되면 설치 성공입니다.

Gogs 사용자 대시보드 예시

Gogs 관리자 대시보드 예시

설치가 성공적으로 완료되었습니다. 이제 리포지터리 생성, SSH 키 등록, 조직(Organization) 설정 등을 진행할 수 있습니다.


문제 발생 시 점검 항목

  • 서비스가 바인딩되지 않음: custom/conf/app.ini의 HTTP_ADDR와 HTTP_PORT 확인
  • DB 연결 실패: pg_hba.conf의 인증 설정과 PostgreSQL이 로컬에서 청취 중인지 확인
  • 포트 충돌: netstat -plntu로 포트 사용 상태 확인
  • systemd 서비스 시작 실패: journalctl -u gogs –no-pager를 통해 로그 확인
  • Nginx 프록시 오류(502): Gogs가 로컬에서 정상 실행되는지, proxy_pass URL을 확인

중요: 로그는 문제 원인 파악에 핵심입니다. Gogs 로그와 systemd, nginx 로그를 함께 확인하세요.

언제 이 방법이 적합하지 않은가(예외 사례)

  • 소규모 테스트 환경에서 단순히 Git 호스팅만 필요하고 GUI는 필요하지 않다면, 단순 bare-repo + SSH 방식이 더 가볍습니다.
  • 높은 가용성과 자동 확장(클러스터링)이 필요한 대규모 프로덕션 환경에는 Gogs 단독 설치보다 GitLab, Gitea(클러스터 지원), 또는 관리형 Git 서비스가 적합할 수 있습니다.
  • 데이터 규정 준수 또는 감사 로그가 엄격해야 하는 환경에서는 추가 로깅·백업·모니터링 인프라가 필요합니다.

대안 및 확장 옵션

  • 데이터베이스: MySQL/MariaDB 또는 SQLite 사용 가능(소규모 테스트용). PostgreSQL은 안정성과 기능 측면에서 권장.
  • 인증: LDAP/SSO 연동 지원(설정은 Gogs의 공식 문서 참조).
  • HTTPS: Nginx에서 Let’s Encrypt(ACME)를 사용하여 자동 HTTPS 구성 권장.
  • 배포 방식: 바이너리 릴리스 사용 또는 도커 이미지를 이용한 컨테이너 배포(컨테이너 환경에서는 볼륨/데이터관리에 유의).

간단한 비교(선택 가이드):

  • 간단 설치, 경량: Gogs
  • 활발한 개발/기능: Gitea (Gogs 포크)
  • 고급 기능(이슈, CI, 대기업 기능): GitLab

보안 강화 권장 사항

  • TLS 적용: Nginx에서 HTTPS 설정(포트 443) 및 HTTP -> HTTPS 리디렉션
  • 데이터베이스 접근 제한: PostgreSQL을 로컬 바인딩으로 유지하고 방화벽으로 외부 접근 차단
  • 비밀번호 정책: 관리자 및 사용자의 강력한 비밀번호 요구
  • SSH 접근: SSH 포트 변경, 공개키 기반 인증 강제, fail2ban 적용
  • 백업 정책: 정기적인 DB dump 및 Git 리포지터리 백업
  • 모니터링: 서비스 가용성 및 로그 모니터링(예: Prometheus + Grafana 또는 로그 수집 시스템)

중요: 프로덕션 환경에서는 보안 감사와 침해사고 대응 계획(IR playbook)을 마련하세요.

역할별 체크리스트

  • 시스템 관리자

    • CentOS 업데이트 및 EPEL 설치
    • PostgreSQL 초기화 및 백업 설정
    • 방화벽/SELinux 정책 확인
    • systemd 서비스 등록 및 모니터링 설정
  • 개발/팀 관리자

    • 관리자 계정 생성 및 조직 설정
    • 사용자 초대 및 권한 정책 설계
    • 템플릿 리포지터리 생성
  • 보안 담당자

    • TLS 인증서 관리
    • 비밀번호/SSH 정책 적용
    • 로그·감사 설정 및 주기적 검토

간단한 용어집(한 줄)

  • Gogs: Go로 작성된 경량 자체 호스팅 Git 서비스
  • GOPATH/GOROOT: Go 작업공간 및 설치 경로
  • systemd: Linux의 서비스 및 데몬 관리자
  • Nginx: 리버스 프록시 및 웹 서버
  • PostgreSQL: 관계형 데이터베이스 시스템

테스트 및 수용 기준

  • 서비스가 부팅 시 자동으로 시작되는가? (systemctl enable/시작 확인)
  • 웹 UI가 HTTPS(권장) 또는 HTTP에서 정상 로드되는가?
  • 관리자 계정으로 로그인하고 리포지터리 생성, 푸시·풀 동작이 정상인가?
  • 백업 복구 시나리오(데이터베이스 덤프 복원 및 리포지터리 복원)가 문서화되어 있는가?

간단한 수용 테스트 목록(테스트 케이스):

  • 웹 UI 접속 및 로그인: 성공
  • 신규 리포지터리 생성 후 로컬에서 git push: 성공
  • SSH 키 등록 후 SSH push: 성공
  • 시스템 재부팅 후 Gogs 서비스 자동 시작: 성공

마이그레이션 및 버전 주의사항

  • Gogs 버전 업그레이드 전에는 DB 및 리포지터리 백업을 반드시 수행하세요.
  • Go 버전이나 Gogs 소스 구조 변경으로 인해 빌드/경로가 변경될 수 있습니다. 빌드 경로(WorkingDirectory, ExecStart)를 재검토하세요.
  • 컨테이너로 마이그레이션 시 데이터(디렉터리, DB) 볼륨 마운트 전략을 계획하세요.

SOP(간단한 운영 절차)

  • 장애 발생 시

    1. systemctl status gogs 확인
    2. journalctl -u gogs –since “10 minutes ago”로 최근 로그 확인
    3. nginx 로그(/var/log/nginx) 및 PostgreSQL 로그 확인
    4. 복구 불가 시 DB/리포지터리 백업에서 복구
  • 보안 사고 발생 시

    1. 관리자 계정 비활성화 및 비밀번호 초기화
    2. 관련 시스템 격리
    3. 로그 수집 및 사고 범위 판별

요약

이 가이드는 CentOS 7에 Gogs를 설치하고 PostgreSQL과 Nginx로 구성하는 전체 과정을 다룹니다. 주요 단계는 EPEL 설치, PostgreSQL 초기화 및 사용자/DB 생성, Go 및 Git 설치, Gogs 빌드, custom/conf 설정, systemd 서비스 등록, Nginx 리버스 프록시 설정 및 설치 검증입니다. 프로덕션 전환 시 TLS 적용, 백업/복원 절차, 접근 제어 및 모니터링을 반드시 구현하세요.

참고 문서: https://gogs.io/docs/installation

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Debian 11에 Podman 설치 및 사용하기
컨테이너

Debian 11에 Podman 설치 및 사용하기

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정
시스템 관리

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드
그래픽 가이드

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드

Debian Etch에 Dansguardian+Squid(NTLM) 구성
네트워크

Debian Etch에 Dansguardian+Squid(NTLM) 구성

안드로이드 SD카드 설치 오류(Error -18) 완전 해결
안드로이드 오류

안드로이드 SD카드 설치 오류(Error -18) 완전 해결

KNetAttach로 원격 네트워크 폴더 연결하기
네트워킹

KNetAttach로 원격 네트워크 폴더 연결하기