Gogs란 Go Git Service 의 약자로, Go 언어로 개발된 오픈소스 Git 서버입니다.
Gogs 는 경량 어플리케이션이며 Gitlab에 비해 저사양 환경에서 구축 가능하다는 장점이 있습니다.
Git 이란 분산버전관리시스템(DVCS)이며 파일의 변경사항을 추적하며 여러명이 하나의 프로젝트를 관리하며 조율하는데 사용합니다.
[Gogs 특징]
- 경량성 : 경량 어플리케이션이며 빠른 실행속도를 제공함
- 사용 편의성 : 사용자 친화적 인터페이스를 제공하여 git 레포지터리 관리에 용이함
- 다국어 지원
- 이슈 트래킹 : 간단한 이슈 트래킹 시스템이 내장되어 관리에 용이함
- 플러그인 지원 : 다양한 플러그인을 통해 Gogs 기능 확장 가능
1. DB 설치 및 계정 생성
Gogs 를 사용하기 위해서는 Mysql 5.7 버전 이상이거나 SQLite, PostgreSQL 이 서버에 설치되어 있어야 합니다.
Ubuntu 22.04 환경에서 기본적으로 제공되는 Mysql 8.0 버전으로 설치를 진행하겠습니다.
# apt-get -y update
# apt install -y mysql-server
# mysql -V
# mysql -u root -p
mysql > create database gogs character set utf8mb4 collate utf8mb4_general_ci;
mysql > show databases;
mysql > use mysql;
mysql > alter user root@localhost identified by ‘[DB root 패스워드]’;
mysql > flush privileges;
mysql > create user gogs@localhost identified by ‘[DB gogs 패스워드]’;
mysql > grant all privileges on gogs.* to gogs@localhost;
mysql > flush privileges;
2. Git 설치 (1.8.3 버전 이상 설치)
# apt-get -y install git
# git version
3. Gogs 설치 및 실행
Gogs은 바이너리와 소스파일을 통해 설치 진행가능하며 바이너리로 테스트 진행하겠습니다.
바이너리 설치 : https://gogs.io/docs/installation/install_from_binary
소스파일 설치 : https://gogs.io/docs/installation/install_from_source
# wget https://dl.gogs.io/0.13.0/gogs_0.13.0_linux_amd64.tar.gz
# tar xvzf gogs_0.13.0_linux_amd64.tar.gz
# cd gogs
# ./gogs web .
-> 해당 명령어 실행 후 3000번 포트를 통해 웹 콘솔 접근이 가능합니다. (ex http://192.168.0.193:3000)
-> 명령어 중지시 Gogs 실행이 중단되며 명령어를 서비스화시켜 백그라운드 작동을 권장합니다.
4. 웹 콘솔 페이지 설정
gogs 실행 후 설정페이지에서 일부 설정의 수정이 필요하며 수정할 부분은 아래와 같습니다.
[데이터베이스 설정]
데이터베이스 유형 : MySQL
비밀번호 : [DB Gogs 패스워드]
[애플리케이션 일반 설정]
데몬 사용자 계정 : root
도메인 : 임의의 도메인
애플리케이션 URL : http://서버 IP:3000/
이후 하단의 [Gogs 설치하기] 버튼을 클릭 후 잠시 대기하면 설치가 진행됩니다.
** 페이지를 찾을 수 없다는 문구 출력시 애플리케이션 URL 부분이 수정되지 않아 발생하는 문제로, 해당 부분을 수정후 다시 접근합니다.
5. 사용자 계정 생성 및 저장소 생성
사용자 계정을 생성 후 로그인하여 대시보드 우측 “+” 버튼을 통해 저장소를 추가합니다.
저장소 생성시 다음과 같이 저장소의 주소를 확인가능합니다.
http://192.168.0.193:3000/[사용자계정명]/sample.git
6. 파일 업로드 (Client)
클라이언트 측에서 저장소로 파일을 업로드 하는 방법입니다.
업로드시 git을 사용하므로 클라이언트 측에도 git 설치가 필요합니다.
이후 php 샘플 파일 업로드와 대용량 파일 업로드를 진행해보겠습니다.
# dnf install -y git
# git version
# mkdir php-sample && cd php-sample
# echo “<?php echo ‘Good Job !!’; phpinfo(); ?>” > index.php
# dd if=/dev/zero of=file.bin bs=100M count=10
# git init -b main
-> 로컬 main 저장소를 초기화 합니다. (/root/php-smaple/.git)
# git remote add origint http://192.168.0.193:3000/[사용자 계정명]/sample.git
-> 원격 저장소를 origin 이라는 이름을 사용하여 로컬 저장소에 추가합니다.
# git remote -v
-> 현재 연결된 원격 저장소를 확인합니다.
-> 연결 해제시 git remote remove [저장소 이름]
# git add .
-> 현재 디렉터리의 변경사항을 로컬 저장소의 스테이징 영역에 추가합니다.
-> . 은 현재 디렉터리의 모든 파일을 의미하며 git push 를 입력해야 서버로 전송됩니다.
# git config –global user.email “[client 메일]”
# git config –global user.name “[client 이름]”
-> 해당 과정을 진행하지 않을 시 신원확인이 되지 않아 commit 과정에서 진행되지 않습니다.
# git commit -m “[커밋메세지]”
-> m 옵션을 추가하여 커밋의 의도를 명확하게 파악할 수 있게 메세지를 입력합니다.
# git push -u origin main
-> git push 를 통해 로컬저장소에서 원격저장소(서버)로 전송합니다.
-> u 옵션은 원격 저장소의 branch에 로컬 branch를 연결하는 옵션이며 이후 git push 만 사용해도 됩니다.