diff --git a/README.md b/README.md index 3e33d52..d6944bd 100644 --- a/README.md +++ b/README.md @@ -1,98 +1,224 @@ # iDRAC Info Manager -Flask 기반 iDRAC 서버 관리 및 자동화 도구 +Dell iDRAC 서버 관리 및 펌웨어 업데이트 자동화를 위한 Flask 기반 웹 애플리케이션 ## 📋 목차 - [소개](#소개) - [주요 기능](#주요-기능) - [기술 스택](#기술-스택) +- [시스템 아키텍처](#시스템-아키텍처) - [시작하기](#시작하기) - [프로젝트 구조](#프로젝트-구조) - [사용법](#사용법) +- [고급 기능](#고급-기능) +- [Git 사용법](#git-사용법) +- [문제 해결](#문제-해결) - [라이선스](#라이선스) ## 📖 소개 -iDRAC Info Manager는 Dell iDRAC 서버 관리를 자동화하고 효율적으로 처리하기 위한 웹 기반 도구입니다. IP 주소 처리, 스크립트 실행, 파일 관리 등 서버 관리에 필요한 다양한 기능을 제공합니다. +**iDRAC Info Manager**는 Dell iDRAC(Integrated Dell Remote Access Controller) 서버를 효율적으로 관리하고 펌웨어 업데이트를 자동화하기 위한 웹 기반 도구입니다. + +이 애플리케이션은 다음과 같은 시나리오에서 유용합니다: +- 여러 대의 Dell 서버를 동시에 관리해야 할 때 +- 펌웨어 카탈로그를 주기적으로 업데이트하고 관리해야 할 때 +- iDRAC 설정을 XML 파일로 관리하고 배포해야 할 때 +- 서버 하드웨어 정보(MAC, GUID, GPU 등)를 수집하고 관리해야 할 때 +- Telegram을 통해 서버 관리 알림을 받고 싶을 때 ## ✨ 주요 기능 -### IP 처리 및 스크립트 실행 -- 다중 IP 주소에 대한 일괄 스크립트 실행 -- 실시간 처리 상태 모니터링 (SocketIO) -- 처리 결과 자동 저장 및 관리 +### 🖥️ iDRAC 서버 관리 +- **Redfish API 통합**: Dell Redfish API를 통한 서버 정보 조회 및 제어 +- **다중 IP 처리**: 여러 서버에 대한 일괄 작업 실행 +- **실시간 모니터링**: SocketIO를 통한 실시간 작업 진행 상황 확인 +- **작업 큐 관리**: 백그라운드 작업 스케줄링 및 상태 추적 -### 파일 관리 -- 업로드된 파일 자동 백업 -- 실시간 파일 모니터링 (Watchdog) -- 파일 내용 미리보기 및 다운로드 -- 안전한 파일 삭제 기능 +### 📦 펌웨어 관리 +- **Dell 카탈로그 동기화**: Dell 공식 펌웨어 카탈로그 자동 다운로드 및 파싱 +- **DRM 통합**: Dell Repository Manager(DRM) XML 파일 지원 +- **펌웨어 버전 추적**: 서버별 펌웨어 버전 비교 및 업데이트 필요 여부 확인 +- **카탈로그 관리**: 여러 펌웨어 카탈로그 버전 관리 및 전환 -### 데이터 변환 도구 -- **MAC to Excel**: MAC 주소 목록을 Excel 파일로 변환 -- **GUID to Excel**: GUID 데이터를 Excel 파일로 변환 -- 서버 리스트 관리 (덮어쓰기 옵션 지원) +### 📄 XML 설정 관리 +- **XML 파일 업로드**: iDRAC 설정 XML 파일 업로드 및 저장 +- **설정 편집**: 웹 인터페이스를 통한 XML 설정 편집 +- **SCP 파일 관리**: Server Configuration Profile 파일 관리 +- **자동 백업**: 파일 변경 시 자동 백업 생성 -### 사용자 관리 -- Flask-Login 기반 인증 시스템 -- 사용자별 권한 관리 +### 📊 데이터 수집 및 변환 +- **MAC 주소 수집**: 서버 네트워크 인터페이스 MAC 주소 수집 +- **GUID 추출**: 서버 GUID 정보 추출 및 관리 +- **GPU 시리얼 수집**: GPU 하드웨어 시리얼 번호 수집 +- **Excel 변환**: 수집된 데이터를 Excel 파일로 자동 변환 +- **서버 리스트 관리**: 서버 목록 관리 및 매핑 -### 알림 기능 -- Telegram Bot 연동 (선택 사항) -- 처리 완료 알림 +### 👥 사용자 관리 +- **인증 시스템**: Flask-Login 기반 보안 인증 +- **사용자 승인 워크플로우**: 신규 사용자 등록 시 관리자 승인 필요 +- **Telegram 승인**: Telegram 봇을 통한 사용자 승인/거부 +- **비밀번호 암호화**: Argon2 해싱을 통한 안전한 비밀번호 저장 +- **세션 관리**: 자동 로그아웃 및 세션 타임아웃 + +### 📱 Telegram 봇 통합 +- **실시간 알림**: 로그인, 회원가입, 작업 완료 알림 +- **인터랙티브 승인**: 인라인 버튼을 통한 사용자 승인/거부 +- **봇 폴링 서비스**: 백그라운드 스레드에서 실행되는 봇 서비스 +- **중복 실행 방지**: 봇 인스턴스 중복 실행 방지 메커니즘 + +### 🔍 실시간 파일 모니터링 +- **Watchdog 통합**: 파일 시스템 변경 실시간 감지 +- **자동 UI 업데이트**: 파일 변경 시 웹 인터페이스 자동 갱신 +- **이벤트 로깅**: 파일 생성, 수정, 삭제 이벤트 로깅 ## 🛠 기술 스택 -### Backend -- **Framework**: Flask 3.0.0 -- **Database**: SQLAlchemy (Flask-SQLAlchemy 3.1.1) -- **Authentication**: Flask-Login 0.6.3 -- **Migration**: Flask-Migrate 4.0.5 -- **Real-time**: Flask-SocketIO 5.3.5 +### Backend Framework +- **Flask 3.1.2**: 경량 웹 프레임워크 +- **Flask-SocketIO 5.5.1**: 실시간 양방향 통신 +- **Flask-Login 0.6.3**: 사용자 인증 및 세션 관리 +- **Flask-Migrate 4.1.0**: 데이터베이스 마이그레이션 +- **Flask-WTF 1.2.2**: 폼 처리 및 CSRF 보호 -### Libraries & Tools -- **Watchdog**: 파일 시스템 모니터링 -- **Telegram Bot**: 알림 전송 -- **Chardet**: 문자 인코딩 감지 -- **Natsort**: 자연스러운 정렬 +### Database +- **SQLAlchemy 2.0.43**: ORM (Object-Relational Mapping) +- **Flask-SQLAlchemy 3.1.1**: Flask-SQLAlchemy 통합 +- **Alembic 1.16.5**: 데이터베이스 마이그레이션 도구 +- **SQLite**: 기본 데이터베이스 (운영 환경에서는 PostgreSQL/MySQL 권장) + +### Security +- **Argon2-cffi 25.1.0**: 비밀번호 해싱 +- **Flask-WTF**: CSRF 토큰 보호 +- **Werkzeug 3.1.3**: 보안 유틸리티 + +### Data Processing +- **Pandas 2.3.3**: 데이터 분석 및 처리 +- **NumPy 2.3.3**: 수치 연산 +- **OpenPyXL 3.1.5**: Excel 파일 생성 및 편집 +- **Chardet 5.2.0**: 문자 인코딩 자동 감지 +- **Natsort 8.4.0**: 자연스러운 정렬 + +### Real-time Communication +- **Python-SocketIO 5.14.1**: SocketIO 서버 구현 +- **Python-EngineIO 4.12.3**: EngineIO 프로토콜 +- **Simple-WebSocket 1.1.0**: WebSocket 통신 + +### Monitoring & Notifications +- **Watchdog 6.0.0**: 파일 시스템 모니터링 +- **Python-Telegram-Bot 22.5**: Telegram 봇 API + +### HTTP & API +- **Requests 2.32.3**: HTTP 클라이언트 +- **DNSPython 2.8.0**: DNS 조회 ### Frontend -- Bootstrap 5 -- Bootstrap Icons -- JavaScript (SocketIO Client) +- **Bootstrap 5**: 반응형 UI 프레임워크 +- **Bootstrap Icons**: 아이콘 세트 +- **Socket.IO Client**: 실시간 통신 클라이언트 +- **JavaScript (ES6+)**: 클라이언트 사이드 로직 + +### Development & Testing +- **Pytest 8.0.0**: 테스트 프레임워크 +- **Pytest-Mock 3.12.0**: 모킹 라이브러리 +- **Python-Dotenv 1.0.1**: 환경 변수 관리 + +## 🏗️ 시스템 아키텍처 + +``` +┌─────────────────────────────────────────────────────────────┐ +│ Client Browser │ +│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ +│ │ HTML/CSS │ │ JavaScript │ │ SocketIO CLI │ │ +│ └──────────────┘ └──────────────┘ └──────────────┘ │ +└─────────────────────────────────────────────────────────────┘ + ↕ HTTP/WebSocket +┌─────────────────────────────────────────────────────────────┐ +│ Flask Application │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ Routes Layer │ │ +│ │ • auth.py (인증) • main.py (메인) │ │ +│ │ • admin.py (관리) • api.py (API) │ │ +│ └──────────────────────────────────────────────────────┘ │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ Services Layer │ │ +│ │ • redfish_client.py (iDRAC 통신) │ │ +│ │ • firmware_service.py (펌웨어 관리) │ │ +│ │ • watchdog_handler.py (파일 모니터링) │ │ +│ │ • logger.py (로깅) │ │ +│ └──────────────────────────────────────────────────────┘ │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ Models Layer │ │ +│ │ • user.py (사용자) • job.py (작업) │ │ +│ │ • firmware.py (펌웨어) │ │ +│ └──────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ + ↕ +┌─────────────────────────────────────────────────────────────┐ +│ External Services │ +│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ +│ │ SQLite DB │ │ Telegram Bot │ │ Dell Redfish │ │ +│ └──────────────┘ └──────────────┘ └──────────────┘ │ +└─────────────────────────────────────────────────────────────┘ +``` + +### 주요 컴포넌트 + +1. **Routes (라우트)** + - 사용자 요청을 받아 적절한 서비스로 전달 + - 인증, 권한 검사, 입력 검증 수행 + +2. **Services (서비스)** + - 비즈니스 로직 구현 + - 외부 API 통신 (Redfish, Telegram) + - 파일 처리 및 데이터 변환 + +3. **Models (모델)** + - 데이터베이스 스키마 정의 + - ORM을 통한 데이터 접근 + +4. **SocketIO Events** + - 실시간 양방향 통신 + - 진행 상황 업데이트 + - 파일 변경 알림 ## 🚀 시작하기 ### 필수 요구사항 -- Python 3.8 이상 -- pip (Python 패키지 관리자) +- **Python 3.8 이상** (Python 3.10+ 권장) +- **pip** (Python 패키지 관리자) +- **Git** (버전 관리) +- **Dell iDRAC 9 이상** (Redfish API 지원) ### 설치 방법 #### Windows -```bash +```powershell # 1. 저장소 클론 git clone https://github.com/yourusername/idrac_info.git cd idrac_info # 2. 가상환경 생성 및 활성화 python -m venv venv -venv\Scripts\activate +.\venv\Scripts\Activate.ps1 # 3. 의존성 설치 pip install -r requirements.txt -# 4. 데이터베이스 초기화 +# 4. 환경 변수 설정 (.env 파일 생성) +Copy-Item .env.example .env +# .env 파일을 편집하여 필요한 값 설정 + +# 5. 데이터베이스 초기화 flask db upgrade -# 5. 환경 변수 설정 (.env 파일 생성) -# .env.example을 참고하여 설정 +# 6. 애플리케이션 실행 +python app.py ``` -#### Linux +#### Linux / macOS ```bash # 1. 저장소 클론 @@ -106,11 +232,15 @@ source venv/bin/activate # 3. 의존성 설치 pip install -r requirements.txt -# 4. 데이터베이스 초기화 +# 4. 환경 변수 설정 (.env 파일 생성) +cp .env.example .env +# .env 파일을 편집하여 필요한 값 설정 + +# 5. 데이터베이스 초기화 flask db upgrade -# 5. 환경 변수 설정 (.env 파일 생성) -# .env.example을 참고하여 설정 +# 6. 애플리케이션 실행 +python app.py ``` ### 환경 설정 @@ -118,24 +248,88 @@ flask db upgrade `.env` 파일을 생성하고 다음 내용을 설정하세요: ```env -# Flask 설정 -SECRET_KEY=your-secret-key-here +# ======================================== +# Flask 기본 설정 +# ======================================== +SECRET_KEY=your-super-secret-key-change-this-in-production FLASK_ENV=development +FLASK_DEBUG=true +FLASK_HOST=0.0.0.0 +FLASK_PORT=5000 -# 데이터베이스 -DATABASE_URL=sqlite:///app.db +# ======================================== +# 데이터베이스 설정 +# ======================================== +# SQLite (개발용) +DATABASE_URL=sqlite:///backend/instance/site.db -# Telegram Bot (선택 사항) -TELEGRAM_BOT_TOKEN=your-bot-token -TELEGRAM_CHAT_ID=your-chat-id +# PostgreSQL (운영용 - 권장) +# DATABASE_URL=postgresql://username:password@localhost:5432/idrac_info -# 폴더 경로 -UPLOAD_FOLDER=uploads -BACKUP_FOLDER=backup -XML_FOLDER=xml_files -SCRIPT_FOLDER=scripts -LOG_FOLDER=logs -IDRAC_INFO_FOLDER=idrac_info +# MySQL (운영용) +# DATABASE_URL=mysql://username:password@localhost:3306/idrac_info + +# ======================================== +# Redfish API 설정 +# ======================================== +REDFISH_TIMEOUT=15 +REDFISH_VERIFY_SSL=false + +# ======================================== +# Telegram Bot 설정 (선택 사항) +# ======================================== +# Telegram BotFather에서 봇 생성 후 토큰 입력 +TELEGRAM_BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz +# Telegram에서 본인의 Chat ID 입력 +TELEGRAM_CHAT_ID=123456789 + +# ======================================== +# 데이터 디렉토리 설정 +# ======================================== +APP_DATA_DIR=./data + +# ======================================== +# 업로드 및 파일 설정 +# ======================================== +MAX_CONTENT_LENGTH=10485760 # 10MB +FILES_PER_PAGE=35 +BACKUP_FILES_PER_PAGE=3 + +# ======================================== +# 작업 처리 설정 +# ======================================== +MAX_WORKERS=60 # 동시 처리 가능한 최대 작업 수 + +# ======================================== +# 세션 설정 +# ======================================== +SESSION_MINUTES=30 # 세션 타임아웃 (분) + +# ======================================== +# SocketIO 설정 +# ======================================== +# threading (Windows 권장) / eventlet (Linux 권장) +SOCKETIO_ASYNC_MODE=threading + +# ======================================== +# 데이터베이스 자동 부트스트랩 (개발용만) +# ======================================== +AUTO_BOOTSTRAP_DB=false +``` + +### 초기 관리자 계정 생성 + +```bash +# Flask shell 실행 +flask shell + +# Python 인터프리터에서 실행 +>>> from backend.models.user import db, User +>>> admin = User(username='admin', email='admin@example.com', is_admin=True, is_approved=True) +>>> admin.set_password('your-admin-password') +>>> db.session.add(admin) +>>> db.session.commit() +>>> exit() ``` ### 실행 방법 @@ -144,8 +338,11 @@ IDRAC_INFO_FOLDER=idrac_info # 개발 서버 실행 python app.py -# 또는 +# 또는 Flask CLI 사용 flask run + +# 특정 호스트/포트 지정 +flask run --host=0.0.0.0 --port=8080 ``` 브라우저에서 `http://localhost:5000` 접속 @@ -154,90 +351,585 @@ flask run ``` idrac_info/ -├── app.py # 메인 애플리케이션 -├── config.py # 설정 파일 -├── requirements.txt # Python 의존성 -├── backend/ -│ ├── models/ # 데이터베이스 모델 -│ │ └── user.py -│ ├── routes/ # 라우트 핸들러 -│ │ ├── main.py -│ │ └── auth.py -│ ├── services/ # 비즈니스 로직 -│ │ ├── logger.py -│ │ ├── watchdog_handler.py -│ │ └── platform_utils.py -│ ├── templates/ # HTML 템플릿 -│ │ ├── base.html -│ │ └── index.html -│ └── static/ # 정적 파일 -│ ├── css/ -│ └── js/ -├── uploads/ # 업로드 파일 -├── backup/ # 백업 파일 -├── scripts/ # 실행 스크립트 -├── logs/ # 로그 파일 -└── migrations/ # 데이터베이스 마이그레이션 +├── app.py # 메인 애플리케이션 엔트리포인트 +├── config.py # 애플리케이션 설정 +├── requirements.txt # Python 의존성 목록 +├── telegram_bot_service.py # Telegram 봇 폴링 서비스 +├── migrate_passwords.py # 비밀번호 마이그레이션 스크립트 +├── update_db.py # 데이터베이스 업데이트 스크립트 +├── update_user_approval.py # 사용자 승인 상태 업데이트 스크립트 +├── check_telegram.py # Telegram 설정 확인 스크립트 +│ +├── .env # 환경 변수 (git에서 제외) +├── .gitignore # Git 제외 파일 목록 +│ +├── backend/ # 백엔드 코드 +│ ├── __init__.py +│ │ +│ ├── models/ # 데이터베이스 모델 +│ │ ├── __init__.py +│ │ ├── user.py # 사용자 모델 +│ │ ├── job.py # 작업 모델 +│ │ ├── firmware.py # 펌웨어 모델 +│ │ └── telegram_bot.py # Telegram 봇 모델 +│ │ +│ ├── routes/ # 라우트 핸들러 +│ │ ├── __init__.py +│ │ ├── main.py # 메인 페이지 라우트 +│ │ ├── auth.py # 인증 라우트 +│ │ ├── admin.py # 관리자 라우트 +│ │ ├── api.py # API 엔드포인트 +│ │ ├── firmware.py # 펌웨어 관리 라우트 +│ │ └── xml_routes.py # XML 파일 관리 라우트 +│ │ +│ ├── services/ # 비즈니스 로직 +│ │ ├── __init__.py +│ │ ├── redfish_client.py # Redfish API 클라이언트 +│ │ ├── firmware_service.py # 펌웨어 관리 서비스 +│ │ ├── drm_parser.py # DRM XML 파서 +│ │ ├── watchdog_handler.py # 파일 모니터링 +│ │ ├── logger.py # 로깅 설정 +│ │ ├── platform_utils.py # 플랫폼 유틸리티 +│ │ └── file_utils.py # 파일 유틸리티 +│ │ +│ ├── forms/ # WTForms 폼 +│ │ ├── __init__.py +│ │ ├── auth_forms.py # 인증 폼 +│ │ └── admin_forms.py # 관리자 폼 +│ │ +│ ├── templates/ # Jinja2 템플릿 +│ │ ├── base.html # 기본 레이아웃 +│ │ ├── index.html # 메인 페이지 +│ │ ├── login.html # 로그인 페이지 +│ │ ├── register.html # 회원가입 페이지 +│ │ ├── admin.html # 관리자 페이지 +│ │ ├── admin_settings.html # 관리자 설정 +│ │ ├── jobs.html # 작업 관리 +│ │ ├── idrac_firmware.html # 펌웨어 관리 +│ │ ├── xml_files.html # XML 파일 목록 +│ │ └── edit_xml.html # XML 편집기 +│ │ +│ ├── static/ # 정적 파일 +│ │ ├── css/ +│ │ │ ├── admin.css +│ │ │ ├── admin_settings.css +│ │ │ ├── edit_xml.css +│ │ │ ├── index.css +│ │ │ └── jobs.css +│ │ ├── js/ +│ │ │ ├── admin.js +│ │ │ ├── admin_settings.js +│ │ │ ├── edit_xml.js +│ │ │ ├── index.js +│ │ │ └── jobs.js +│ │ └── images/ +│ │ +│ ├── instance/ # 인스턴스별 데이터 +│ │ └── site.db # SQLite 데이터베이스 +│ │ +│ └── socketio_events.py # SocketIO 이벤트 핸들러 +│ +├── data/ # 애플리케이션 데이터 +│ ├── logs/ # 로그 파일 +│ ├── uploads/ # 업로드된 파일 +│ ├── temp_ip/ # 임시 IP 파일 +│ ├── temp_zips/ # 임시 ZIP 파일 +│ ├── xml/ # XML 설정 파일 +│ ├── scripts/ # 스크립트 파일 +│ ├── idrac_info/ # iDRAC 정보 파일 +│ ├── mac/ # MAC 주소 파일 +│ ├── guid_file/ # GUID 파일 +│ ├── gpu_serial/ # GPU 시리얼 파일 +│ ├── mac_backup/ # MAC 백업 파일 +│ └── server_list/ # 서버 리스트 파일 +│ +├── migrations/ # Alembic 마이그레이션 +│ ├── versions/ # 마이그레이션 버전 +│ ├── alembic.ini +│ ├── env.py +│ └── README +│ +├── tests/ # 테스트 코드 +│ ├── __init__.py +│ ├── test_auth.py +│ ├── test_api.py +│ └── test_services.py +│ +└── venv/ # 가상환경 (git에서 제외) ``` ## 💡 사용법 -### 1. IP 처리 +### 1. 로그인 및 회원가입 -1. 메인 페이지에서 스크립트 선택 -2. IP 주소 입력 (각 줄에 하나씩) -3. "처리" 버튼 클릭 -4. 실시간 진행 상황 확인 -5. 완료 후 결과 파일 다운로드 +1. 브라우저에서 `http://localhost:5000` 접속 +2. 회원가입 페이지에서 계정 생성 +3. 관리자 승인 대기 (Telegram 봇 설정 시 자동 알림) +4. 승인 후 로그인 -### 2. MAC/GUID 변환 +### 2. iDRAC 서버 정보 수집 -1. 해당 섹션에서 데이터 입력 -2. 필요시 서버 리스트 입력 -3. 변환 버튼 클릭 -4. 생성된 Excel 파일 다운로드 +1. 메인 페이지에서 "IP 처리" 섹션 선택 +2. 스크립트 선택 (예: `get_idrac_info.py`) +3. IP 주소 입력 (각 줄에 하나씩) + ``` + 192.168.1.100 + 192.168.1.101 + 192.168.1.102 + ``` +4. iDRAC 사용자명/비밀번호 입력 +5. "처리" 버튼 클릭 +6. 실시간 진행 상황 확인 +7. 완료 후 결과 파일 다운로드 -### 3. 파일 관리 +### 3. 펌웨어 카탈로그 관리 -1. 처리된 파일 목록에서 파일 확인 -2. "보기" 버튼으로 내용 미리보기 -3. 다운로드 또는 삭제 가능 -4. 자동 백업 기능으로 안전하게 관리 +1. 관리자 페이지 접속 +2. "펌웨어 관리" 섹션 선택 +3. "Dell 카탈로그 동기화" 버튼 클릭 +4. 카탈로그 다운로드 및 파싱 대기 +5. 펌웨어 목록 확인 -## 🔧 주요 기능 상세 +### 4. DRM XML 파일 업로드 -### 크로스 플랫폼 지원 +1. Dell Repository Manager에서 XML 카탈로그 생성 +2. 관리자 설정 페이지 접속 +3. "DRM Repository 상태 확인" 클릭 +4. XML 파일 업로드 +5. "DRM 데이터 동기화" 클릭 -- Windows와 Linux 모두 지원 -- OS별 최적화된 SocketIO 모드 자동 선택 - - Windows: Threading 모드 - - Linux: Eventlet 모드 +### 5. XML 설정 파일 관리 -### 실시간 모니터링 +1. "XML 파일" 메뉴 선택 +2. XML 파일 업로드 또는 기존 파일 선택 +3. "편집" 버튼 클릭하여 웹 에디터에서 수정 +4. 저장 시 자동 백업 생성 +5. SCP 파일 다운로드 또는 서버에 적용 -- SocketIO를 통한 실시간 진행 상황 업데이트 -- Watchdog를 통한 파일 변경 감지 -- 자동 화면 갱신 +### 6. MAC/GUID 데이터 수집 및 변환 -### 보안 +#### MAC 주소 수집 +1. "MAC to Excel" 섹션 선택 +2. MAC 주소 데이터 입력 또는 파일 업로드 +3. 서버 리스트 입력 (선택 사항) +4. "변환" 버튼 클릭 +5. 생성된 Excel 파일 다운로드 -- Flask-Login 기반 사용자 인증 -- CSRF 토큰 보호 -- 안전한 파일 업로드 및 처리 +#### GUID 수집 +1. "GUID to Excel" 섹션 선택 +2. GUID 데이터 입력 +3. 서버 리스트 매핑 +4. Excel 파일 생성 및 다운로드 -### git 신규 업데이트 방법 +### 7. 작업 모니터링 -# 변경사항 올리기 -- git add -A -- git commit -m "update" -- git push +1. "작업 관리" 메뉴 선택 +2. 실행 중인 작업 목록 확인 +3. 작업 상세 정보 보기 +4. 필요시 작업 취소 -# 원격 최신 버전 받기 -- git pull +## 🔧 고급 기능 -# 현재 원격 확인 -- git remote -v +### Telegram 봇 설정 -## 📧 연락처 +#### 1. Telegram 봇 생성 -프로젝트 관련 문의사항이 있으시면 이슈를 등록해주세요. \ No newline at end of file +1. Telegram에서 [@BotFather](https://t.me/botfather) 검색 +2. `/newbot` 명령어 입력 +3. 봇 이름 및 사용자명 설정 +4. 발급받은 토큰을 `.env` 파일의 `TELEGRAM_BOT_TOKEN`에 입력 + +#### 2. Chat ID 확인 + +1. [@userinfobot](https://t.me/userinfobot) 검색 +2. 봇과 대화 시작 +3. 표시되는 ID를 `.env` 파일의 `TELEGRAM_CHAT_ID`에 입력 + +#### 3. 봇 기능 활성화 + +- 애플리케이션 재시작 시 자동으로 봇 폴링 시작 +- 사용자 로그인/회원가입 시 Telegram 알림 전송 +- 신규 사용자 승인 요청 시 인라인 버튼으로 승인/거부 가능 + +### 데이터베이스 마이그레이션 + +#### 새로운 마이그레이션 생성 + +```bash +# 모델 변경 후 마이그레이션 파일 생성 +flask db migrate -m "Add new column to user table" + +# 마이그레이션 적용 +flask db upgrade + +# 마이그레이션 롤백 +flask db downgrade +``` + +#### 기존 데이터베이스 업그레이드 + +```bash +# 현재 마이그레이션 상태 확인 +flask db current + +# 최신 버전으로 업그레이드 +flask db upgrade + +# 특정 버전으로 업그레이드 +flask db upgrade +``` + +### 비밀번호 해싱 마이그레이션 + +기존 사용자의 비밀번호를 Argon2로 마이그레이션: + +```bash +python migrate_passwords.py +``` + +### 사용자 승인 상태 업데이트 + +기존 사용자를 일괄 승인: + +```bash +python update_user_approval.py +``` + +### 로그 관리 + +로그 파일 위치: `data/logs/app.log` + +로그 레벨 설정 (`.env` 파일): +```env +LOG_LEVEL=INFO # DEBUG, INFO, WARNING, ERROR, CRITICAL +``` + +로그 파일 로테이션: +- 자동으로 날짜별 로그 파일 생성 +- 최대 30일간 보관 + +### 성능 최적화 + +#### 동시 작업 수 조정 + +`.env` 파일에서 `MAX_WORKERS` 값 조정: +```env +MAX_WORKERS=60 # CPU 코어 수에 따라 조정 +``` + +#### SocketIO 모드 변경 + +Windows: +```env +SOCKETIO_ASYNC_MODE=threading +``` + +Linux (eventlet 설치 필요): +```env +SOCKETIO_ASYNC_MODE=eventlet +``` + +```bash +pip install eventlet +``` + +### 운영 환경 배포 + +#### Gunicorn 사용 (Linux) + +```bash +# Gunicorn 설치 +pip install gunicorn eventlet + +# 실행 +gunicorn --worker-class eventlet -w 1 --bind 0.0.0.0:5000 app:app +``` + +#### Nginx 리버스 프록시 설정 + +```nginx +server { + listen 80; + server_name your-domain.com; + + location / { + proxy_pass http://127.0.0.1:5000; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + 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_set_header X-Forwarded-Proto $scheme; + } + + location /socket.io { + proxy_pass http://127.0.0.1:5000/socket.io; + proxy_http_version 1.1; + proxy_buffering off; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } +} +``` + +#### Systemd 서비스 등록 (Linux) + +`/etc/systemd/system/idrac-info.service`: +```ini +[Unit] +Description=iDRAC Info Manager +After=network.target + +[Service] +User=www-data +WorkingDirectory=/path/to/idrac_info +Environment="PATH=/path/to/idrac_info/venv/bin" +ExecStart=/path/to/idrac_info/venv/bin/gunicorn --worker-class eventlet -w 1 --bind 127.0.0.1:5000 app:app +Restart=always + +[Install] +WantedBy=multi-user.target +``` + +서비스 시작: +```bash +sudo systemctl daemon-reload +sudo systemctl enable idrac-info +sudo systemctl start idrac-info +sudo systemctl status idrac-info +``` + +## 📚 Git 사용법 + +### 변경사항 커밋 및 푸시 + +```bash +# 변경된 파일 확인 +git status + +# 모든 변경사항 스테이징 +git add -A + +# 또는 특정 파일만 스테이징 +git add backend/routes/main.py + +# 커밋 메시지와 함께 커밋 +git commit -m "Add new feature: firmware auto-update" + +# 원격 저장소에 푸시 +git push origin main +``` + +### 원격 저장소에서 최신 버전 가져오기 + +```bash +# 최신 변경사항 가져오기 +git pull origin main + +# 또는 fetch 후 merge +git fetch origin +git merge origin/main +``` + +### 브랜치 관리 + +```bash +# 새 브랜치 생성 +git checkout -b feature/new-feature + +# 브랜치 전환 +git checkout main + +# 브랜치 목록 확인 +git branch -a + +# 브랜치 병합 +git checkout main +git merge feature/new-feature + +# 브랜치 삭제 +git branch -d feature/new-feature +``` + +### 원격 저장소 확인 + +```bash +# 원격 저장소 목록 +git remote -v + +# 원격 저장소 추가 +git remote add origin https://github.com/username/idrac_info.git + +# 원격 저장소 URL 변경 +git remote set-url origin https://github.com/username/new-repo.git +``` + +### 변경사항 되돌리기 + +```bash +# 작업 디렉토리 변경사항 취소 +git checkout -- filename + +# 스테이징 취소 +git reset HEAD filename + +# 마지막 커밋 취소 (변경사항 유지) +git reset --soft HEAD~1 + +# 마지막 커밋 취소 (변경사항 삭제) +git reset --hard HEAD~1 +``` + +## 🐛 문제 해결 + +### Telegram 봇이 응답하지 않음 + +**증상**: Telegram 메시지가 전송되지 않음 + +**해결 방법**: +1. `.env` 파일에서 `TELEGRAM_BOT_TOKEN`과 `TELEGRAM_CHAT_ID` 확인 +2. Telegram 설정 확인 스크립트 실행: + ```bash + python check_telegram.py + ``` +3. 봇 폴링 서비스 로그 확인: + ```bash + tail -f data/logs/app.log | grep "텔레그램" + ``` +4. 중복 봇 인스턴스 확인 및 종료: + ```bash + # Windows + tasklist | findstr python + taskkill /F /PID + + # Linux + ps aux | grep python + kill -9 + ``` + +### SocketIO 연결 실패 + +**증상**: 실시간 업데이트가 작동하지 않음 + +**해결 방법**: +1. 브라우저 콘솔에서 에러 확인 +2. SocketIO 모드 변경: + ```env + # Windows + SOCKETIO_ASYNC_MODE=threading + + # Linux + SOCKETIO_ASYNC_MODE=eventlet + ``` +3. 방화벽 설정 확인 +4. CORS 설정 확인 (app.py): + ```python + socketio = SocketIO(app, cors_allowed_origins="*") + ``` + +### 데이터베이스 마이그레이션 오류 + +**증상**: `flask db upgrade` 실행 시 오류 발생 + +**해결 방법**: +1. 현재 마이그레이션 상태 확인: + ```bash + flask db current + ``` +2. 마이그레이션 히스토리 확인: + ```bash + flask db history + ``` +3. 데이터베이스 백업 후 재생성: + ```bash + # 백업 + cp backend/instance/site.db backend/instance/site.db.backup + + # 재생성 + rm backend/instance/site.db + flask db upgrade + ``` + +### 파일 업로드 실패 + +**증상**: XML 파일 업로드 시 오류 발생 + +**해결 방법**: +1. 파일 크기 제한 확인 (`.env`): + ```env + MAX_CONTENT_LENGTH=10485760 # 10MB + ``` +2. 디렉토리 권한 확인: + ```bash + # Linux + chmod -R 755 data/ + ``` +3. 디스크 공간 확인: + ```bash + df -h + ``` + +### Redfish API 연결 실패 + +**증상**: iDRAC 서버 연결 시 타임아웃 또는 인증 오류 + +**해결 방법**: +1. iDRAC IP 주소 및 네트워크 연결 확인 +2. iDRAC 사용자명/비밀번호 확인 +3. SSL 검증 비활성화 (`.env`): + ```env + REDFISH_VERIFY_SSL=false + ``` +4. 타임아웃 시간 증가: + ```env + REDFISH_TIMEOUT=30 + ``` +5. iDRAC Redfish 서비스 활성화 확인 + +### 세션 타임아웃 문제 + +**증상**: 로그인 후 자주 로그아웃됨 + +**해결 방법**: +1. 세션 타임아웃 시간 증가 (`.env`): + ```env + SESSION_MINUTES=60 + ``` +2. 쿠키 설정 확인 (`config.py`): + ```python + SESSION_COOKIE_SECURE = False # HTTP 환경 + REMEMBER_COOKIE_SECURE = False + ``` + +## 📄 라이선스 + +이 프로젝트는 MIT 라이선스 하에 배포됩니다. + +## 📧 연락처 및 지원 + +- **이슈 리포트**: GitHub Issues를 통해 버그 리포트 및 기능 요청 +- **문의**: 프로젝트 관련 문의사항은 이슈를 등록해주세요 + +## 🙏 기여 + +기여를 환영합니다! Pull Request를 보내주세요. + +1. Fork the Project +2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) +3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) +4. Push to the Branch (`git push origin feature/AmazingFeature`) +5. Open a Pull Request + +## 📝 변경 로그 + +### v1.0.0 (2025-11-29) +- 초기 릴리스 +- iDRAC Redfish API 통합 +- Telegram 봇 알림 기능 +- DRM 카탈로그 동기화 +- 사용자 승인 워크플로우 +- 실시간 파일 모니터링 \ No newline at end of file