글 작성자: drizzle_
728x90

Gitea는 매우 쉽게 설치할 수 있는 자체 호스팅 Git 서비스이다.

GitHub, Bitbucket 및 GitLab과 유사하다.

또한 Gitea는 Gogs의 포크이다.

Gitea는 버그 추적, 위키 및 코드 검토와 같은 다른 협업 기능뿐만 아니라 Git을 사용하여 소프트웨어 개발 버전 제어를 호스팅하기위한 오픈 소스 소프트웨어 패키지이다. 

자체 호스팅을 지원하지만 DiDi의 클라우드에서 호스팅되는 무료 퍼블릭 퍼스트 파티 인스턴스도 제공한다.

Gogs의 포크이며 Go로 작성되었다. Gitea는 Linux, macOS 및 Windows를 포함하여 Go가 지원하는 모든 플랫폼에서 호스팅 할 수 있다.

Gitea는 매우 가볍기에 라즈베리파이등의 저사양 컴퓨터에도 노력하지 않고 쉽게 설치할 수 있다.

또한 아래와 같이 많은 스폰서를 보유하고 있다.


설치하기

1. 패키지를 업데이트 하기

팁: 우분투의 기본 미러는 느리기에 카카오 미러로 변경하는것을 추천한다.

sudo apt-get update -y

2. Gitea를 다운로드 하기

이곳에서 최신 버전을 확인한 후 wget을 이용하여 다운로드 한다.

wget -O gitea https://dl.gitea.io/gitea/1.12.2/gitea-1.12.2-linux-amd64
chmod +x gitea

3. Git을 설치하기

Gitea를 실행하기 위해서는 Git이 필요하다.

sudo apt -y install git

성공적으로 설치가 완료되었는지 확인하기 위해, 아래 커맨드를 실행하여 Gitea의 버전을 확인한다.

git --version

4. DB설치하기

Gitea를 실행하기 위해서는 DB가 필요하기에 MariaDB를 설치할것이다.

추가로, Gitea는 다음과 같은 DB를 지원한다.

  • MariaDB/MySQL
  • PostgreSQL
  • SQLite
  • TiDB

DB를 사용하지 않고 SQLite를 이용하려면 5번으로 넘어가면 된다.

 

먼저, 아래의 커맨드를 실행한다.

sudo apt -y install mariadb-server mariadb-client

아래와 같은 커맨드를 사용해 MariaDB를 제어할 수 있다.

sudo systemctl stop mariadb.service
sudo systemctl start mariadb.service
sudo systemctl restart mariadb.service
sudo systemctl status mariadb.service
sudo systemctl enable mariadb.service

기본 MariaDB는 보안이 취약하기에 아래의 커맨드를 실행하여 보안 설정을 한다.

sudo mysql_secure_installation

몇 가지 질문을 할 것 이다.

Enter current password for root (enter for none): 엔터
Set root password? [Y/n]: Y
New password: 설정할비밀번호
Re-enter new password: 설정할비밀번호
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]:  Y
Reload privilege tables now? [Y/n]:  Y

MariaDB를 재시작한다.

sudo systemctl restart mariadb.service

MariaDB에서 유저를 만들고 설정해야하기에 아래 커맨드를 입력하여 MariaDB에 접속한다.

sudo mysql -u root -p

비밀번호를 입력하고 접속에 성공했다면 아래의 커맨드를 입력하여 Gitea라는 DB를 만든다.

CREATE DATABASE gitea;

gitea라는 유저를 만든다.

CREATE USER 'gitea'@'localhost' IDENTIFIED BY '비밀번호';

gitea의 모든 권한을 gitea유저에게 준다.

GRANT ALL ON gitea.* TO 'gitea'@'localhost' IDENTIFIED BY '비밀번호' WITH GRANT OPTION;

저장하고 빠져나온다.

FLUSH PRIVILEGES;
EXIT;

5. Gitea환경을 설정하고 준비하기

먼저, Gitea를 실행할 유저(git)를 만든다.

sudo adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Git Version Control' \
   --group \
   --disabled-password \
   --home /home/git \
   git

