설치 준비

환경 준비

Git이 서버에 설치되어 있는지 확인합니다. 그렇지 않은 경우 먼저 설치하십시오. Gitea에는 Git 버전 >= 2.0이 필요합니다.

git --version

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,log}  
sudo chown -R git:git /var/lib/gitea/  
sudo chmod -R 750 /var/lib/gitea/  
sudo mkdir /etc/gitea  
sudo chown root:git /etc/gitea  
sudo chmod 770 /etc/gitea
 
#웹 설치 관리자가 구성 파일을 쓸 수 있도록 사용자 git에 대한 쓰기 권한이 임시로 설정된 /etc/gitea입니다. 설치가 완료된 후에는 사용 권한을 읽기 전용으로 설정하는 것이 좋습니다:
sudo chmod 750 /etc/gitea  
sudo chmod 640 /etc/gitea/app.ini

Gitea의 작업 디렉토리 구성

export GITEA_WORK_DIR=/var/lib/gitea/
echo 'export GITEA_WORK_DIR=/var/lib/gitea/' >> ~/.bashrc

설치

Gitea 바이너리를 설치 및 전역 위치에 복사

wget -O gitea https://dl.gitea.com/gitea/latest/gitea-linux-amd64
#wget -O gitea https://dl.gitea.io/gitea/1.22.3/gitea-1.22.3-linux-amd64
sudo chmod +x gitea
sudo mv gitea /usr/local/bin

한줄명령

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,log}  &&sudo chown -R git:git /var/lib/gitea/  &&sudo chmod -R 750 /var/lib/gitea/  &&sudo mkdir /etc/gitea  &&sudo chown root:git /etc/gitea  &&sudo chmod 770 /etc/gitea&&echo 'export GITEA_WORK_DIR=/var/lib/gitea/' >> ~/.bashrc&&export GITEA_WORK_DIR=/var/lib/gitea/
 
sudo wget -O gitea https://dl.gitea.io/gitea/1.22.3/gitea-1.22.3-linux-amd64&&sudo chmod +x gitea&&sudo mv gitea /usr/local/bin

데이터베이스 세팅(필요시)

PostgreSQL 참조

# 데이터베이스 유저 추가
sudo -i -u postgres
createuser --interactive
 
Enter name of role to add: git
Shall the new role be a superuser? (y/n)
 
# 데이터베이스 유저 디폴트 데이터베이스 추가
createdb git
 
# 신규 추가된 DB유저 비밀번호 초기화
psql
postgres=# ALTER USER git PASSWORD 'myPassword';
 
# 접속 테스트
su git
psql
git=# \conninfo
git=# \q
 
# 슈퍼유저 계정으로 데이터 변경 후 public 스키마에 전체 권한 부여
su postgres
psql -d git
GRANT all ON SCHEMA public TO git;

서비스 등록

systemd 사용

샘플 gitea.service를 에 복사한 다음 즐겨 사용하는 편집기로 파일을 편집. sudo vi /etc/systemd/system/gitea.service

[Unit]
Description=Gitea (Git with a cup of tea)
After=network.target
###
# Don't forget to add the database service dependencies
###
#
#Wants=mysql.service
#After=mysql.service
#
#Wants=mariadb.service
#After=mariadb.service
#
#Wants=postgresql.service
#After=postgresql.service
#
#Wants=memcached.service
#After=memcached.service
#
#Wants=redis.service
#After=redis.service
#
###
# If using socket activation for main http/s
###
#
#After=gitea.main.socket
#Requires=gitea.main.socket
#
###
# (You can also provide gitea an http fallback and/or ssh socket too)
#
# An example of /etc/systemd/system/gitea.main.socket
###
##
## [Unit]
## Description=Gitea Web Socket
## PartOf=gitea.service
##
## [Socket]
## Service=gitea.service
## ListenStream=<some_port>
## NoDelay=true
##
## [Install]
## WantedBy=sockets.target
##
###
 
[Service]
# Uncomment the next line if you have repos with lots of files and get a HTTP 500 error because of that
# LimitNOFILE=524288:524288
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
# If using Unix socket: tells systemd to create the /run/gitea folder, which will contain the gitea.sock file
# (manually creating /run/gitea doesn't work, because it would not persist across reboots)
#RuntimeDirectory=gitea
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
# If you install Git to directory prefix other than default PATH (which happens
# for example if you install other versions of Git side-to-side with
# distribution version), uncomment below line and add that prefix to PATH
# Don't forget to place git-lfs binary on the PATH below if you want to enable
# Git LFS support
#Environment=PATH=/path/to/git/bin:/bin:/sbin:/usr/bin:/usr/sbin
# If you want to bind Gitea to a port below 1024, uncomment
# the two values below, or use socket activation to pass Gitea its ports as above
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE
###
# In some cases, when using CapabilityBoundingSet and AmbientCapabilities option, you may want to
# set the following value to false to allow capabilities to be applied on gitea process. The following
# value if set to true sandboxes gitea service and prevent any processes from running with privileges
# in the host user namespace.
###
#PrivateUsers=false
###
 
