Files
jaryo/manual-nas-deployment-guide.md
vibsin9322 ce34ca7956 Add comprehensive NAS deployment scripts and guides
- Add deploy-to-nas.sh: automated deployment script with SSH port 2222
- Add manual-nas-deployment-guide.md: step-by-step manual deployment guide
- Include service start/stop scripts and monitoring tools
- Add troubleshooting and auto-start configuration
- Support both automated and manual deployment approaches
2025-08-21 14:28:55 +09:00

7.2 KiB

시놀로지 NAS 수동 배포 가이드

🚀 시놀로지 NAS에서 자료실 서비스 배포하기

사전 준비사항

  1. DSM 패키지 설치 확인

    • Node.js v16+ (패키지 센터에서 설치)
    • Git Server (패키지 센터에서 설치)
    • SSH 서비스 활성화 (제어판 > 터미널 및 SNMP)
  2. 방화벽 설정

    • SSH 포트: 2222 허용
    • 서비스 포트: 3005 허용
    • Gitea 포트: 3000 허용

1단계: SSH 접속 🔗

# Windows에서 NAS 접속
ssh -p 2222 admin@119.64.1.86

# 접속 후 관리자 권한 확인
sudo whoami

2단계: 배포 디렉토리 준비 📁

# 웹 디렉토리로 이동
cd /volume1/web

# 기존 jaryo 폴더가 있다면 백업
if [ -d "jaryo" ]; then
    sudo mv jaryo jaryo_backup_$(date +%Y%m%d_%H%M%S)
fi

# 새 디렉토리 생성
sudo mkdir -p jaryo
sudo chown admin:users jaryo
cd jaryo

3단계: 소스 코드 클론 📥

# Gitea에서 소스 코드 클론
git clone http://119.64.1.86:3000/vibsin9322/jaryo.git .

# 클론 성공 확인
ls -la

4단계: 의존성 설치 📦

# 기존 node_modules 제거 (있다면)
rm -rf node_modules package-lock.json

# npm 의존성 설치
npm install

# 설치 확인
ls -la node_modules

5단계: 데이터베이스 초기화 🗄️

# SQLite 데이터베이스 초기화
npm run init-db

# 데이터베이스 파일 확인
ls -la *.db

6단계: 서비스 시작 스크립트 생성 📝

# 시작 스크립트 생성
cat > start-jaryo.sh << 'EOF'
#!/bin/bash

# 자료실 서비스 시작 스크립트
PROJECT_DIR="/volume1/web/jaryo"
SERVICE_PORT="3005"
PID_FILE="$PROJECT_DIR/jaryo.pid"
LOG_FILE="$PROJECT_DIR/jaryo.log"

# 로그 디렉토리 생성
mkdir -p "$PROJECT_DIR/logs"

# 기존 프로세스 확인 및 종료
if [ -f "$PID_FILE" ]; then
    OLD_PID=$(cat "$PID_FILE")
    if ps -p "$OLD_PID" > /dev/null; then
        echo "기존 서비스 종료 중... (PID: $OLD_PID)"
        kill "$OLD_PID"
        sleep 2
    fi
    rm -f "$PID_FILE"
fi

# 포트 사용 확인
if netstat -tulpn | grep ":$SERVICE_PORT " > /dev/null; then
    echo "⚠️ 포트 $SERVICE_PORT가 이미 사용 중입니다."
    echo "사용 중인 프로세스:"
    netstat -tulpn | grep ":$SERVICE_PORT "
    exit 1
fi

# 서비스 시작
echo "🚀 자료실 서비스 시작 중..."
cd "$PROJECT_DIR"
PORT="$SERVICE_PORT" nohup node server.js > "$LOG_FILE" 2>&1 &
echo $! > "$PID_FILE"

sleep 2

# 시작 확인
if ps -p $(cat "$PID_FILE") > /dev/null; then
    echo "✅ 자료실 서비스 시작 완료!"
    echo "📍 접속 URL: http://119.64.1.86:$SERVICE_PORT"
    echo "📋 PID: $(cat "$PID_FILE")"
    echo "📄 로그: $LOG_FILE"
else
    echo "❌ 서비스 시작 실패"
    echo "로그 확인:"
    tail -20 "$LOG_FILE"
    exit 1
fi
EOF

# 실행 권한 부여
chmod +x start-jaryo.sh

7단계: 중지 스크립트 생성 🛑

# 중지 스크립트 생성
cat > stop-jaryo.sh << 'EOF'
#!/bin/bash

# 자료실 서비스 중지 스크립트
PROJECT_DIR="/volume1/web/jaryo"
PID_FILE="$PROJECT_DIR/jaryo.pid"

