#!/bin/bash # ═══════════════════════════════════════════════════════════════ # ExperionCrawler — Ubuntu 서버 배포 스크립트 # 사용법: sudo bash deploy.sh # ═══════════════════════════════════════════════════════════════ set -e APP_NAME="experioncrawler" APP_DIR="/opt/ExperionCrawler" SERVICE_USER="www-data" DOTNET_MIN="8.0" echo "" echo "╔══════════════════════════════════════╗" echo "║ ExperionCrawler 배포 스크립트 ║" echo "╚══════════════════════════════════════╝" echo "" # ── 1. .NET 8 설치 확인 ───────────────────────────────────────── echo "▶ .NET SDK 확인..." if ! command -v dotnet &> /dev/null; then echo " .NET이 설치되어 있지 않습니다. 설치를 시작합니다..." wget -q https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb \ -O packages-microsoft-prod.deb dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb apt-get update -q apt-get install -y dotnet-sdk-8.0 else echo " .NET $(dotnet --version) 확인됨" fi # ── 2. 빌드 ───────────────────────────────────────────────────── echo "▶ 빌드 중..." cd "$(dirname "$0")/src/Web" dotnet publish -c Release -o "$APP_DIR" --nologo -q echo " 빌드 완료 → $APP_DIR" # ── 3. 필수 디렉토리 및 권한 ───────────────────────────────────── echo "▶ 디렉토리 설정..." mkdir -p "$APP_DIR/pki/own/certs" mkdir -p "$APP_DIR/pki/trusted/certs" mkdir -p "$APP_DIR/pki/issuers/certs" mkdir -p "$APP_DIR/pki/rejected/certs" mkdir -p "$APP_DIR/data/csv" chown -R "$SERVICE_USER":"$SERVICE_USER" "$APP_DIR" chmod -R 750 "$APP_DIR" echo " 권한 설정 완료 (소유자: $SERVICE_USER)" # ── 4. systemd 서비스 등록 ─────────────────────────────────────── echo "▶ systemd 서비스 등록..." cat > /etc/systemd/system/${APP_NAME}.service < /dev/null; then echo "▶ 방화벽 포트 5000 개방..." ufw allow 5000/tcp comment 'ExperionCrawler' fi # ── 6. 상태 확인 ───────────────────────────────────────────────── echo "" echo "▶ 서비스 상태:" systemctl status ${APP_NAME} --no-pager -l | head -20 echo "" echo "╔══════════════════════════════════════════════════════════╗" echo "║ 배포 완료! ║" echo "║ 접속 주소: http://$(hostname -I | awk '{print $1}'):5000 ║" echo "╚══════════════════════════════════════════════════════════╝"