[Install]
WantedBy=multi-user.target

이 호스트에서 사용하도록 설정해야 하는 서비스(예: MySQL)의 주석 처리를 제거합니다.

사용자, 홈 디렉토리 및 기타 필요한 시작 값을 변경합니다. 를 변경합니다. PORT 또는 디폴트 포트가 사용되는 경우 -p 플래그를 제거하십시오.

부팅 시 Gitea를 활성화하고 시작합니다.

sudo systemctl enable gitea
sudo systemctl start gitea

systemd 버전 220 이상을 사용하는 경우 다음을 통해 Gitea를 활성화하고 즉시 시작할 수 있습니다.

sudo systemctl enable gitea --now

Nginx 설치 및 설정

Nginx 설치

sudo apt install -y nginx

SSL 임시 인증 처리

sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
sudo gitea cert --host git.lhk.o-r.kr #임시 키

Nginx 설정파일 작성

sudo vi /etc/nginx/sites-available/gitea
server {
	listen 80;
	server_name git.lhk.o-r.kr;
	return 301 https://$server_name$request_uri;
}

server {
	listen 443 ssl http2;
	server_name git.lhk.o-r.kr;
	
	ssl_certificate /etc/nginx/ssl/cert.pem;
	ssl_certificate_key /etc/nginx/ssl/key.pem;
	
	location / { 
		proxy_pass http://localhost:3000;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
	}	
}

Nginx 설정 적용 및 테스트 및 재시작

sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

여기서 재부팅 후 최초 설치 한 다음 작업

SSL 인증 및 재인증 자동화 처리

# Nginx 플러그인
sudo apt install -y python3-certbot-nginx
 
# --nginx 옵션을 이용해 certbot이 nginx 리로드를 자동으로 수행하게 설정
sudo certbot --nginx -d git.lhk.o-r.kr

Gitea 재설정

app.ini 파일 수정

sudo vi /etc/gitea/app.ini
[server]
PROTOCOL = http
HTTP_ADDR  = 127.0.0.1
SSH_DOMAIN = git.lhk.o-r.kr
DOMAIN = git.lhk.o-r.kr
HTTP_PORT = 3000
ROOT_URL = https://git.lhk.o-r.kr/
APP_DATA_PATH = /var/lib/gitea/data
DISABLE_SSH = false
SSH_PORT = 22
OFFLINE_MODE = false
 
[service] 
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = true
REGISTER_MANUAL_CONFIRM = true
EMAIL_DOMAIN_ALLOWLIST = saehanjsoft.co.kr
 
[i18n]
LANGS = ko-KR
NAMES = 한국어
 
[time]
DEFAULT_UI_LOCATION = Asia/Seoul
 
[webhook]
ALLOWED_HOST_LIST = *

서비스 재시작

sudo systemctl restart gitea

업데이트

sudo wget -O gitea https://dl.gitea.io/gitea/[버전]/gitea-[버전]-linux-amd64&&sudo chmod +x gitea&&sudo mv gitea /usr/local/bin&&sudo systemctl restart gitea.service

업데이트(권한문제로 인한 오동작으로 미사용함)

sudo apt install -y python3-pip
#pip 미동작시 READEME.venv 읽고 맨 아래 경로의 EXTERNALLY-MANAGED 삭제
#sudo rm /usr/lib/python3.12/EXTERNALLY-MANAGED
sudo pip3 install gitea-auto-update
 
cd ~ && mkdir gitea-auto-update
sudo vi /home/git/gitea-auto-update/settings.ini
[Gitea]
site=https://git.lhk.o-r.kr/api/v1/version
apiUrl=https://api.github.com/repos/go-gitea/gitea/releases/latest
system=linux-amd64
file=/usr/local/bin/gitea
tmpDir=/tmp/
buildFromSource=
sourceDir=
logFile=update.log
## sudo 권한 필수
sudo usermod -aG sudo git
gitea-auto-update --settings=/home/git/gitea-auto-update/settings.ini