176 lines
7.2 KiB
Bash
Executable File
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
|