- 37개 파일 IP → zioinfo.co.kr 치환 (소스/매뉴얼/설정/하네스) - Manager DrConsole/NetworkConsole/CsapConsole 빌드 + /var/www/manager/ 배포 - 테스트: Manager HTTP 200, ITSM 신규 API 7개 전체 200 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
190 lines
5.1 KiB
Markdown
190 lines
5.1 KiB
Markdown
---
|
|
name: manager-deploy
|
|
description: >
|
|
GUARDiA Manager 자체를 서버에 배포하고 CI/CD 파이프라인을 구성하는 스킬.
|
|
Nginx 설정, systemd 서비스 등록, Gitea 저장소 생성, Jenkinsfile 작성을 포함한다.
|
|
트리거: Manager 배포 설정, Nginx 구성, systemd 서비스 등록, CI/CD 파이프라인,
|
|
Gitea 저장소 생성, Jenkinsfile 작성 요청 시.
|
|
---
|
|
|
|
# GUARDiA Manager 배포 스킬
|
|
|
|
## 포트 계획
|
|
|
|
| 서비스 | 포트 | 설명 |
|
|
|--------|------|------|
|
|
| GUARDiA ITSM | 8001 | 기존 (변경 금지) |
|
|
| Spring Boot (홈페이지) | 8082 | 기존 (변경 금지) |
|
|
| Jenkins | 8080 | 기존 (변경 금지) |
|
|
| **Manager Frontend** | **8090** | Nginx 신규 |
|
|
| **Manager Backend** | **8002** | FastAPI 신규 |
|
|
|
|
## Nginx 설정 (/etc/nginx/sites-available/guardia-manager)
|
|
|
|
```nginx
|
|
server {
|
|
listen 8090;
|
|
server_name _;
|
|
|
|
# React SPA
|
|
root /var/www/manager;
|
|
index index.html;
|
|
|
|
location / {
|
|
try_files $uri $uri/ /index.html;
|
|
add_header Cache-Control no-cache;
|
|
}
|
|
|
|
# Manager Backend API 프록시
|
|
location /api/ {
|
|
proxy_pass http://127.0.0.1:8002;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_read_timeout 60s;
|
|
}
|
|
|
|
# GUARDiA ITSM API 프록시 (CORS 우회)
|
|
location /guardia-api/ {
|
|
proxy_pass http://127.0.0.1:8001/;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
}
|
|
|
|
# 정적 파일 캐시
|
|
location ~* \.(js|css|png|jpg|ico|svg|woff2)$ {
|
|
expires 7d;
|
|
add_header Cache-Control "public, immutable";
|
|
}
|
|
|
|
gzip on;
|
|
gzip_types text/plain text/css application/javascript application/json;
|
|
}
|
|
```
|
|
|
|
## systemd 서비스 (Manager Backend)
|
|
|
|
```ini
|
|
# /etc/systemd/system/guardia-manager.service
|
|
[Unit]
|
|
Description=GUARDiA Manager API Backend
|
|
After=network.target guardia.service
|
|
|
|
[Service]
|
|
User=root
|
|
WorkingDirectory=/opt/manager/backend
|
|
EnvironmentFile=-/opt/manager/backend/.env
|
|
ExecStart=/opt/manager/venv/bin/uvicorn main:app --host 127.0.0.1 --port 8002 --workers 1
|
|
Restart=on-failure
|
|
RestartSec=5
|
|
StandardOutput=append:/var/log/guardia-manager/backend.log
|
|
StandardError=append:/var/log/guardia-manager/backend.log
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
## 배포 디렉터리 구조 (서버)
|
|
|
|
```
|
|
/opt/manager/
|
|
├── backend/ ← FastAPI 소스
|
|
│ ├── main.py
|
|
│ ├── .env
|
|
│ └── routers/
|
|
└── venv/ ← Python 가상환경
|
|
|
|
/var/www/manager/ ← React 빌드 결과물
|
|
/var/log/guardia-manager/
|
|
└── backend.log
|
|
```
|
|
|
|
## Jenkinsfile
|
|
|
|
```groovy
|
|
pipeline {
|
|
agent any
|
|
environment {
|
|
DEPLOY_FRONTEND = '/var/www/manager'
|
|
DEPLOY_BACKEND = '/opt/manager/backend'
|
|
VENV = '/opt/manager/venv'
|
|
}
|
|
stages {
|
|
stage('Checkout') {
|
|
steps { checkout scm }
|
|
}
|
|
stage('Frontend Build') {
|
|
steps {
|
|
dir('frontend') {
|
|
sh 'npm ci --prefer-offline 2>/dev/null || npm install'
|
|
sh 'npm run build'
|
|
sh "cp -r dist/. ${DEPLOY_FRONTEND}/"
|
|
}
|
|
}
|
|
}
|
|
stage('Backend Deploy') {
|
|
steps {
|
|
sh """
|
|
cp -r backend/. ${DEPLOY_BACKEND}/
|
|
${VENV}/bin/pip install -r ${DEPLOY_BACKEND}/requirements.txt -q
|
|
systemctl restart guardia-manager
|
|
sleep 3
|
|
systemctl is-active guardia-manager
|
|
"""
|
|
}
|
|
}
|
|
stage('Health Check') {
|
|
steps {
|
|
sh 'curl -sf http://localhost:8002/health | grep ok'
|
|
sh 'curl -sf http://localhost:8090/ -o /dev/null -w "HTTP %{http_code}"'
|
|
}
|
|
}
|
|
}
|
|
post {
|
|
success { echo "Manager 배포 완료" }
|
|
failure { echo "배포 실패 — 로그 확인" }
|
|
}
|
|
}
|
|
```
|
|
|
|
## 서버 초기 설정 스크립트
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# deploy/init_server.sh — 최초 1회 실행
|
|
|
|
# 디렉터리 생성
|
|
mkdir -p /opt/manager/backend /var/www/manager /var/log/guardia-manager
|
|
|
|
# Python 가상환경
|
|
python3 -m venv /opt/manager/venv
|
|
/opt/manager/venv/bin/pip install -r /opt/manager/backend/requirements.txt -q
|
|
|
|
# Nginx 설정
|
|
ln -sf /etc/nginx/sites-available/guardia-manager /etc/nginx/sites-enabled/
|
|
nginx -t && systemctl reload nginx
|
|
|
|
# systemd 등록
|
|
systemctl daemon-reload
|
|
systemctl enable guardia-manager
|
|
systemctl start guardia-manager
|
|
|
|
# UFW 포트 오픈
|
|
ufw allow 8090/tcp comment 'GUARDiA Manager'
|
|
ufw allow 8002/tcp comment 'Manager Backend'
|
|
|
|
echo "Manager 초기 설정 완료"
|
|
echo "접속: http://zioinfo.co.kr:8090"
|
|
```
|
|
|
|
## Gitea 저장소 생성
|
|
|
|
```bash
|
|
# 서버에서 실행
|
|
curl -s -X POST http://localhost:3000/api/v1/user/repos \
|
|
-H "Content-Type: application/json" \
|
|
-u "zio:Zio@Admin2026!" \
|
|
-d '{"name":"guardia-manager","description":"GUARDiA 관리자 시스템","private":false,"auto_init":true}'
|
|
```
|