66 lines
2.8 KiB
Python
66 lines
2.8 KiB
Python
"""应用配置
|
||
|
||
从项目根目录的 .env 文件加载配置(若存在)。
|
||
API_KEY 用于保护写操作:Tailscale 内网/本机来源放行,外部来源必须携带正确密钥;
|
||
留空则外部来源一律拒绝(仅内网可用)。
|
||
"""
|
||
|
||
import os
|
||
from pathlib import Path
|
||
|
||
from dotenv import load_dotenv
|
||
|
||
BASE_DIR = Path(__file__).resolve().parent.parent.parent
|
||
load_dotenv(BASE_DIR / ".env")
|
||
|
||
|
||
class Settings:
|
||
"""应用配置项"""
|
||
|
||
APP_NAME: str = os.getenv("APP_NAME", "VPS 资产管理系统")
|
||
# 写操作(POST/PUT/DELETE)鉴权密钥;Tailscale 内网/本机来源忽略校验,
|
||
# 外部来源必须携带 X-API-Key(留空则外部来源直接拒绝)
|
||
API_KEY: str = os.getenv("API_KEY", "")
|
||
# Agent 上报鉴权密钥;配置后 Agent 上报需携带 X-Agent-Key
|
||
AGENT_KEY: str = os.getenv("AGENT_KEY", "")
|
||
# 凭证加密主密钥(Fernet);生成:python -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())'
|
||
MASTER_KEY: str = os.getenv("MASTER_KEY", "")
|
||
|
||
# ---- 通知渠道:Telegram ----
|
||
TELEGRAM_BOT_TOKEN: str = os.getenv("TELEGRAM_BOT_TOKEN", "")
|
||
TELEGRAM_CHAT_ID: str = os.getenv("TELEGRAM_CHAT_ID", "")
|
||
|
||
# ---- 通知渠道:邮件(SMTP)----
|
||
SMTP_HOST: str = os.getenv("SMTP_HOST", "")
|
||
SMTP_PORT: int = int(os.getenv("SMTP_PORT", "465"))
|
||
SMTP_USER: str = os.getenv("SMTP_USER", "")
|
||
SMTP_PASSWORD: str = os.getenv("SMTP_PASSWORD", "")
|
||
SMTP_FROM: str = os.getenv("SMTP_FROM", "")
|
||
SMTP_TO: str = os.getenv("SMTP_TO", "")
|
||
|
||
# ---- 续费提醒 ----
|
||
RENEWAL_THRESHOLD_DAYS: int = int(os.getenv("RENEWAL_THRESHOLD_DAYS", "30"))
|
||
|
||
# ---- 监控数据保留策略(自动清理)----
|
||
# MetricPoint 时序数据保留天数(Agent 高频上报,默认 30 天)
|
||
METRICS_RETENTION_DAYS: int = int(os.getenv("METRICS_RETENTION_DAYS", "30"))
|
||
# SecurityCheck 安全检查历史保留天数(默认 90 天)
|
||
SECURITY_RETENTION_DAYS: int = int(os.getenv("SECURITY_RETENTION_DAYS", "90"))
|
||
# EventLog 事件日志保留天数(默认 180 天)
|
||
EVENT_LOG_RETENTION_DAYS: int = int(os.getenv("EVENT_LOG_RETENTION_DAYS", "180"))
|
||
# 自动清理间隔(小时),0 表示禁用后台自动清理
|
||
CLEANUP_INTERVAL_HOURS: int = int(os.getenv("CLEANUP_INTERVAL_HOURS", "24"))
|
||
|
||
# ---- Agent 上报频率限制 ----
|
||
# 同一 asset_id 两次上报的最小间隔(秒),0 表示不限制
|
||
AGENT_REPORT_MIN_INTERVAL: int = int(os.getenv("AGENT_REPORT_MIN_INTERVAL", "30"))
|
||
|
||
# ---- CORS 允许来源(逗号分隔),默认本地 + Tailscale ----
|
||
CORS_ORIGINS: str = os.getenv(
|
||
"CORS_ORIGINS",
|
||
"http://127.0.0.1:8000,http://localhost:8000,https://dify.taile5765c.ts.net",
|
||
)
|
||
|
||
|
||
settings = Settings()
|