#!/bin/bash # ============================================================================== # BizVibe Multi-Domain Deployment & Setup Script # ============================================================================== # 이 스크립트는 멀티 도메인 Nginx 환경에 BizVibe 서비스를 안전하게 배포합니다. # 기존 서비스와의 포트 충돌을 방지하며 Nginx 설정을 자동으로 생성합니다. # ============================================================================== # 색상 정의 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' CYAN='\033[0;36m' NC='\033[0m' # No Color # ------------------------------------------------------------------------------ # 1. 포트 자동 할당 (충돌 방지) # ------------------------------------------------------------------------------ echo -e "${CYAN}[1] 사용 가능한 포트 확인 중...${NC}" # 사용 중인 포트 목록 가져오기 USED_PORTS=$(netstat -tuln | grep LISTEN | awk '{print $4}' | awk -F: '{print $NF}' | sort -n | uniq) # 추천 포트 범위 (3000번대 -> 4000번대 순으로 검색) # nginx_analysis.txt에 따르면 3000번은 whitedonkey가 사용 중일 수 있으므로 3001부터 시작 START_PORT=3001 END_PORT=4000 TARGET_PORT="" for port in $(seq $START_PORT $END_PORT); do if ! echo "$USED_PORTS" | grep -q "^$port$"; then TARGET_PORT=$port break fi done if [ -z "$TARGET_PORT" ]; then echo -e "${RED}❌ 사용 가능한 포트를 찾을 수 없습니다 (3001-4000). 수동으로 설정해주세요.${NC}" exit 1 fi echo -e "${GREEN}✅ BizVibe 백엔드 포트로 ${TARGET_PORT}번을 할당했습니다.${NC}" # ------------------------------------------------------------------------------ # 2. 필수 패키지 설치 # ------------------------------------------------------------------------------ echo -e "${CYAN}[2] 시스템 패키지 업데이트 및 필수 라이브러리 설치...${NC}" # Node.js, FFmpeg, 한글 폰트 등 필수 패키지 설치 if [ -x "$(command -v apt-get)" ]; then sudo apt-get update sudo apt-get install -y ffmpeg fonts-noto-cjk nginx certbot python3-certbot-nginx \ ca-certificates fonts-liberation libasound2t64 libatk-bridge2.0-0 libatk1.0-0 \ libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 \ libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 \ libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 \ libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release \ wget xdg-utils else echo -e "${YELLOW}⚠️ apt-get을 찾을 수 없습니다. 패키지 설치를 건너뜁니다.${NC}" fi # ------------------------------------------------------------------------------ # 3. 프로젝트 빌드 및 설정 # ------------------------------------------------------------------------------ echo -e "${CYAN}[3] 프로젝트 의존성 설치 및 빌드...${NC}" # 프론트엔드 의존성 npm install # 백엔드 의존성 cd server npm install --legacy-peer-deps cd .. # 포트 설정 적용 (vite.config.ts 및 server/index.js 수정 필요 시 환경 변수로 처리 권장) # 여기서는 .env 파일 생성/수정으로 처리 if [ ! -f .env ]; then echo "VITE_GEMINI_API_KEY=YOUR_GEMINI_KEY" > .env echo "SUNO_API_KEY=YOUR_SUNO_KEY" >> .env echo -e "${YELLOW}⚠️ .env 파일이 생성되었습니다. API 키를 입력해야 합니다.${NC}" fi # 프론트엔드 URL 설정 (배포 시 도메인 주소로 설정) # 이 부분은 아래 도메인 입력 후에 업데이트하도록 이동하거나, 여기서 미리 placeholder로 설정 if ! grep -q "FRONTEND_URL=" .env; then echo "FRONTEND_URL=http://localhost:3000" >> .env fi # 백엔드 포트 환경변수 추가 if grep -q "PORT=" .env; then sed -i "s/^PORT=.*/PORT=$TARGET_PORT/" .env else echo "PORT=$TARGET_PORT" >> .env fi # 프론트엔드 빌드 (Vite가 .env의 설정을 참조함) npm run build # ------------------------------------------------------------------------------ # 4. PM2 프로세스 관리 (무중단 배포) # ------------------------------------------------------------------------------ echo -e "${CYAN}[4] PM2로 서비스 실행...${NC}" # PM2 설치 확인 if ! command -v pm2 &> /dev/null; then npm install -g pm2 fi # 기존 프로세스 정리 (이름 기준) pm2 delete bizvibe-backend 2>/dev/null # 백엔드 실행 (서버 사이드 렌더링 포함) # 정적 파일(프론트엔드 dist)도 백엔드(Express)에서 서빙하도록 server/index.js가 수정되어야 함. # 현재 server/index.js는 API만 제공하므로, Nginx가 프론트엔드를 서빙하고 API는 백엔드로 프록시하는 구조가 적합. cd server pm2 start index.js --name "bizvibe-backend" -- --port $TARGET_PORT cd .. pm2 save echo -e "${GREEN}✅ PM2 서비스 시작 완료 (Port: $TARGET_PORT)${NC}" # ------------------------------------------------------------------------------ # 5. Nginx 가상호스트 설정 (자동 생성) # ------------------------------------------------------------------------------ echo -e "${CYAN}[5] Nginx 설정 파일 생성...${NC}" # 사용자에게 도메인 입력 받기 read -p "배포할 도메인 주소를 입력하세요 (예: bizvibe.ktenterprise.net): " DOMAIN_NAME if [ -z "$DOMAIN_NAME" ]; then echo -e "${RED}❌ 도메인이 입력되지 않아 Nginx 설정을 건너뜁니다.${NC}" else # .env 파일에 FRONTEND_URL 업데이트 (https://도메인) # 기존 값이 있으면 교체, 없으면 추가 if grep -q "FRONTEND_URL=" .env; then sed -i "s|^FRONTEND_URL=.*|FRONTEND_URL=https://$DOMAIN_NAME|" .env else echo "FRONTEND_URL=https://$DOMAIN_NAME" >> .env fi echo -e "${GREEN}✅ .env 파일에 FRONTEND_URL=https://$DOMAIN_NAME 설정 완료${NC}" # PM2 재시작하여 변경된 환경변수 적용 pm2 restart bizvibe-backend NGINX_CONF="/etc/nginx/sites-available/$DOMAIN_NAME" PROJECT_ROOT=$(pwd) # Nginx 설정 파일 작성 sudo tee $NGINX_CONF > /dev/null <