Add comprehensive Synology NAS Git server setup guides
- 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
This commit is contained in:
298
alternative-git-servers.md
Normal file
298
alternative-git-servers.md
Normal file
@@ -0,0 +1,298 @@
|
||||
# 시놀로지 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 서버를 구축할 수 있습니다.
|
141
create-git-repo.sh
Normal file
141
create-git-repo.sh
Normal file
@@ -0,0 +1,141 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 시놀로지 NAS Git 저장소 생성 스크립트 (개선 버전)
|
||||
# 사용법: ./create-git-repo.sh [repo-name] [git-dir]
|
||||
|
||||
# 기본 설정
|
||||
DEFAULT_GIT_DIR="/volume1/git"
|
||||
DEFAULT_REPO_NAME="jaryo-file-manager"
|
||||
|
||||
# 매개변수 처리
|
||||
REPO_NAME="${1:-$DEFAULT_REPO_NAME}"
|
||||
GIT_DIR="${2:-$DEFAULT_GIT_DIR}"
|
||||
REPO_PATH="$GIT_DIR/$REPO_NAME.git"
|
||||
|
||||
echo "=== 시놀로지 NAS Git 저장소 생성 ==="
|
||||
echo "저장소 이름: $REPO_NAME"
|
||||
echo "Git 디렉토리: $GIT_DIR"
|
||||
echo "저장소 경로: $REPO_PATH"
|
||||
echo "=========================================="
|
||||
|
||||
# 권한 확인
|
||||
if [ "$EUID" -ne 0 ] && [ "$(whoami)" != "admin" ]; then
|
||||
echo "⚠️ 경고: 관리자 권한이 필요할 수 있습니다."
|
||||
echo "sudo 또는 admin 계정으로 실행하세요."
|
||||
fi
|
||||
|
||||
# Git 설치 확인
|
||||
if ! command -v git &> /dev/null; then
|
||||
echo "❌ Git이 설치되지 않았습니다."
|
||||
echo "패키지 센터에서 Git Server를 설치하거나 다음 명령어를 실행하세요:"
|
||||
echo "sudo apt update && sudo apt install git"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Git 디렉토리 확인 및 생성
|
||||
echo "📁 Git 디렉토리 확인 중..."
|
||||
if [ ! -d "$GIT_DIR" ]; then
|
||||
echo "Git 디렉토리가 없습니다. 생성 중..."
|
||||
mkdir -p "$GIT_DIR" || {
|
||||
echo "❌ Git 디렉토리 생성 실패. 권한을 확인하세요."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 권한 설정
|
||||
if command -v chown &> /dev/null; then
|
||||
chown admin:users "$GIT_DIR" 2>/dev/null || echo "⚠️ chown 권한 부족"
|
||||
fi
|
||||
chmod 755 "$GIT_DIR" 2>/dev/null || echo "⚠️ chmod 권한 부족"
|
||||
echo "✅ Git 디렉토리 생성 완료: $GIT_DIR"
|
||||
else
|
||||
echo "✅ Git 디렉토리 존재 확인: $GIT_DIR"
|
||||
fi
|
||||
|
||||
# 기존 저장소 확인
|
||||
if [ -d "$REPO_PATH" ]; then
|
||||
echo "⚠️ 저장소가 이미 존재합니다: $REPO_PATH"
|
||||
read -p "삭제 후 재생성하시겠습니까? (y/N): " confirm
|
||||
if [[ $confirm =~ ^[Yy]$ ]]; then
|
||||
rm -rf "$REPO_PATH"
|
||||
echo "🗑️ 기존 저장소 삭제 완료"
|
||||
else
|
||||
echo "❌ 작업을 취소합니다."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# 저장소 디렉토리 생성
|
||||
echo "📂 저장소 디렉토리 생성 중..."
|
||||
mkdir -p "$REPO_PATH" || {
|
||||
echo "❌ 저장소 디렉토리 생성 실패"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Git 저장소 초기화
|
||||
echo "🔧 Git 저장소 초기화 중..."
|
||||
cd "$REPO_PATH" || exit 1
|
||||
git init --bare || {
|
||||
echo "❌ Git 저장소 초기화 실패"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 권한 설정
|
||||
echo "🔐 권한 설정 중..."
|
||||
if command -v chown &> /dev/null; then
|
||||
chown -R admin:users "$REPO_PATH" 2>/dev/null || echo "⚠️ chown 권한 부족"
|
||||
fi
|
||||
chmod -R 755 "$REPO_PATH" 2>/dev/null || echo "⚠️ chmod 권한 부족"
|
||||
|
||||
# Git hooks 설정 (선택사항)
|
||||
echo "🪝 Git hooks 설정 중..."
|
||||
cat > "$REPO_PATH/hooks/post-receive" << 'EOF'
|
||||
#!/bin/bash
|
||||
# 자동 배포 hook (선택사항)
|
||||
echo "푸시 완료: $(date)"
|
||||
echo "저장소: $PWD"
|
||||
EOF
|
||||
chmod +x "$REPO_PATH/hooks/post-receive" 2>/dev/null
|
||||
|
||||
# 저장소 설명 파일 생성
|
||||
echo "📄 저장소 설명 파일 생성 중..."
|
||||
cat > "$REPO_PATH/description" << EOF
|
||||
Jaryo File Manager - 시놀로지 NAS 자료실 파일 관리 시스템
|
||||
EOF
|
||||
|
||||
# Git 서비스 확인 및 시작
|
||||
echo "🔄 Git 서비스 상태 확인 중..."
|
||||
NAS_IP=$(hostname -I | awk '{print $1}' | tr -d ' ')
|
||||
|
||||
# 다양한 방법으로 IP 확인
|
||||
if [ -z "$NAS_IP" ]; then
|
||||
NAS_IP=$(ip route get 1 | awk '{print $7; exit}' 2>/dev/null)
|
||||
fi
|
||||
if [ -z "$NAS_IP" ]; then
|
||||
NAS_IP="your-nas-ip"
|
||||
fi
|
||||
|
||||
echo "✅ Git 저장소 생성 완료!"
|
||||
echo "=========================================="
|
||||
echo "📋 저장소 정보:"
|
||||
echo " - 이름: $REPO_NAME"
|
||||
echo " - 경로: $REPO_PATH"
|
||||
echo " - 설명: 자료실 파일 관리 시스템"
|
||||
echo ""
|
||||
echo "🌐 연결 URL:"
|
||||
echo " SSH: ssh://admin@$NAS_IP$REPO_PATH"
|
||||
echo " HTTP: http://$NAS_IP:3000/git/$REPO_NAME.git"
|
||||
echo ""
|
||||
echo "🔗 로컬에서 연결하는 방법:"
|
||||
echo " git remote add nas ssh://admin@$NAS_IP$REPO_PATH"
|
||||
echo " git push nas master"
|
||||
echo ""
|
||||
echo "📝 다음 단계:"
|
||||
echo " 1. 로컬 프로젝트에서 원격 저장소 추가"
|
||||
echo " 2. 첫 번째 push 실행"
|
||||
echo " 3. Git 서비스 동작 확인"
|
||||
echo ""
|
||||
echo "🔧 Git 서비스 수동 시작 (필요시):"
|
||||
echo " sudo systemctl start git-daemon"
|
||||
echo " sudo git daemon --base-path=$GIT_DIR --export-all --reuseaddr &"
|
||||
echo ""
|
||||
echo "📖 자세한 설정은 synology-git-diagnostic.md 파일을 참조하세요."
|
257
nas-git-connection-test.md
Normal file
257
nas-git-connection-test.md
Normal file
@@ -0,0 +1,257 @@
|
||||
# 시놀로지 NAS Git 서버 연결 테스트 가이드
|
||||
|
||||
## 🧪 연결 테스트 단계별 가이드
|
||||
|
||||
### 1단계: 기본 연결 테스트
|
||||
|
||||
#### 1.1 SSH 연결 확인
|
||||
```bash
|
||||
# NAS SSH 연결 테스트
|
||||
ssh admin@your-nas-ip
|
||||
|
||||
# 성공시 NAS 터미널에 접속됨
|
||||
# 실패시 확인사항:
|
||||
# - SSH 서비스 활성화 여부
|
||||
# - 방화벽 설정
|
||||
# - IP 주소 정확성
|
||||
```
|
||||
|
||||
#### 1.2 Git 설치 확인
|
||||
```bash
|
||||
# NAS에서 Git 명령어 확인
|
||||
which git
|
||||
git --version
|
||||
|
||||
# Git 서비스 상태 확인
|
||||
sudo systemctl status git-daemon
|
||||
ps aux | grep git
|
||||
```
|
||||
|
||||
### 2단계: 저장소 생성 및 설정
|
||||
|
||||
#### 2.1 자동 스크립트 실행
|
||||
```bash
|
||||
# 로컬에서 NAS로 스크립트 복사
|
||||
scp create-git-repo.sh admin@your-nas-ip:/tmp/
|
||||
|
||||
# NAS에서 스크립트 실행
|
||||
ssh admin@your-nas-ip
|
||||
cd /tmp
|
||||
chmod +x create-git-repo.sh
|
||||
./create-git-repo.sh jaryo-file-manager
|
||||
```
|
||||
|
||||
#### 2.2 수동 저장소 생성 (스크립트 실패시)
|
||||
```bash
|
||||
# NAS에서 직접 실행
|
||||
ssh admin@your-nas-ip
|
||||
|
||||
# Git 디렉토리 생성
|
||||
sudo mkdir -p /volume1/git
|
||||
sudo chown admin:users /volume1/git
|
||||
cd /volume1/git
|
||||
|
||||
# Bare 저장소 생성
|
||||
mkdir jaryo-file-manager.git
|
||||
cd jaryo-file-manager.git
|
||||
git init --bare
|
||||
sudo chown -R admin:users .
|
||||
```
|
||||
|
||||
### 3단계: 로컬에서 연결 테스트
|
||||
|
||||
#### 3.1 기존 프로젝트에 원격 저장소 추가
|
||||
```bash
|
||||
# 현재 jaryo 프로젝트 디렉토리에서
|
||||
cd /c/Users/COMTREE/claude_code/jaryo
|
||||
|
||||
# NAS Git 원격 저장소 추가
|
||||
git remote add nas ssh://admin@your-nas-ip/volume1/git/jaryo-file-manager.git
|
||||
|
||||
# 원격 저장소 확인
|
||||
git remote -v
|
||||
```
|
||||
|
||||
#### 3.2 첫 번째 Push 테스트
|
||||
```bash
|
||||
# 모든 변경사항 커밋 (필요시)
|
||||
git add .
|
||||
git commit -m "Initial commit for NAS deployment"
|
||||
|
||||
# NAS로 푸시
|
||||
git push nas master
|
||||
|
||||
# 성공시 출력 예시:
|
||||
# Enumerating objects: X, done.
|
||||
# Counting objects: 100% (X/X), done.
|
||||
# Delta compression using up to Y threads
|
||||
# Compressing objects: 100% (X/X), done.
|
||||
# Writing objects: 100% (X/X), X.XX KiB | X.XX MiB/s, done.
|
||||
# Total X (delta X), reused X (delta X), pack-reused 0
|
||||
# To ssh://admin@your-nas-ip/volume1/git/jaryo-file-manager.git
|
||||
# * [new branch] master -> master
|
||||
```
|
||||
|
||||
### 4단계: 클론 테스트
|
||||
|
||||
#### 4.1 다른 디렉토리에서 클론 테스트
|
||||
```bash
|
||||
# 테스트용 디렉토리 생성
|
||||
mkdir /tmp/git-test
|
||||
cd /tmp/git-test
|
||||
|
||||
# NAS에서 클론
|
||||
git clone ssh://admin@your-nas-ip/volume1/git/jaryo-file-manager.git
|
||||
|
||||
# 성공시 프로젝트 파일들이 다운로드됨
|
||||
cd jaryo-file-manager
|
||||
ls -la
|
||||
```
|
||||
|
||||
#### 4.2 HTTP 클론 테스트 (Git HTTP 서버 실행시)
|
||||
```bash
|
||||
# Git HTTP 서버가 실행 중인 경우
|
||||
git clone http://your-nas-ip:3000/jaryo-file-manager.git
|
||||
```
|
||||
|
||||
### 5단계: 웹 인터페이스 테스트
|
||||
|
||||
#### 5.1 GitWeb 접속 테스트
|
||||
- 브라우저에서 `http://your-nas-ip/git` 접속
|
||||
- 또는 `http://your-nas-ip:3000` 접속
|
||||
- 저장소 목록에서 `jaryo-file-manager` 확인
|
||||
|
||||
#### 5.2 Git HTTP 서버 상태 확인
|
||||
```bash
|
||||
# NAS에서 Git HTTP 서버 실행 확인
|
||||
sudo netstat -tulpn | grep :3000
|
||||
ps aux | grep git-daemon
|
||||
```
|
||||
|
||||
## 🚨 문제 해결
|
||||
|
||||
### 연결 실패 시 체크리스트
|
||||
|
||||
#### ❌ "Connection refused" 오류
|
||||
```bash
|
||||
# 1. SSH 서비스 확인
|
||||
ssh -v admin@your-nas-ip
|
||||
|
||||
# 2. 포트 확인 (기본: 22)
|
||||
ssh -p 22 admin@your-nas-ip
|
||||
|
||||
# 3. 방화벽 확인
|
||||
# DSM > 제어판 > 보안 > 방화벽
|
||||
```
|
||||
|
||||
#### ❌ "Permission denied" 오류
|
||||
```bash
|
||||
# 1. 사용자 권한 확인
|
||||
# DSM > 제어판 > 사용자 및 그룹 > admin > 애플리케이션
|
||||
|
||||
# 2. SSH 키 설정 (선택사항)
|
||||
ssh-keygen -t rsa
|
||||
ssh-copy-id admin@your-nas-ip
|
||||
```
|
||||
|
||||
#### ❌ "Repository not found" 오류
|
||||
```bash
|
||||
# 1. 저장소 경로 확인
|
||||
ssh admin@your-nas-ip
|
||||
ls -la /volume1/git/
|
||||
ls -la /volume1/git/jaryo-file-manager.git/
|
||||
|
||||
# 2. 권한 확인
|
||||
sudo chown -R admin:users /volume1/git/jaryo-file-manager.git
|
||||
chmod -R 755 /volume1/git/jaryo-file-manager.git
|
||||
```
|
||||
|
||||
#### ❌ Git 명령어 없음
|
||||
```bash
|
||||
# Git 설치 확인
|
||||
which git
|
||||
|
||||
# 패키지 센터에서 Git Server 설치
|
||||
# 또는 수동 설치:
|
||||
sudo apt update
|
||||
sudo apt install git
|
||||
```
|
||||
|
||||
### 네트워크 설정 문제
|
||||
|
||||
#### 내부 네트워크 접속 실패
|
||||
```bash
|
||||
# IP 주소 확인
|
||||
ping your-nas-ip
|
||||
nslookup your-nas-ip
|
||||
|
||||
# 포트 스캔
|
||||
nmap -p 22,3000 your-nas-ip
|
||||
```
|
||||
|
||||
#### 외부 네트워크 접속 설정
|
||||
```bash
|
||||
# 라우터 포트 포워딩 설정
|
||||
# 22 (SSH) -> NAS_IP:22
|
||||
# 3000 (Git HTTP) -> NAS_IP:3000
|
||||
|
||||
# 동적 DNS 설정 (선택사항)
|
||||
# your-domain.dyndns.org -> your-public-ip
|
||||
```
|
||||
|
||||
## 📊 연결 성공 확인
|
||||
|
||||
### ✅ 성공 지표들
|
||||
|
||||
1. **SSH 연결**: `ssh admin@your-nas-ip` 성공
|
||||
2. **저장소 존재**: `/volume1/git/jaryo-file-manager.git` 확인
|
||||
3. **Push 성공**: `git push nas master` 완료
|
||||
4. **Clone 성공**: 다른 위치에서 클론 가능
|
||||
5. **웹 접속**: 브라우저에서 Git 저장소 확인
|
||||
|
||||
### 📈 성능 테스트
|
||||
|
||||
```bash
|
||||
# 대용량 파일 Push 테스트
|
||||
dd if=/dev/zero of=test-large-file.bin bs=1M count=10
|
||||
git add test-large-file.bin
|
||||
git commit -m "Large file test"
|
||||
time git push nas master
|
||||
|
||||
# 클론 속도 테스트
|
||||
time git clone ssh://admin@your-nas-ip/volume1/git/jaryo-file-manager.git test-clone
|
||||
```
|
||||
|
||||
## 🔧 고급 설정
|
||||
|
||||
### Git Hooks 활용
|
||||
```bash
|
||||
# NAS에서 post-receive hook 설정
|
||||
ssh admin@your-nas-ip
|
||||
cd /volume1/git/jaryo-file-manager.git/hooks
|
||||
|
||||
# 자동 배포 hook
|
||||
cat > post-receive << 'EOF'
|
||||
#!/bin/bash
|
||||
echo "코드 푸시 완료: $(date)"
|
||||
# 자동 배포 로직 추가 가능
|
||||
# cd /volume1/web/jaryo && git pull
|
||||
EOF
|
||||
|
||||
chmod +x post-receive
|
||||
```
|
||||
|
||||
### 백업 설정
|
||||
```bash
|
||||
# 저장소 백업 스크립트
|
||||
#!/bin/bash
|
||||
BACKUP_DIR="/volume1/backup/git"
|
||||
REPO_DIR="/volume1/git"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
tar -czf "$BACKUP_DIR/git-repos-$DATE.tar.gz" -C "$REPO_DIR" .
|
||||
echo "백업 완료: $BACKUP_DIR/git-repos-$DATE.tar.gz"
|
||||
```
|
||||
|
||||
이 가이드를 따라하면 시놀로지 NAS Git 서버와의 연결을 성공적으로 테스트하고 설정할 수 있습니다.
|
203
synology-git-diagnostic.md
Normal file
203
synology-git-diagnostic.md
Normal file
@@ -0,0 +1,203 @@
|
||||
# 시놀로지 NAS Git Server 진단 및 해결 가이드
|
||||
|
||||
## 🔍 1단계: Git Server 패키지 상태 확인
|
||||
|
||||
### 1.1 DSM 패키지 센터 점검
|
||||
1. **DSM 로그인** → **패키지 센터**
|
||||
2. **설치됨** 탭에서 "Git Server" 검색
|
||||
3. 상태 확인:
|
||||
- ✅ **실행 중**: 정상 동작
|
||||
- ⚠️ **중지됨**: 서비스 시작 필요
|
||||
- ❌ **미설치**: 패키지 설치 필요
|
||||
|
||||
### 1.2 Git Server 서비스 시작
|
||||
```bash
|
||||
# SSH로 NAS 접속 후
|
||||
sudo systemctl status git-daemon
|
||||
sudo systemctl start git-daemon
|
||||
sudo systemctl enable git-daemon
|
||||
```
|
||||
|
||||
## 🛠️ 2단계: 기본 설정 확인
|
||||
|
||||
### 2.1 SSH 서비스 활성화
|
||||
1. **DSM 제어판** → **터미널 및 SNMP**
|
||||
2. **SSH 서비스 활성화** 체크
|
||||
3. 포트 번호 확인 (기본: 22)
|
||||
|
||||
### 2.2 사용자 권한 설정
|
||||
1. **DSM 제어판** → **사용자 및 그룹**
|
||||
2. 사용자 선택 → **편집** → **애플리케이션**
|
||||
3. **Git Server** 권한 부여
|
||||
|
||||
### 2.3 방화벽 설정
|
||||
1. **DSM 제어판** → **보안** → **방화벽**
|
||||
2. 다음 포트 허용:
|
||||
- SSH: 22
|
||||
- Git HTTP: 3000
|
||||
- Git HTTPS: 3001
|
||||
|
||||
## 📁 3단계: Git 디렉토리 구조 확인
|
||||
|
||||
### 3.1 기본 경로 확인
|
||||
```bash
|
||||
# SSH 접속 후 확인
|
||||
ls -la /volume1/
|
||||
ls -la /volume1/git/
|
||||
|
||||
# Git 설정 디렉토리 확인
|
||||
ls -la /usr/local/git/
|
||||
```
|
||||
|
||||
### 3.2 권한 문제 해결
|
||||
```bash
|
||||
# Git 디렉토리 생성
|
||||
sudo mkdir -p /volume1/git
|
||||
sudo chown -R admin:users /volume1/git
|
||||
sudo chmod 755 /volume1/git
|
||||
|
||||
# Git Server 사용자 추가 (필요시)
|
||||
sudo adduser git
|
||||
sudo usermod -a -G users git
|
||||
```
|
||||
|
||||
## 🔧 4단계: 레포지토리 수동 생성
|
||||
|
||||
### 4.1 Bare 레포지토리 생성
|
||||
```bash
|
||||
# SSH로 NAS 접속
|
||||
ssh admin@your-nas-ip
|
||||
|
||||
# 프로젝트 디렉토리 생성
|
||||
cd /volume1/git
|
||||
sudo mkdir jaryo-file-manager.git
|
||||
cd jaryo-file-manager.git
|
||||
|
||||
# Bare 레포지토리 초기화
|
||||
sudo git init --bare
|
||||
sudo chown -R admin:users .
|
||||
```
|
||||
|
||||
### 4.2 웹 인터페이스 활성화
|
||||
```bash
|
||||
# Git HTTP 서버 시작
|
||||
cd /volume1/git
|
||||
sudo git daemon --reuseaddr --base-path=. --export-all --verbose --enable=receive-pack
|
||||
```
|
||||
|
||||
## 🌐 5단계: 웹 인터페이스 설정
|
||||
|
||||
### 5.1 Git Web 설정
|
||||
```bash
|
||||
# CGit 또는 GitWeb 설치
|
||||
sudo apt update
|
||||
sudo apt install gitweb
|
||||
|
||||
# Apache 설정 (Web Station 사용시)
|
||||
sudo ln -s /usr/share/gitweb /volume1/web/git
|
||||
```
|
||||
|
||||
### 5.2 브라우저에서 접속
|
||||
- URL: `http://your-nas-ip/git`
|
||||
- 또는: `http://your-nas-ip:3000`
|
||||
|
||||
## 🚨 6단계: 문제 해결
|
||||
|
||||
### 6.1 "레포지토리 설정이 안보임" 해결
|
||||
**원인 1: Git Server 패키지 미설치**
|
||||
```bash
|
||||
# 패키지 센터에서 Git Server 재설치
|
||||
# 또는 수동 Git 설치
|
||||
sudo apt update
|
||||
sudo apt install git git-daemon-run
|
||||
```
|
||||
|
||||
**원인 2: 서비스 시작 실패**
|
||||
```bash
|
||||
# 서비스 상태 확인
|
||||
sudo systemctl status git-daemon
|
||||
sudo journalctl -u git-daemon
|
||||
|
||||
# 수동 재시작
|
||||
sudo systemctl restart git-daemon
|
||||
```
|
||||
|
||||
**원인 3: 권한 문제**
|
||||
```bash
|
||||
# 권한 재설정
|
||||
sudo chown -R www-data:www-data /volume1/git
|
||||
sudo chmod -R 755 /volume1/git
|
||||
```
|
||||
|
||||
### 6.2 포트 충돌 해결
|
||||
```bash
|
||||
# 포트 사용 확인
|
||||
sudo netstat -tulpn | grep :3000
|
||||
sudo netstat -tulpn | grep :22
|
||||
|
||||
# 다른 포트로 변경
|
||||
sudo git daemon --port=3001 --reuseaddr --base-path=/volume1/git --export-all
|
||||
```
|
||||
|
||||
## 📋 7단계: 연결 테스트
|
||||
|
||||
### 7.1 로컬에서 연결 테스트
|
||||
```bash
|
||||
# SSH 연결 테스트
|
||||
ssh admin@your-nas-ip
|
||||
|
||||
# Git 클론 테스트
|
||||
git clone ssh://admin@your-nas-ip/volume1/git/jaryo-file-manager.git
|
||||
|
||||
# 또는 HTTP 연결
|
||||
git clone http://your-nas-ip:3000/jaryo-file-manager.git
|
||||
```
|
||||
|
||||
### 7.2 기존 프로젝트 푸시
|
||||
```bash
|
||||
# 기존 프로젝트에서
|
||||
git remote add nas ssh://admin@your-nas-ip/volume1/git/jaryo-file-manager.git
|
||||
git push nas master
|
||||
```
|
||||
|
||||
## 🔄 8단계: 자동화 설정
|
||||
|
||||
### 8.1 systemd 서비스 생성
|
||||
```bash
|
||||
# /etc/systemd/system/git-daemon.service
|
||||
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=/volume1/git --export-all --verbose --enable=receive-pack
|
||||
Restart=always
|
||||
User=git
|
||||
Group=git
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
sudo systemctl enable git-daemon
|
||||
sudo systemctl start git-daemon
|
||||
```
|
||||
|
||||
## 📊 요약
|
||||
|
||||
레포지토리 설정이 보이지 않는 주요 원인:
|
||||
1. ❌ Git Server 패키지 미설치/미실행
|
||||
2. ❌ SSH 서비스 비활성화
|
||||
3. ❌ 사용자 권한 부족
|
||||
4. ❌ 방화벽 차단
|
||||
5. ❌ Git 디렉토리 부재
|
||||
|
||||
해결 순서:
|
||||
1. 패키지 설치/재시작
|
||||
2. SSH 및 권한 설정
|
||||
3. 수동 레포지토리 생성
|
||||
4. 연결 테스트
|
||||
5. 자동화 설정
|
||||
|
||||
이 가이드를 따라하면 시놀로지 NAS에서 Git 레포지토리를 성공적으로 설정할 수 있습니다.
|
Reference in New Issue
Block a user