104 lines
3.5 KiB
Python
104 lines
3.5 KiB
Python
"""
|
||
生产环境配置文件
|
||
此文件包含在生产环境中运行邮箱系统的优化设置
|
||
部署时请重命名为local_settings.py
|
||
"""
|
||
import platform
|
||
import os
|
||
import logging
|
||
from logging.handlers import RotatingFileHandler
|
||
import multiprocessing
|
||
|
||
# 基础配置
|
||
IS_PRODUCTION = True
|
||
LOG_LEVEL = 'INFO' # 可选: DEBUG, INFO, WARNING, ERROR, CRITICAL
|
||
|
||
# SMTP服务器配置
|
||
SMTP_HOST = '0.0.0.0' # 监听所有网络接口
|
||
SMTP_PORT = 25 # 标准SMTP端口
|
||
|
||
# 如果ISP阻止了25端口,可以使用备用端口
|
||
# SMTP_PORT = 587 # 备用端口
|
||
|
||
# 性能优化
|
||
# 自动根据CPU核心数调整工作线程数
|
||
CPU_COUNT = multiprocessing.cpu_count()
|
||
WORKER_THREADS = max(2, min(CPU_COUNT * 2, 8)) # 至少2个线程,最多8个线程
|
||
|
||
# 邮件处理优化
|
||
MAX_EMAIL_SIZE = 25 * 1024 * 1024 # 25MB,单个邮件最大大小
|
||
EMAIL_BATCH_SIZE = 50 # 批处理邮件数量
|
||
EMAIL_RETENTION_DAYS = 30 # 邮件保留天数,超过此天数的邮件将被自动清理
|
||
|
||
# 存储路径配置
|
||
MAIL_STORAGE_PATH = os.path.join(os.getcwd(), 'email_data')
|
||
LOG_FILE = os.path.join(os.getcwd(), 'logs', 'email_system.log')
|
||
|
||
# 安全设置
|
||
ENABLE_RATE_LIMITING = True # 启用API请求限流
|
||
API_RATE_LIMIT = '120/minute' # 每分钟最大请求数
|
||
ENABLE_IP_WHITELIST = False # 是否启用IP白名单
|
||
IP_WHITELIST = ['127.0.0.1'] # 允许访问API的IP列表
|
||
|
||
# 垃圾邮件过滤设置
|
||
ENABLE_SPAM_FILTER = True # 启用简单的垃圾邮件过滤
|
||
SPAM_KEYWORDS = ['casino', 'lottery', 'viagra', 'prescription', 'winner', 'prize', 'bitcoin']
|
||
MAX_RECIPIENTS_PER_EMAIL = 50 # 单封邮件最大收件人数量
|
||
|
||
# 邮件域名白名单(只接收这些域名的邮件,空列表表示接收所有)
|
||
DOMAIN_WHITELIST = []
|
||
|
||
# 日志配置
|
||
def setup_logging():
|
||
"""配置系统日志"""
|
||
log_dir = os.path.dirname(LOG_FILE)
|
||
if not os.path.exists(log_dir):
|
||
os.makedirs(log_dir)
|
||
|
||
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||
|
||
# 文件处理器 - 使用循环日志文件,最大10MB,保留10个备份
|
||
file_handler = RotatingFileHandler(
|
||
LOG_FILE, maxBytes=10*1024*1024, backupCount=10
|
||
)
|
||
file_handler.setFormatter(formatter)
|
||
file_handler.setLevel(getattr(logging, LOG_LEVEL))
|
||
|
||
# 控制台处理器
|
||
console_handler = logging.StreamHandler()
|
||
console_handler.setFormatter(formatter)
|
||
console_handler.setLevel(getattr(logging, LOG_LEVEL))
|
||
|
||
# 配置根日志记录器
|
||
root_logger = logging.getLogger()
|
||
root_logger.setLevel(getattr(logging, LOG_LEVEL))
|
||
root_logger.addHandler(file_handler)
|
||
root_logger.addHandler(console_handler)
|
||
|
||
logging.info("生产环境日志系统初始化完成")
|
||
|
||
# 自动清理功能
|
||
ENABLE_AUTO_CLEANUP = True # 启用自动清理
|
||
CLEANUP_INTERVAL_HOURS = 24 # 每24小时运行一次清理
|
||
|
||
# 监控设置
|
||
ENABLE_MONITORING = True # 启用系统监控
|
||
MONITOR_INTERVAL_MINUTES = 5 # 监控间隔(分钟)
|
||
|
||
# 在应用启动时设置日志
|
||
try:
|
||
setup_logging()
|
||
logging.info("已加载生产环境配置")
|
||
except Exception as e:
|
||
print(f"日志设置失败: {str(e)}")
|
||
|
||
# 系统启动时记录配置信息
|
||
if IS_PRODUCTION:
|
||
logging.info(f"SMTP服务器配置: {SMTP_HOST}:{SMTP_PORT}")
|
||
logging.info(f"工作线程数: {WORKER_THREADS}")
|
||
logging.info(f"邮件存储路径: {MAIL_STORAGE_PATH}")
|
||
logging.info(f"日志级别: {LOG_LEVEL}")
|
||
|
||
# 创建必要的目录
|
||
os.makedirs(MAIL_STORAGE_PATH, exist_ok=True)
|
||
os.makedirs(os.path.dirname(LOG_FILE), exist_ok=True) |