기술 가이드

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
저자
편집

유사한 자료

Instagram 비공개 계정 보기: 합법적 방법과 위험
소셜미디어

Instagram 비공개 계정 보기: 합법적 방법과 위험

PC 오류 8790 빠른 해결 가이드
윈도우 문제

PC 오류 8790 빠른 해결 가이드

No Man’s Sky FPS·패킷손실 완전 해결 가이드
게임 가이드

No Man’s Sky FPS·패킷손실 완전 해결 가이드

여러 휴대전화에서 동일한 WhatsApp 사용하기
모바일

여러 휴대전화에서 동일한 WhatsApp 사용하기

특정 사이트만 검색하는 맞춤 Google 검색 엔진 만들기
검색엔진

특정 사이트만 검색하는 맞춤 Google 검색 엔진 만들기

CentOS 7에 Gogs로 자체 Git 서버 설치
DevOps

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