Files
iDRAC_Info/config.py
2025-10-05 17:37:51 +09:00

86 lines
4.0 KiB
Python

from __future__ import annotations
import os
from pathlib import Path
from datetime import timedelta
# ─────────────────────────────────────────────────────────────
# 경로 기본값
# ─────────────────────────────────────────────────────────────
BASE_DIR = Path(__file__).resolve().parent
# 앱 데이터 루트(로그/업로드/백업 등) → 환경변수 APP_DATA_DIR 우선, 없으면 ./data
DATA_DIR = Path(os.getenv("APP_DATA_DIR", BASE_DIR / "data")).resolve()
# backend/instance 는 항상 유지 (DB 등)
INSTANCE_DIR = BASE_DIR / "backend" / "instance"
INSTANCE_DIR.mkdir(parents=True, exist_ok=True)
# data/ 하위 보조 디렉토리
(DATA_DIR / "logs").mkdir(parents=True, exist_ok=True)
(DATA_DIR / "uploads").mkdir(parents=True, exist_ok=True)
(DATA_DIR / "temp_zips").mkdir(parents=True, exist_ok=True)
(DATA_DIR / "xml").mkdir(parents=True, exist_ok=True)
(DATA_DIR / "scripts").mkdir(parents=True, exist_ok=True)
(DATA_DIR / "idrac_info").mkdir(parents=True, exist_ok=True)
(DATA_DIR / "mac").mkdir(parents=True, exist_ok=True)
(DATA_DIR / "guid_file").mkdir(parents=True, exist_ok=True)
(DATA_DIR / "mac_backup").mkdir(parents=True, exist_ok=True)
(DATA_DIR / "server_list").mkdir(parents=True, exist_ok=True)
(DATA_DIR / "temp_ip").mkdir(parents=True, exist_ok=True)
class Config:
"""
운영 시에는 환경변수(.env)로 민감정보를 설정하세요.
DB는 기본적으로 backend/instance/site.db 를 사용합니다.
"""
# ── 보안
SECRET_KEY = os.environ.get("SECRET_KEY", "change-me") # 반드시 환경변수로 고정 권장
# ── DB (환경변수 DATABASE_URL 있으면 그 값을 우선 사용)
sqlite_path = (INSTANCE_DIR / "site.db").as_posix()
SQLALCHEMY_DATABASE_URI = os.environ.get("DATABASE_URL", f"sqlite:///{sqlite_path}")
SQLALCHEMY_TRACK_MODIFICATIONS = False
# ── Telegram (미설정 시 기능 비활성처럼 동작)
TELEGRAM_BOT_TOKEN = os.environ.get("TELEGRAM_BOT_TOKEN", "")
TELEGRAM_CHAT_ID = os.environ.get("TELEGRAM_CHAT_ID", "")
# ── 앱 폴더 경로 (문자열)
UPLOAD_FOLDER = (DATA_DIR / "temp_ip").as_posix()
BACKUP_FOLDER = (DATA_DIR / "backup").as_posix()
TEMP_ZIP_FOLDER = (DATA_DIR / "temp_zips").as_posix()
XML_FOLDER = (DATA_DIR / "xml").as_posix()
SCRIPT_FOLDER = (DATA_DIR / "scripts").as_posix()
IDRAC_INFO_FOLDER = (DATA_DIR / "idrac_info").as_posix()
MAC_FOLDER = (DATA_DIR / "mac").as_posix()
GUID_FOLDER = (DATA_DIR / "guid_file").as_posix()
MAC_BACKUP_FOLDER = (DATA_DIR / "mac_backup").as_posix()
SERVER_LIST_FOLDER = (DATA_DIR / "server_list").as_posix()
LOG_FOLDER = (DATA_DIR / "logs").as_posix()
# ── 업로드/파일
ALLOWED_EXTENSIONS = {"xml"}
MAX_CONTENT_LENGTH = int(os.getenv("MAX_CONTENT_LENGTH", 10 * 1024 * 1024)) # 10MB
# ── 페이지네이션/병렬
FILES_PER_PAGE = int(os.getenv("FILES_PER_PAGE", 32))
BACKUP_FILES_PER_PAGE = int(os.getenv("BACKUP_FILES_PER_PAGE", 3))
MAX_WORKERS = int(os.getenv("MAX_WORKERS", 60))
# ── 세션
PERMANENT_SESSION_LIFETIME = timedelta(minutes=int(os.getenv("SESSION_MINUTES", 30)))
# ── SocketIO
# threading / eventlet / gevent 중 선택. 기본은 threading (Windows 안정)
SOCKETIO_ASYNC_MODE = os.getenv("SOCKETIO_ASYNC_MODE", "threading")
# ─────────────────────────────────────────────────────────
# ✅ 개발 환경에서 쿠키 저장/리다이렉트 문제 방지용 설정
# 로컬(HTTP)에서도 세션/remember 토큰이 저장되도록 Secure 비활성
SESSION_COOKIE_SECURE = False
REMEMBER_COOKIE_SECURE = False
SESSION_COOKIE_SAMESITE = "Lax"
SESSION_COOKIE_DOMAIN = None