ExperionCrawler First Commit

This commit is contained in:
windpacer
2026-04-14 04:02:43 +00:00
commit 323aec34af
158 changed files with 539535 additions and 0 deletions

98
deploy.sh Normal file
View File

@@ -0,0 +1,98 @@
#!/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 "╚══════════════════════════════════════════════════════════╝"