if [ -f "$PID_FILE" ]; then
    PID=$(cat "$PID_FILE")
    if ps -p "$PID" > /dev/null; then
        echo "🛑 자료실 서비스 중지 중... (PID: $PID)"
        kill "$PID"
        sleep 2
        
        # 강제 종료 확인
        if ps -p "$PID" > /dev/null; then
            echo "⚡ 강제 종료 중..."
            kill -9 "$PID"
        fi
        
        rm -f "$PID_FILE"
        echo "✅ 자료실 서비스 중지 완료"
    else
        echo "⚠️ 프로세스가 이미 종료됨"
        rm -f "$PID_FILE"
    fi
else
    echo "⚠️ PID 파일이 없습니다. 수동으로 프로세스를 확인하세요."
    echo "실행 중인 Node.js 프로세스:"
    ps aux | grep 'node.*server.js' | grep -v grep
fi
EOF

# 실행 권한 부여
chmod +x stop-jaryo.sh

8단계: 서비스 시작 🎬

# 서비스 시작
./start-jaryo.sh

# 로그 확인 (별도 터미널에서)
tail -f jaryo.log

9단계: 접속 테스트 🧪

브라우저에서 접속:

  • 메인 페이지: http://119.64.1.86:3005
  • 관리자 페이지: http://119.64.1.86:3005/admin

명령줄에서 테스트:

# 서비스 상태 확인
curl -s http://119.64.1.86:3005

# 프로세스 확인
ps aux | grep 'node.*server.js' | grep -v grep

# 포트 확인
netstat -tulpn | grep :3005

🔧 서비스 관리

일상적인 관리 명령어

# 서비스 시작
/volume1/web/jaryo/start-jaryo.sh

# 서비스 중지
/volume1/web/jaryo/stop-jaryo.sh

# 서비스 재시작
/volume1/web/jaryo/stop-jaryo.sh && /volume1/web/jaryo/start-jaryo.sh

# 로그 확인
tail -f /volume1/web/jaryo/jaryo.log

# 실시간 로그 보기
ssh -p 2222 admin@119.64.1.86 'tail -f /volume1/web/jaryo/jaryo.log'

상태 모니터링

# 서비스 상태 스크립트
cat > status-jaryo.sh << 'EOF'
#!/bin/bash

PROJECT_DIR="/volume1/web/jaryo"
PID_FILE="$PROJECT_DIR/jaryo.pid"
LOG_FILE="$PROJECT_DIR/jaryo.log"

echo "=== 자료실 서비스 상태 ==="

if [ -f "$PID_FILE" ]; then
    PID=$(cat "$PID_FILE")
    if ps -p "$PID" > /dev/null; then
        echo "✅ 서비스 실행 중 (PID: $PID)"
        echo "📊 메모리 사용량:"
        ps -o pid,ppid,cmd,%mem,%cpu -p "$PID"
        echo ""
        echo "🌐 포트 상태:"
        netstat -tulpn | grep :3005
    else
        echo "❌ 서비스 중지됨 (PID 파일 존재하지만 프로세스 없음)"
    fi
else
    echo "❌ 서비스 중지됨 (PID 파일 없음)"
fi

echo ""
echo "📄 최근 로그 (최근 5줄):"
if [ -f "$LOG_FILE" ]; then
    tail -5 "$LOG_FILE"
else
    echo "로그 파일이 없습니다."
fi
EOF

chmod +x status-jaryo.sh

🔄 자동 시작 설정 (선택사항)

DSM 작업 스케줄러 사용

  1. DSM 로그인제어판작업 스케줄러
  2. 생성예약된 작업사용자 정의 스크립트
  3. 설정:
    • 작업 이름: Jaryo 자료실 자동 시작
    • 사용자: root
    • 스케줄: 시스템 부팅 시
    • 스크립트: /volume1/web/jaryo/start-jaryo.sh

🚨 문제 해결

일반적인 문제들

1. 포트 충돌

# 포트 사용 확인
netstat -tulpn | grep :3005

# 다른 포트 사용시 (예: 3006)
PORT=3006 node server.js

2. 권한 문제

# 디렉토리 권한 수정
sudo chown -R admin:users /volume1/web/jaryo
chmod -R 755 /volume1/web/jaryo

3. Node.js 버전 문제

# Node.js 버전 확인
node --version

# 최소 요구 버전: v16.0.0

4. 데이터베이스 문제

# 데이터베이스 재초기화
rm -f jaryo.db
npm run init-db

📱 최종 확인

배포 완료 후 다음 URL들이 정상 작동하는지 확인:

🎉 배포 완료!

시놀로지 NAS에서 자료실 서비스가 성공적으로 실행되고 있습니다. 서비스 관리는 위의 스크립트들을 사용하여 쉽게 할 수 있습니다.