아래의 커맨드를 실행하여 권한을 설정한다.

sudo mkdir -p /var/lib/gitea/{custom,data,indexers,public,log}
sudo chown git:git /var/lib/gitea/{data,indexers,log}
sudo chmod 750 /var/lib/gitea/{data,indexers,log}
sudo mkdir /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea

위의 작업이 완료되었다면, systemctl로 손쉽게 Gitea를 관리할 수 있게 하기 위해 아래의 커맨드를 실행하여 Gitea Linux service파일을 만든다.

sudo nano /etc/systemd/system/gitea.service

아래와 같이 입력하고 저장한다.

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
#After=mysqld.service
#After=postgresql.service
#After=memcached.service
#After=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
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
# If you want to bind Gitea to a port below 1024 uncomment
# the two values below
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

systemctl daemon을 리로드하고 gitea를 시작해본다.

sudo systemctl daemon-reload
sudo systemctl enable gitea
sudo systemctl start gitea

정상적으로 실행되었는지 확인하기 위해 아래 커맨드를 실행한다.

sudo systemctl status gitea

6. Gitea설정하기

http://서버아이피:3000 으로 접속한 후 회원가입 버튼을 누른다.

 

아래와 같은 화면이 뜰것인데, 아까 Mysql을 설정하였으니 DB를 Mysql로 바꾼 후 설정했던 DB 계정의 아이디와 비밀번호를 입력한다.

ssh서버 도메인은 아이피 또는 자신이 쓸 도메인을 입력하고, gitea base url은 http://localhost:3000/으로 둔다.(바꾸면 Nginx로 ssl을 설정할 때 복잡해진다.)

SSl 설정

1. Nginx와 certbot을 이용하여 SSL설정하기

아래 커맨드를 실행하여 Nginx를 설치한다.

sudo apt-get install nginx

Nginx를 설정하기 위해 Unlink로 기본 설정파일이랑 연결을 해제한다.

sudo unlink /etc/nginx/sites-enabled/default

아래 커맨드를 실행하여 설정 파일을 만들 경로로 이동한다.

 cd /etc/nginx/sites-available

아래의 커맨드를 입력하여 설정 파일을 만든다.

sudo nano reverse-proxy.conf

아래의 설정 파일내용을 붙여넣는다.

server {
        listen 80;
        listen [::]:80;
        server_name Gitea도메인;

        access_log /var/log/nginx/reverse-access.log;
        error_log /var/log/nginx/reverse-error.log;

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

아래의 커맨드를 입력하여 저장한다.

sudo ln -s /etc/nginx/sites-available/reverse-proxy.conf /etc/nginx/sites-enabled/reverse-proxy.conf

nginx를 재시작하고, 3000번 포트가 아닌 80번포트로 접속하여 접속이 정상적으로 되는지 확인한다.

sudo service nginx restart

접속이 잘 된다면, SSL을 설정할 차례다.

아래의 커맨드들을 입력하여 certbot을 설치한다.

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update

sudo apt-get install certbot python3-certbot-nginx

아래 커맨드를 입력하여 인증서를 발급한다.

sudo certbot --nginx

Nginx를 제대로 설정하였다면, 아래와 같은 화면이 뜨며 SSL이 발급될것이다.

맨 처음 노란색 칸에는 자신의 이메일 주소를 입력하고, 두번째 칸에는 자신이 설정할 때 입력했던 도메인이 있을 것 이다.

3번째 노란색 칸에 1을 입력하면, http로 들어오는 요청을 https로 Redirect하지 않고 2를 입력하면 https로 Redirect할 것 이다.

Nginx를 제대로 설정했다면 소유권을 인증할 필요 없이 자동으로 SSL이 발급될 것 이다.

Nginx를 재시작한다.

sudo systemctl restart nginx

https://도메인/으로 접속해본다.

도메인 옆에 자물쇠 모양이 있다면 성공이다.

728x90
Email: b1@yeonw.me / 여기를 눌러 다른 연락 수단들 알아보기