CASTAD-v0.1/deploy.sh

176 lines
7.2 KiB
Bash
Executable File

#!/bin/bash
#
# CaStAD 배포 스크립트
# 로컬에서 castad1.ktenterprise.net으로 배포
#
# ═══════════════════════════════════════════════════════════════
# 설정
# ═══════════════════════════════════════════════════════════════
SERVER="castad1.ktenterprise.net"
SERVER_USER="castad" # 서버 사용자
REMOTE_PATH="/home/${SERVER_USER}/castad" # 서버 경로
LOCAL_PATH="$(cd "$(dirname "$0")" && pwd)"
# 색상
GREEN='\033[0;32m'
CYAN='\033[0;36m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BOLD='\033[1m'
NC='\033[0m'
log() { echo -e "${GREEN}[Deploy]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; }
info() { echo -e "${CYAN}[INFO]${NC} $1"; }
# ═══════════════════════════════════════════════════════════════
# 빌드
# ═══════════════════════════════════════════════════════════════
do_build() {
log "프론트엔드 빌드 중..."
cd "$LOCAL_PATH"
npm run build
if [ $? -ne 0 ]; then
error "빌드 실패!"
exit 1
fi
info "빌드 완료"
}
# ═══════════════════════════════════════════════════════════════
# 서버로 파일 전송
# ═══════════════════════════════════════════════════════════════
do_upload() {
log "서버로 파일 전송 중..."
# 제외할 파일/폴더
EXCLUDES="--exclude=node_modules --exclude=.git --exclude=*.log --exclude=pids --exclude=logs --exclude=server/database.sqlite --exclude=server/downloads --exclude=server/temp --exclude=.env"
# rsync로 동기화
rsync -avz --progress $EXCLUDES \
"$LOCAL_PATH/" \
"${SERVER_USER}@${SERVER}:${REMOTE_PATH}/"
if [ $? -ne 0 ]; then
error "파일 전송 실패!"
exit 1
fi
info "파일 전송 완료"
}
# ═══════════════════════════════════════════════════════════════
# 서버에서 설치 및 재시작
# ═══════════════════════════════════════════════════════════════
do_install() {
log "서버에서 의존성 설치 중..."
ssh "${SERVER_USER}@${SERVER}" << 'REMOTE_SCRIPT'
cd /home/castad/castad
# npm 의존성 설치
echo "=== 프론트엔드 의존성 설치 ==="
npm install --legacy-peer-deps --silent
echo "=== 백엔드 의존성 설치 ==="
cd server && npm install --legacy-peer-deps --silent && cd ..
echo "=== 완료 ==="
REMOTE_SCRIPT
if [ $? -ne 0 ]; then
error "서버 설치 실패!"
exit 1
fi
info "서버 설치 완료"
}
do_restart() {
log "서버 재시작 중..."
ssh "${SERVER_USER}@${SERVER}" << 'REMOTE_SCRIPT'
cd /home/castad/castad
./startserver.sh restart
REMOTE_SCRIPT
info "서버 재시작 완료"
}
# ═══════════════════════════════════════════════════════════════
# 전체 배포
# ═══════════════════════════════════════════════════════════════
do_full_deploy() {
echo ""
echo -e "${BOLD}${CYAN}╔════════════════════════════════════════════════════════╗${NC}"
echo -e "${BOLD}${CYAN}║ CaStAD 배포 시작 ║${NC}"
echo -e "${BOLD}${CYAN}║ Target: ${SERVER}${NC}"
echo -e "${BOLD}${CYAN}╚════════════════════════════════════════════════════════╝${NC}"
echo ""
do_build
do_upload
do_install
do_restart
echo ""
echo -e "${GREEN}╔════════════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ 배포 완료! ║${NC}"
echo -e "${GREEN}║ URL: https://${SERVER}${NC}"
echo -e "${GREEN}╚════════════════════════════════════════════════════════╝${NC}"
echo ""
}
# ═══════════════════════════════════════════════════════════════
# 도움말
# ═══════════════════════════════════════════════════════════════
show_help() {
echo ""
echo -e "${BOLD}CaStAD 배포 스크립트${NC}"
echo ""
echo -e "${CYAN}사용법:${NC}"
echo " ./deploy.sh <command>"
echo ""
echo -e "${CYAN}명령어:${NC}"
echo " deploy - 전체 배포 (빌드 → 업로드 → 설치 → 재시작)"
echo " build - 로컬 빌드만"
echo " upload - 파일 업로드만"
echo " install - 서버 의존성 설치"
echo " restart - 서버 재시작만"
echo ""
echo -e "${CYAN}설정:${NC}"
echo " 서버: ${SERVER}"
echo " 사용자: ${SERVER_USER}"
echo " 경로: ${REMOTE_PATH}"
echo ""
echo -e "${YELLOW}사전 준비:${NC}"
echo " 1. SSH 키 설정: ssh-copy-id ${SERVER_USER}@${SERVER}"
echo " 2. 서버에 .env 파일 생성"
echo " 3. Nginx 설정 (nginx.castad.conf 참고)"
echo " 4. SSL 인증서 설정 (Let's Encrypt)"
echo ""
}
# ═══════════════════════════════════════════════════════════════
# 메인
# ═══════════════════════════════════════════════════════════════
case "$1" in
deploy)
do_full_deploy
;;
build)
do_build
;;
upload)
do_upload
;;
install)
do_install
;;
restart)
do_restart
;;
*)
show_help
;;
esac