- Add synology-git-diagnostic.md: complete troubleshooting guide - Enhance create-git-repo.sh: improved error handling and user feedback - Add nas-git-connection-test.md: step-by-step connection testing - Add alternative-git-servers.md: Docker-based Git server alternatives - Cover Gitea, GitLab, Forgejo, and manual Git server installation - Include troubleshooting and performance optimization tips
298 lines
7.1 KiB
Markdown
298 lines
7.1 KiB
Markdown
# 시놀로지 NAS 대안 Git 서버 설치 방안
|
|
|
|
## 🚀 개요
|
|
|
|
시놀로지 Git Server 패키지가 작동하지 않을 때 사용할 수 있는 대안적인 Git 서버 설치 방법들을 제공합니다.
|
|
|
|
## 🐳 방법 1: Docker를 이용한 Gitea 설치 (권장)
|
|
|
|
### 1.1 장점
|
|
- 웹 기반 Git 관리 인터페이스
|
|
- GitHub와 유사한 사용자 경험
|
|
- 이슈 관리, 위키, 프로젝트 관리 기능
|
|
- 가벼움 (Go 언어 기반)
|
|
|
|
### 1.2 설치 과정
|
|
|
|
#### Docker 설치 확인
|
|
```bash
|
|
# DSM > 패키지 센터 > Docker 설치
|
|
# 또는 SSH에서 확인
|
|
docker --version
|
|
```
|
|
|
|
#### Gitea 컨테이너 실행
|
|
```bash
|
|
# SSH로 NAS 접속
|
|
ssh admin@your-nas-ip
|
|
|
|
# Gitea 데이터 디렉토리 생성
|
|
sudo mkdir -p /volume1/docker/gitea
|
|
|
|
# Gitea 컨테이너 실행
|
|
docker run -d \
|
|
--name gitea \
|
|
-p 3000:3000 \
|
|
-p 222:22 \
|
|
-v /volume1/docker/gitea:/data \
|
|
-e USER_UID=1000 \
|
|
-e USER_GID=1000 \
|
|
gitea/gitea:latest
|
|
```
|
|
|
|
#### 웹 설정
|
|
1. 브라우저에서 `http://your-nas-ip:3000` 접속
|
|
2. 초기 설정 완료:
|
|
- 데이터베이스: SQLite3 (기본)
|
|
- 관리자 계정 생성
|
|
- 저장소 루트 경로: `/data/git/repositories`
|
|
|
|
### 1.3 저장소 생성 및 연결
|
|
```bash
|
|
# 웹 인터페이스에서 새 저장소 'jaryo-file-manager' 생성
|
|
# 로컬에서 연결
|
|
git remote add gitea http://your-nas-ip:3000/username/jaryo-file-manager.git
|
|
git push gitea master
|
|
```
|
|
|
|
## 📦 방법 2: 순수 Git 서버 설치
|
|
|
|
### 2.1 수동 Git 설치
|
|
```bash
|
|
# SSH로 NAS 접속
|
|
ssh admin@your-nas-ip
|
|
|
|
# 패키지 관리자 업데이트
|
|
sudo apt update
|
|
|
|
# Git 설치
|
|
sudo apt install git git-daemon-run
|
|
|
|
# 버전 확인
|
|
git --version
|
|
```
|
|
|
|
### 2.2 Git 서비스 설정
|
|
```bash
|
|
# Git 사용자 생성
|
|
sudo adduser git
|
|
sudo su git
|
|
cd /home/git
|
|
|
|
# SSH 키 디렉토리 생성
|
|
mkdir .ssh && chmod 700 .ssh
|
|
touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
|
|
|
|
# Git 저장소 디렉토리 생성
|
|
mkdir /home/git/repositories
|
|
```
|
|
|
|
### 2.3 systemd 서비스 설정
|
|
```bash
|
|
# Git daemon 서비스 파일 생성
|
|
sudo tee /etc/systemd/system/git-daemon.service << EOF
|
|
[Unit]
|
|
Description=Git Daemon
|
|
After=network.target
|
|
|
|
[Service]
|
|
ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/home/git/repositories --export-all --verbose --enable=receive-pack
|
|
Restart=always
|
|
User=git
|
|
Group=git
|
|
StandardOutput=journal
|
|
StandardError=journal
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
# 서비스 활성화
|
|
sudo systemctl enable git-daemon
|
|
sudo systemctl start git-daemon
|
|
sudo systemctl status git-daemon
|
|
```
|
|
|
|
### 2.4 저장소 생성
|
|
```bash
|
|
# git 사용자로 전환
|
|
sudo su git
|
|
cd /home/git/repositories
|
|
|
|
# bare 저장소 생성
|
|
git init --bare jaryo-file-manager.git
|
|
```
|
|
|
|
## 🌐 방법 3: GitLab CE Docker 설치
|
|
|
|
### 3.1 특징
|
|
- 기업급 Git 관리 플랫폼
|
|
- CI/CD 파이프라인 지원
|
|
- 이슈 추적, 위키, 프로젝트 관리
|
|
- 더 많은 리소스 필요
|
|
|
|
### 3.2 설치 과정
|
|
```bash
|
|
# GitLab 데이터 디렉토리 생성
|
|
sudo mkdir -p /volume1/docker/gitlab/{config,logs,data}
|
|
|
|
# GitLab 컨테이너 실행 (최소 4GB RAM 권장)
|
|
docker run -d \
|
|
--hostname your-nas-ip \
|
|
--name gitlab \
|
|
-p 8080:80 \
|
|
-p 8443:443 \
|
|
-p 8022:22 \
|
|
-v /volume1/docker/gitlab/config:/etc/gitlab \
|
|
-v /volume1/docker/gitlab/logs:/var/log/gitlab \
|
|
-v /volume1/docker/gitlab/data:/var/opt/gitlab \
|
|
gitlab/gitlab-ce:latest
|
|
```
|
|
|
|
### 3.3 초기 설정
|
|
```bash
|
|
# 컨테이너 시작 대기 (2-3분)
|
|
docker logs -f gitlab
|
|
|
|
# 브라우저에서 http://your-nas-ip:8080 접속
|
|
# 초기 root 비밀번호 확인
|
|
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
|
|
```
|
|
|
|
## 🔧 방법 4: Forgejo (Gitea Fork) 설치
|
|
|
|
### 4.1 특징
|
|
- Gitea의 커뮤니티 중심 포크
|
|
- 더 빠른 개발 주기
|
|
- 오픈소스 중심
|
|
|
|
### 4.2 설치 과정
|
|
```bash
|
|
# Forgejo 데이터 디렉토리 생성
|
|
sudo mkdir -p /volume1/docker/forgejo
|
|
|
|
# Forgejo 컨테이너 실행
|
|
docker run -d \
|
|
--name forgejo \
|
|
-p 3000:3000 \
|
|
-p 222:22 \
|
|
-v /volume1/docker/forgejo:/data \
|
|
-e USER_UID=1000 \
|
|
-e USER_GID=1000 \
|
|
codeberg.org/forgejo/forgejo:latest
|
|
```
|
|
|
|
## 📱 방법 5: 간단한 HTTP Git 서버
|
|
|
|
### 5.1 Python 기반 간단 서버
|
|
```bash
|
|
# Python Git HTTP 서버 스크립트 생성
|
|
cat > /volume1/web/git-http-server.py << 'EOF'
|
|
#!/usr/bin/env python3
|
|
import os
|
|
import http.server
|
|
import socketserver
|
|
from subprocess import Popen, PIPE
|
|
|
|
class GitHTTPHandler(http.server.SimpleHTTPRequestHandler):
|
|
def do_GET(self):
|
|
if self.path.endswith('.git/info/refs'):
|
|
# Git 정보 요청 처리
|
|
self.send_response(200)
|
|
self.send_header('Content-type', 'text/plain')
|
|
self.end_headers()
|
|
|
|
repo_path = self.path.split('/')[1]
|
|
git_dir = f'/volume1/git/{repo_path}'
|
|
|
|
if os.path.exists(git_dir):
|
|
proc = Popen(['git', 'upload-pack', '--advertise-refs', git_dir],
|
|
stdout=PIPE, stderr=PIPE)
|
|
output, _ = proc.communicate()
|
|
self.wfile.write(output)
|
|
else:
|
|
self.wfile.write(b'Repository not found')
|
|
else:
|
|
super().do_GET()
|
|
|
|
PORT = 8000
|
|
with socketserver.TCPServer(("", PORT), GitHTTPHandler) as httpd:
|
|
print(f"Git HTTP Server running on port {PORT}")
|
|
httpd.serve_forever()
|
|
EOF
|
|
|
|
# 실행 권한 부여
|
|
chmod +x /volume1/web/git-http-server.py
|
|
|
|
# 서버 실행
|
|
python3 /volume1/web/git-http-server.py
|
|
```
|
|
|
|
## 🔀 방법별 비교표
|
|
|
|
| 방법 | 난이도 | 리소스 사용량 | 기능 | 웹 UI | 권장도 |
|
|
|------|--------|---------------|------|-------|--------|
|
|
| Gitea | 쉬움 | 낮음 | 풍부 | ✅ | ⭐⭐⭐⭐⭐ |
|
|
| 순수 Git | 보통 | 매우 낮음 | 기본 | ❌ | ⭐⭐⭐ |
|
|
| GitLab CE | 어려움 | 높음 | 매우 풍부 | ✅ | ⭐⭐⭐⭐ |
|
|
| Forgejo | 쉬움 | 낮음 | 풍부 | ✅ | ⭐⭐⭐⭐ |
|
|
| Python 서버 | 보통 | 낮음 | 제한적 | ❌ | ⭐⭐ |
|
|
|
|
## 🚀 빠른 시작 가이드 (Gitea 권장)
|
|
|
|
### 1단계: Docker 설치 확인
|
|
```bash
|
|
# DSM 패키지 센터에서 Docker 설치
|
|
```
|
|
|
|
### 2단계: Gitea 설치
|
|
```bash
|
|
ssh admin@your-nas-ip
|
|
sudo mkdir -p /volume1/docker/gitea
|
|
docker run -d --name gitea -p 3000:3000 -p 222:22 -v /volume1/docker/gitea:/data gitea/gitea:latest
|
|
```
|
|
|
|
### 3단계: 웹 설정
|
|
- `http://your-nas-ip:3000` 접속
|
|
- 초기 설정 완료
|
|
- 관리자 계정 생성
|
|
|
|
### 4단계: 저장소 생성 및 연결
|
|
```bash
|
|
# 웹에서 새 저장소 생성
|
|
# 로컬에서 연결
|
|
cd /c/Users/COMTREE/claude_code/jaryo
|
|
git remote add gitea http://your-nas-ip:3000/admin/jaryo-file-manager.git
|
|
git push gitea master
|
|
```
|
|
|
|
## 🛠️ 문제 해결
|
|
|
|
### Docker 관련 문제
|
|
```bash
|
|
# 컨테이너 상태 확인
|
|
docker ps -a
|
|
|
|
# 로그 확인
|
|
docker logs gitea
|
|
|
|
# 컨테이너 재시작
|
|
docker restart gitea
|
|
```
|
|
|
|
### 포트 충돌 문제
|
|
```bash
|
|
# 사용 중인 포트 확인
|
|
sudo netstat -tulpn | grep :3000
|
|
|
|
# 다른 포트 사용
|
|
docker run -d --name gitea -p 3001:3000 -p 223:22 -v /volume1/docker/gitea:/data gitea/gitea:latest
|
|
```
|
|
|
|
### 권한 문제
|
|
```bash
|
|
# 데이터 디렉토리 권한 수정
|
|
sudo chown -R 1000:1000 /volume1/docker/gitea
|
|
```
|
|
|
|
이 가이드를 통해 시놀로지 NAS Git Server 패키지 문제를 우회하여 안정적인 Git 서버를 구축할 수 있습니다. |