요즘 몇가지 백엔드 프로그램들을 라즈베리파이에서 돌리려고 하고 있는데 소스 배포가 문제였습니다. 배포에 필요한 파일을 서버로 복사해서 실행 시키는 것도 한 두번이지 계속은 어려울 거 같고, CI/CD를 전체적으로 제대로 구현하는 것은 귀찮고 해서 다음의 두 가지 방향을 정했습니다.
- 내부 Git 서버 운영
- GitHub을 이용해도 되지만 여러모로 번거롭고, 또 암호나 API 키 같은 민감 정보가 있는 소스는 매번 private 리파지토리로 관리해야하고 하는 신경쓸 부분들이 있어서 그냥 아무 신경 쓸 거 없이 내부에서 막 쓸 수 있는 Git 서버를 하나 운영하기로 결정했습니다.
- Docker Resitry 서버 운영
- 1번은 소스로 받아서 써야할 때 쓰고, 그 외에는 주로 Docker 이미지를 만들어 배포하기로 결정했습니다. 그런데, Docker 이미지를 Registry 서버 없이 매번 복사하는 것이 번거롭고, 외부 Docker Registry 서버들은 무료일 경우 제약 사항이나 외부로의 속도 문제도 있어서 Docker Registry 서버 역시도 하나 설정하여 운영하기로 했습니다.
이 글은 위의 두 가지 중에 첫 번째인 Git 서버 설치 및 운영 방법에 대한 글입니다.
0. 준비물
- Linux 서버
- 집에서 놀고 있는 라즈베리파이 3에 설치하기로 결정했습니다.
1. Git Server 선택
검색을 좀 해 봤는데, Gitea라는 것이 있어서 이걸로 선택했습니다.
사이트에 보면 유료로 클라우드 방식을 제공하는게 주요 사업인거 같지만, Gitea 자체는 오픈소스로서 무료로 사용할 수 있습니다.
https://about.gitea.com/products/gitea/
2. 설치 과정
기본적으로 Git 설치돼 있어야 합니다. git --version을 실행하여 버전이 2.0 이상인지 확인합니다.
1. Database 준비
기본적으로 MySQL/MariaDB와 PostgreSQL 지원합니다. 여기서는 MySQL(MariaDB)을 사용할 것입니다 .
(참고: 라즈베리파이에 MySQL 설치)
mysql -u root -p
CREATE DATABASE gitea CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_bin';
CREATE USER 'gitea'@'localhost' IDENTIFIED BY '암호';
GRANT ALL PRIVILEGES ON gitea.* TO 'gitea';
FLUSH PRIVILEGES;
2. 설치
실행 파일 다운로드 및 실행권한 부여
wget https://dl.gitea.com/gitea/1.22.1/gitea-1.22.1-linux-arm64?_gl=1*11i5lye*_gcl_au*NjczOTIzNjI3LjE3Mjg4MzQ0MTA. -O gitea
chmod +x gitea
gitea를 실행한 사용자 git 생성
sudo adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git \
git
필요한 디렉토리 및 권한 설정
mkdir -p /var/lib/gitea/{custom,data,log}
chown -R git:git /var/lib/gitea/
chmod -R 750 /var/lib/gitea/
mkdir /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea
내용 없는 설정 파일 생성
sudo touch /etc/gitea/app.ini
sudo chmod 660 /etc/gitea/app.ini
sudo chown git:git /etc/gitea/app.ini
실행 파일 적절한 위치로 복사
cp gitea /usr/local/bin/gitea
3. 실행
systemd로 실행 관리를 할 수 있도록 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
저장한 후에 다음과 같이 시스템 시작시 자동 실행을 설정하고 Gitea를 실행합니다.
sudo systemctl enable gitea
sudo systemctl start gitea
4. 초기 설정
Gitea를 실행한 후에 해당 라즈베리파이 ip 주소의 3000번 포트로 브라우저에서 접속하면 다음과 같은 초기 설정 화면을 볼 수 있습니다.
데이터베이스 암호를 위에서 설정한대로 입력하고, 관리자 계정 설정을 눌러 관리자 계정을 입력한 후 "Gitea 설치하기" 버튼을 클릭합니다. 관리자 계정 입력시 이메일 주소를 꼭 입력해야 합니다.
찻잔 화면이 잠깐 나왔다가 설정이 완료되면 다음과 같이 화면이 전환됩니다.
5. 기타
설치 가이드에서는 설정이 끝난 후에 다음과 같이 권한 설정을 변경해 주는 것을 권고하고 있습니다.
sudo chmod 750 /etc/gitea
sudo chmod 640 /etc/gitea/app.ini
6. 사용
테스트하기 위해 새로운 repository를 하나 만들어 본 화면입니다.
더 사용해 봐야겠지만 기본 항목들은 GitHub에 밀리지 않게 다 들어 있는 거 같습니다. 만족스럽네요. :-)
참고
'생활코딩' 카테고리의 다른 글
라즈베리파이 - Docker Registry 서버 설치 (0) | 2024.10.22 |
---|---|
라즈베리파이 - nginx - ModSecurity 설치 (3) | 2024.10.20 |
라즈베리파이 JDK 설치 (0) | 2024.10.14 |
라즈베리파이 MySQL 설치 (2) | 2024.09.30 |
라즈베리파이를 사용한 음성 전달 웹앱 만들기 (1) | 2024.02.23 |