4a1d949e41
完整 Web 管理平台,涵盖: P0 生产加固: - 会话超时(空闲+绝对) + CSRF 防护 + 登录失败限流 - HTTPS/TLS 证书管理(自签生成/上传/删除/过期提醒) - SSL Bump (HTTPS 透明代理) 可视化配置 - 配置文件 diff 预览 + 二次确认才写入 - 服务控制二次确认 + 操作期间按钮锁定 P1 运维能力: - 日志轮转管理(logrotate) + 日志状态监控 - 告警规则(5xx/命中率/磁盘/客户端流量) - 多 Squid 实例管理 + 一键切换 - squidclient mgr 实时性能指标 - 流量异常检测(突增/大文件/高频小包/新客户端) P2 日志分析增强: - 日志持久化到 SQLite + 历史时间范围查询 - 导出 CSV/JSON(日志/KPI/异常/审计) - GeoIP 地图(Leaflet + ip-api.com 离线可选 GeoLite2) - 每客户端 24h 趋势图 - 自定义 Squid logformat 解析器 P3 体验锦上添花: - 暗/亮主题切换(cookie 持久化) - WebSSH 终端(xterm.js + paramiko) - 完整审计日志 + 用户管理 技术栈: Flask 3.0 + SQLAlchemy 2.0 + SQLite + Chart.js + Leaflet 总代码量: ~16500 行 (15 Python 模块 + 34 模板 + CSS) 路由数: 73
24 lines
683 B
Python
24 lines
683 B
Python
"""WSGI entry point for gunicorn.
|
|
|
|
Run with:
|
|
gunicorn --workers 2 --bind 0.0.0.0:5200 wsgi:app
|
|
|
|
Or via systemd unit.
|
|
"""
|
|
import os
|
|
|
|
# Ensure instance dir exists before app imports (it references the SQLite path)
|
|
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
os.makedirs(os.path.join(BASE_DIR, "instance"), exist_ok=True)
|
|
os.makedirs(os.path.join(BASE_DIR, "backups"), exist_ok=True)
|
|
|
|
from app import app, db, seed_admin
|
|
|
|
with app.app_context():
|
|
try:
|
|
db.create_all()
|
|
seed_admin()
|
|
except Exception as e:
|
|
# multi-worker race - the first worker wins; subsequent ones log
|
|
print(f"[wsgi] DB init: {e} (likely race with another worker)")
|