Initial commit
This commit is contained in:
86
config.py
Normal file
86
config.py
Normal file
@@ -0,0 +1,86 @@
|
||||
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
|
||||
Reference in New Issue
Block a user