#!/bin/bash # ========================================== # Crawl Manager 서버 배포 스크립트 (Ubuntu) # 사용법: chmod +x start-server.sh && ./start-server.sh # ========================================== # OS 확인 OS_INFO=$(grep '^ID=' /etc/os-release) if [[ "$OS_INFO" != *"ubuntu"* ]]; then echo "This script runs on Ubuntu only." exit 1 fi echo "" echo "==========================================" echo " Crawl Manager 서버 배포" echo "==========================================" echo "" # 환경 변수 파일 확인 if [ -f .env.production ]; then echo "[OK] .env.production 로드 중..." set -a source .env.production set +a else echo "[ERROR] .env.production 파일이 없습니다!" exit 1 fi export NODE_ENV=production # 이전 컨테이너 정리 echo "" echo "[1/5] 기존 컨테이너 정리..." docker compose down 2>/dev/null || docker-compose down 2>/dev/null echo "[2/5] Docker 시스템 정리..." docker system prune -af docker image prune -af # Git 설정 - 인증정보 URL에 포함시켜 비밀번호 입력 생략 # @는 %40으로 인코딩 GIT_USER="chpark%40wace.me" GIT_PASS="1313Qkrckd%21%21" GIT_REPO="39.117.244.52:3000/chpark/admin_st.git" GIT_URL="http://${GIT_USER}:${GIT_PASS}@${GIT_REPO}" echo "" echo "[3/5] Git 최신 소스 받기..." # remote URL을 인증정보 포함 URL로 설정 git remote set-url origin "$GIT_URL" 2>/dev/null # 실행 권한 자동 부여 (git clone 후 권한 날아가는 문제 방지) chmod +x "$0" 2>/dev/null git reset --hard if ! git fetch origin; then echo "[ERROR] git fetch 실패" exit 1 fi if ! git reset --hard origin/main; then echo "[ERROR] git reset 실패" exit 1 fi echo "[OK] 최신 소스 적용 완료" git log --oneline -3 # 데이터 디렉토리 생성 (현재 위치 기준) echo "" echo "[4/5] 데이터 디렉토리 준비..." SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" mkdir -p "${SCRIPT_DIR}/data/postgres" mkdir -p "${SCRIPT_DIR}/data/app" # Docker 빌드 & 실행 echo "" echo "[5/5] Docker 빌드 및 실행..." docker compose up --build --force-recreate -d # 상태 확인 echo "" echo "컨테이너 상태 확인 중..." sleep 5 docker compose ps echo "" docker compose logs --tail=30 crawl-manager echo "" echo "==========================================" echo " 배포 완료!" echo " 관리자: https://admin.startover.co.kr/admin" echo " DB 외부접속: $(hostname -I | awk '{print $1}'):11137" echo "=========================================="