99 lines
4.2 KiB
Bash
99 lines
4.2 KiB
Bash
#!/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 <<EOF
|
|
[Unit]
|
|
Description=ExperionCrawler OPC UA Web Service
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=${SERVICE_USER}
|
|
WorkingDirectory=${APP_DIR}
|
|
ExecStart=/usr/bin/dotnet ${APP_DIR}/ExperionCrawler.dll
|
|
Restart=always
|
|
RestartSec=10
|
|
KillSignal=SIGINT
|
|
SyslogIdentifier=${APP_NAME}
|
|
Environment=ASPNETCORE_ENVIRONMENT=Production
|
|
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
|
|
|
|
# 리소스 제한
|
|
LimitNOFILE=65536
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
systemctl daemon-reload
|
|
systemctl enable ${APP_NAME}
|
|
systemctl restart ${APP_NAME}
|
|
echo " 서비스 등록 및 시작 완료"
|
|
|
|
# ── 5. 방화벽 설정 (ufw 사용 시) ────────────────────────────────
|
|
if command -v ufw &> /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 "╚══════════════════════════════════════════════════════════╝"
|