# k1989cms **Repository Path**: thomasblog/k1989cms ## Basic Information - **Project Name**: k1989cms - **Description**: Smart Office & IoT Platform 是一套集成了企业内部管理、物联网设备控制、人员组织管理于一体的综合性智能办公平台。系统采用模块化单体架构,通过统一身份认证实现"一套账号,通行所有业务与硬件"的目标,构建企业级数字底座。 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-01-06 - **Last Updated**: 2026-07-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # K1989CMS 智能办公平台
![K1989CMS Logo](https://img.shields.io/badge/K1989CMS-智能办公平台-blue) ![Python](https://img.shields.io/badge/Python-3.8+-green) ![Flask](https://img.shields.io/badge/Flask-2.3.3-red) ![License](https://img.shields.io/badge/License-MIT-yellow) ![Status](https://img.shields.io/badge/Status-Active-success) [![Gitee](https://img.shields.io/badge/Gitee-仓库-orange)](https://gitee.com/thomasblog/k1989cms) [![Stars](https://gitee.com/thomasblog/k1989cms/badge/star.svg?theme=dark)](https://gitee.com/thomasblog/k1989cms/stargazers) [![Forks](https://gitee.com/thomasblog/k1989cms/badge/fork.svg?theme=dark)](https://gitee.com/thomasblog/k1989cms/members) 让企业管理更智能、更高效!
--- ## 📖 项目简介 K1989CMS 是一个基于 **Flask** 构建的企业级智能办公平台管理系统。它采用模块化设计,集成了资产管理、设备监控(IoT)、消费系统、访客管理、组织架构等核心业务模块,并提供强大的第三方系统集成能力,为企业提供一站式数字化管理解决方案。 本系统支持高性能的设备通信(TCP/UDP/WebSocket),并内置了完善的后台任务处理机制和监控告警功能。 ### ✨ 核心特性 - 🏢 **全生命周期资产管理** - 覆盖采购、入库、领用、调拨、维修、报废全流程 - 📡 **多协议设备通信** - 支持 TCP/UDP/WebSocket,海量设备接入 - 🍽️ **智能消费系统** - 多餐厅/窗口管理、菜品菜单、订单支付、账户补贴 - 👤 **访客预约管理** - 在线预约、员工审批、白名单管理、签到记录 - 👥 **组织架构管理** - 树形结构、员工管理、权限控制(RBAC) - 📊 **第三方平台集成** - 企业微信、钉钉、飞书等平台数据同步 - 🔐 **多层次安全防护** - JWT认证、API Key、数据加密、IP白名单 - 📈 **实时监控告警** - Prometheus监控、设备状态监控、系统性能监控 ### 🏗️ 架构亮点 - **七层路由分层注册** - 88 个蓝图按 external_api/internal_api/internal_service/agent/admin/user/visitor 七层隔离注册,确保不同认证体系(HMAC/JWT/Session/设备签名)互不干扰 - **BaseService 统一基类** - 79 个服务类继承 BaseService,获得通用 CRUD、分页查询、事务管理、统一响应能力,子类只需定义 `_model` 类属性 - **多协议设备通信** - 12 个通信模块统一管理 TCP/UDP/WebSocket/HTTP 四协议,自适应心跳(连续成功增间隔/连续失败降间隔)、指数退避重连、4 级优先级消息广播 - **Python+Go 双版本 Agent** - Go 版为生产主力,蓝绿部署自动升级 + 三阶段回滚,心跳与命令解耦(3 秒命令轮询独立通道),跨平台 EDR 安全检测 - **启动期安全校验** - 8 项安全检查(密钥长度/唯一性/弱密钥/Redis 密码/Debug 模式),生产环境严格模式不通过则拒绝启动 - **延迟加载优化** - 扩展延迟加载 + SocketIO 代理 + 蓝图动态导入,避免 3-4s 冷启动开销 - **Celery 上下文自适应** - AutoContextTask 确保 Worker 子进程自动创建 Flask 上下文,分布式锁防多 Worker 重复执行 --- ## 🚀 快速开始 ### 环境要求 - **Python**: 3.8+ - **Redis**: 6.0+ - **MySQL**: 8.0+(需使用 InnoDB 引擎以支持外键约束) - **操作系统**: **Windows**(生产环境必须) - 项目依赖 ZK `zkemkeeper` COM 组件(门禁/考勤设备 SDK)和 `VideoSDK_Win64` DLL(视频监控) - 见 [app/services/zk_sdk_native.py](./app/services/zk_sdk_native.py) 和 [app/VideoSDK_Win64/](./app/VideoSDK_Win64/) - Linux/macOS 仅可用于"纯业务层 + 设备 TCP 通信降级模式",不支持 COM SDK 完整功能 ### 安装步骤 1. **克隆项目** ```bash git clone https://gitee.com/thomasblog/k1989cms.git cd k1989cms ``` 2. **创建虚拟环境** ```bash python -m venv venv source venv/bin/activate # Linux/Mac # 或 .\venv\Scripts\activate # Windows ``` 3. **安装依赖** ```bash pip install -r requirements.txt ``` 4. **配置环境变量** ```bash cp .env.example .env # 编辑 .env 文件,配置数据库连接、Redis 密钥等 ``` 5. **初始化数据库** ```bash # 方式一:使用 Flask CLI(推荐) flask init # 方式二:使用 main.py(会自动检查并初始化) python main.py ``` 6. **启动服务** ```bash # 方式一:使用 main.py(开发推荐,支持自动数据库初始化) python main.py # 方式二:使用 Flask CLI 开发模式 flask run # 方式三:使用 Flask CLI 生产模式 flask runserver # 方式四:生产环境 - Windows(waitress,本项目主用) waitress-serve --listen=0.0.0.0:5000 --threads=8 wsgi:application # 方式五:生产环境 - Linux 备用(gunicorn,仅业务层不含 ZK COM SDK 时) gunicorn -w 4 -b 0.0.0.0:5000 --timeout 120 wsgi:application ``` **启动方式说明**: - `python main.py`:开发推荐,会自动检查数据库连接,如果表结构不存在会自动初始化 - `flask run`:标准的 Flask 开发服务器 - `flask runserver`:生产模式服务器,启用多线程 - `waitress-serve`:**Windows 生产环境推荐**,纯 Python WSGI 服务器,跨平台支持 - `gunicorn`:Linux 生产环境,本项目因依赖 ZK COM DLL 仅作为业务层备用方案 ### 访问系统 - **Web 界面**: http://localhost:5000 - **管理后台**: http://localhost:5000/admin - **用户中心**: http://localhost:5000/users - **API 文档**: 查看路由文件获取接口信息 ## 命令行工具 项目提供了丰富的命令行工具,用于管理应用、数据库和系统配置。 ### 数据库管理命令 ```bash # 初始化数据库(创建表结构和默认数据) flask init # 重置数据库(危险操作,会删除所有数据) flask reset # 完整数据库设置(创建数据库、表结构、默认数据) flask full_setup ``` ### 应用运行命令 ```bash # 运行开发服务器 flask run # 运行生产服务器(启用多线程) flask runserver # 直接使用 main.py 启动(推荐,支持自动初始化) python main.py ``` ### 其他命令 ```bash # 检查数据一致性 flask check_consistency ``` **命令说明**: - `flask init`:初始化数据库表结构和默认数据(角色、管理员用户) - `flask reset`:重置数据库,删除所有数据并重新初始化(需要确认) - `flask full_setup`:完整的数据库设置流程,包括创建数据库、表结构、默认数据 - `flask check_consistency`:检查用户和员工数据的一致性 - `python main.py`:启动应用,会自动检查数据库连接和表结构,如果需要会自动初始化 **自动初始化功能**: 使用 `python main.py` 启动应用时,系统会自动执行以下检查: 1. 检查数据库连接是否正常 2. 检查数据库表结构是否存在 3. 如果表结构不存在,自动执行完整的数据库初始化 4. 初始化成功后,管理员密码会记录在 `docs/admin_account_info.md` 文件中 --- ## 📁 项目结构 ``` k1989cms/ ├── agents/ # Agent 客户端(部署在被管理设备上) │ ├── asset_management_agent.py # Python 版资产管理 Agent │ ├── data_sync_agent.py # 数据同步 Agent │ ├── device_monitor_agent.py # 设备状态监控 Agent │ ├── device_sdk.py # 设备端 SDK │ ├── edr_engine.py # EDR 安全检测引擎 │ └── asset_agent_go/ # Go 版 Agent(生产主力,含自动升级/EDR) ├── app/ │ ├── __init__.py # 应用工厂(create_app) │ ├── celery_app.py # Celery 配置 │ ├── extensions.py # Flask 扩展初始化 │ ├── communication/ # 设备通信模块(TCP/UDP/WS/HTTP,12 个模块) │ ├── config/ # 缓存配置 │ ├── constants/ # 权限常量 │ ├── models/ # 数据模型层(40+ 模型) │ ├── routes/ # 路由层(七层分层注册,60+ 蓝图) │ │ ├── admin/ # 管理员后台路由(30+ 蓝图) │ │ ├── api/ # RESTful API 路由(v1/v2) │ │ ├── auth/ # 认证路由 │ │ ├── user/ # 用户端路由 │ │ ├── visitor/ # 访客路由 │ │ ├── agent/ # Agent 通信路由 │ │ └── ... │ ├── services/ # 业务逻辑层(79 个服务类) │ ├── tasks/ # Celery 异步任务(20+ 定时任务) │ ├── utils/ # 工具类(42 个模块) │ └── views/ # 首页视图 ├── config/ # 配置文件(多环境/安全校验) ├── docs/ # 项目文档(8 个分类) ├── static/ # 静态资源(CSS/JS/图片/二维码) ├── templates/ # Jinja2 模板(admin/user/visitor/auth) ├── tests/ # 测试代码(40+ 测试文件 + e2e) ├── scripts/ # 运维与检查脚本 ├── utils/ # 根级工具脚本 ├── main.py # 应用入口(Celery 进程管理) ├── wsgi.py # 生产环境 WSGI 入口(gunicorn 部署) ├── requirements.txt # Python 依赖 └── README.md # 项目说明 ``` --- ## 🛠️ 技术栈 ### 后端技术 | 技术 | 版本 | 说明 | |------|------|------| | **Python** | 3.8+ | 后端开发语言 | | **Flask** | 2.3.3 | Web 框架(应用工厂模式) | | **SQLAlchemy** | 2.0.23 | ORM 数据库访问 | | **MySQL** | 8.0+ | 关系型数据库(InnoDB 引擎) | | **Redis** | 6.0+ | 缓存、消息队列、Celery Broker | | **Celery** | 5.3.4 | 异步任务调度(20+ 定时任务) | | **Gunicorn** | 21.2.0 | WSGI 服务器 | | **Flask-JWT-Extended** | 4.5.3 | JWT 认证(access 1h / refresh 7d) | | **Flask-SocketIO** | 5.3.6 | WebSocket 实时通信 | | **Flask-SQLAlchemy** | 3.0.5 | SQLAlchemy 集成 | | **Alembic** | 1.12.1 | 数据库迁移 | | **cryptography** | 46.0.3 | Fernet 数据加密 | | **Prometheus Client** | 0.19.0 | 性能指标采集 | | **Sentry SDK** | 1.40.6 | 错误监控 | ### 设备通信技术 | 技术 | 端口 | 说明 | |------|------|------| | **TCP** | 5000 | 长连接,JSON 消息格式 | | **UDP** | 5001 | 无连接,JSON 消息格式 | | **WebSocket** | 5000 | Flask-SocketIO,JWT 强制认证 | | **HTTP** | /api/devices/ | RESTful,设备主动拉取命令 | | **MQTT** | - | QoS/Retain 支持 | | **SNMP** | - | 网络设备监控 | | **Modbus** | - | 工业设备通信 | | **GB28181** | - | 视频监控协议 | ### Agent 技术 | 技术 | 说明 | |------|------| | **Go Agent** | 生产主力,蓝绿部署自动升级,心跳与命令解耦(3 秒命令轮询) | | **Python Agent** | PyInstaller 打包,EDR 动态加载 | | **EDR 引擎** | 跨平台安全检测(Windows/Linux/macOS) | ### 前端技术 | 技术 | 版本 | 说明 | |------|------|------| | **Bootstrap** | 5.3+ | UI 框架 | | **jQuery** | 3.6+ | JavaScript 库 | | **DataTables** | - | 表格组件 | | **Chart.js** | - | 图表组件 | | **SweetAlert2** | - | 弹窗组件 | --- ## 📡 API 文档 ### 认证方式 系统使用 **JWT (JSON Web Token)** 进行身份认证。 请求需在 Header 中携带 Token: ```http Authorization: Bearer ``` ### 常用接口 | 模块 | 接口路径 | 方法 | 说明 | |------|----------|------|------| | **认证** | `/auth/login` | POST | 用户登录 | | **资产** | `/api/v1/assets` | GET | 获取资产列表 | | **设备** | `/admin/devices/api/` (管理后台) / `/api/v1/devices` (外部只读) | GET | 设备管理(管理后台API)和设备列表查询(外部只读API) | | **用户** | `/api/v1/users` | GET | 获取用户列表 | | **组织** | `/api/v1/departments/tree` | GET | 获取部门树 | ### WebSocket 连接 设备可通过 WebSocket 连接到服务器进行实时通信: ```javascript // 设备端连接示例 const ws = new WebSocket('ws://localhost:5000/ws'); // 订阅设备特定消息 ws.send(JSON.stringify({ action: 'subscribe', room: 'device_001' })); ``` --- ## 📊 核心功能模块 ### 🏢 资产管理 - **硬件资产管理**:资产增删改查、生命周期管理、二维码管理 - **软件资产管理**:许可证管理、安装记录、使用统计 - **资产监控**:状态监控、告警管理、使用统计 - **资产维护**:维护计划、维护记录、维护提醒 - **资产转移**:转移申请、转移审批、转移记录 ### 📡 设备管理 - **设备注册与配置**:设备注册、配置编辑、配置下发 - **设备监控与告警**:实时监控、历史数据、告警列表 - **设备控制**:远程控制、指令下发、状态查询 - **设备认证**:设备认证、权限管理、访问控制 ### 👤 访客管理 - **访客预约**:在线预约、预约审批、预约记录 - **访客邀请**:访客邀请、邀请管理、邀请记录 - **访客通行**:通行记录、通行统计、通行报表 - **访客通知**:通知发送、通知记录、通知统计 - **白名单管理**:白名单创建、白名单编辑、白名单删除 ### 🍽️ 消费管理 - **消费记录**:消费查询、消费统计、消费报表 - **消费账户**:账户余额、账户充值、账户明细 - **消费补贴**:补贴规则、补贴发放、补贴统计 - **消费支付**:支付方式、支付记录、支付统计 - **餐厅管理**:餐厅管理、窗口管理、菜品管理 ### 👥 组织架构 - **部门管理**:部门树、部门编辑、部门删除 - **员工管理**:员工列表、员工详情、批量导入导出 - **多源同步**:同步配置、同步日志、同步状态 ### 🔐 系统管理 - **用户管理**:用户列表、用户详情、用户编辑 - **角色管理**:角色列表、角色详情、权限分配 - **权限管理**:权限树、权限配置、权限测试 - **系统配置**:基本设置、安全设置、通知设置 - **操作日志**:日志查询、日志详情、日志导出 - **系统监控**:监控仪表板、性能图表、告警管理 - **数据备份**:备份列表、备份恢复、备份策略 ### 📊 平台集成 - **第三方平台集成**:企业微信、钉钉、飞书等平台集成 - **组织架构同步**:部门同步、员工同步、通讯录同步 - **消息推送**:消息模板、消息发送、消息统计 - **单点登录**:OAuth 2.0、JWT令牌、会话管理 ### 🤖 Agent 管理 - **Agent 配置**:配置模板、配置管理、配置下发 - **Agent 生成**:安装包生成、生成记录、下载管理 - **Agent 监控**:状态监控、日志查看、性能监控 **Agent 功能说明**: - 支持多种设备类型的 Agent 部署 - 提供配置模板管理,支持批量配置下发 - 支持设备状态实时监控和日志收集 - 提供 Agent 安装包自动生成功能 ### 📱 二维码服务 - **二维码生成**:访客二维码、资产二维码、设备二维码 - **二维码管理**:二维码列表、状态管理、有效期管理 - **二维码验证**:二维码扫描、二维码验证、验证记录 ### 🔌 API 集成管理 - **API 密钥管理**:密钥生成、密钥管理、密钥权限 - **API 访问控制**:IP 白名单、访问频率、访问日志 - **API 文档**:接口文档、接口测试、接口版本 - **API 监控统计**:调用统计、错误统计、性能统计 ### 📈 报表分析 - **报表生成**:报表模板、报表生成、报表导出 - **报表调度**:定时任务、调度管理、执行记录 - **报表分发**:分发配置、分发记录、分发统计 - **数据可视化**:图表展示、数据钻取、数据对比 ### 📡 设备通信(IoT) - **多协议支持**:TCP/UDP/WebSocket/HTTP - **设备认证**:设备注册、认证、权限管理 - **心跳检测**:设备在线状态监控 - **消息广播**:支持向设备群发消息 - **重连机制**:自动重连和连接管理 ### 🔐 安全防护 - **JWT 认证**:基于 Token 的身份认证 - **API Key 管理**:第三方应用访问控制 - **数据加密**:敏感数据加密存储 - **IP 白名单**:访问 IP 限制 - **操作日志**:完整的操作审计日志 ### 📊 系统监控 - **Prometheus 监控**:性能指标采集 - **设备监控**:设备状态监控和告警 - **系统性能监控**:CPU、内存、磁盘监控 - **告警管理**:告警规则配置和通知 --- ## 👤 用户端功能 用户端提供普通员工使用的功能模块,包括: ### 导航菜单 | 菜单项 | 路径 | 功能说明 | |--------|------|----------| | 首页 | `/users/` | 用户仪表盘,显示概览信息 | | 资产管理 | `/assets/` | 查看个人资产、申请资产 | | 盘点管理 | `/inventory/` | 盘点任务、盘点历史 | | 消费管理 | `/consumption/` | 消费记录、钱包充值 | | 访客管理 | `/visitors/` | 创建访客邀请、查看邀请记录 | | 设备管理 | `/devices/` | 设备申请、设备监控 | | 门禁记录 | `/user/access/records` | 查看个人通行记录 | | 报表统计 | `/statistics/` | 数据统计报表 | | 二维码扫描 | `/qrcode/scan` | 扫描二维码功能 | --- ## 🔧 配置说明 ### 环境变量配置 项目使用 `.env` 文件管理环境变量,从 `.env.example` 复制并修改: ```bash cp .env.example .env ``` 主要配置项包括: ```bash # 应用配置 FLASK_ENV=development # 运行环境:development/production SECRET_KEY=your-secret-key-here # 应用密钥(必须配置,64位十六进制字符串) DEBUG=True # 调试模式 # 数据库配置 DATABASE_URL=mysql+pymysql://USER:PASSWORD@HOST:PORT/DBNAME # Redis 配置 REDIS_URL=redis://:password@localhost:6379/0 # Redis 连接地址(生产环境必须配置密码) # JWT 配置 JWT_SECRET_KEY=your-jwt-secret # JWT 密钥(必须配置,64位十六进制字符串) # 数据加密密钥 ENCRYPTION_KEY=your-encryption-key # 数据加密密钥(必须配置,44位Base64字符串,用于敏感数据加密) ``` ### ⚠️ 数据库配置注意事项 #### MySQL 存储引擎配置(重要) **问题说明**: - 系统使用 SQLAlchemy 定义了大量的外键约束来保证数据完整性 - MySQL 的 `MyISAM` 存储引擎**不支持外键约束,建议使用InnoDB引擎** **检查当前配置**: ```bash mysql -u root -p -e "SHOW VARIABLES LIKE 'default_storage_engine';" ``` **预期结果**: ``` +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | default_storage_engine | InnoDB | +------------------------+--------+ ``` --- ## 📊 监控与日志 ### Prometheus 监控 系统内置 Prometheus 监控端点,用于采集性能指标: ```bash curl http://localhost:5000/prometheus/metrics ``` ### 日志配置 系统日志默认保存在 `logs/app.log`,支持按日期切割。 --- ## 🔐 安全建议 1. **环境变量**:生产环境务必修改 `SECRET_KEY`、`JWT_SECRET_KEY`、`ENCRYPTION_KEY` 和数据库密码 2. **密钥强制配置**:`SECRET_KEY`、`JWT_SECRET_KEY`、`ENCRYPTION_KEY` 必须在 `.env` 文件中配置,未配置将拒绝启动 3. **HTTPS**:启用 HTTPS 加密传输,防止数据泄露 4. **访问控制**:配置 Redis 访问密码,并使用防火墙限制 IP 访问 5. **API 限制**:在 Nginx 或 IIS 或代码层配置请求频率限制 (Rate Limiting) 6. **生产部署(Windows)**:使用 `waitress-serve --listen=0.0.0.0:5000 --threads=8 wsgi:application` 启动,避免使用 `app.run()`;推荐使用 [deploy/windows/install-services.ps1](./deploy/windows/install-services.ps1) 通过 NSSM 注册为 Windows 服务 7. **Celery 独立部署**:生产环境应独立启动 Celery Worker 和 Beat(NSSM 注册为 Windows 服务),不要依赖 `main.py` 自动管理 --- ## 🤝 贡献指南 我们欢迎任何形式的贡献! ### 贡献流程 1. **Fork** 本仓库 2. 创建功能分支:`git checkout -b feature/new-feature` 3. 提交更改:`git commit -am 'Add new feature'` 4. 推送到远程:`git push origin feature/new-feature` 5. 提交 **Pull Request** ### 代码规范 - 遵循 [PEP 8](https://www.python.org/dev/peps/pep-0008/) 代码规范 - 添加适当的注释和文档字符串 - 编写单元测试 - 确保所有测试通过 --- ## 📄 许可证 本项目基于 **MIT** 许可证开源。 --- ## 🧪 测试 项目使用 pytest 进行单元测试和集成测试,包含 50+ 测试文件、900+ 测试函数,覆盖服务层、工具层、模型层、安全测试、加密测试及 E2E 测试。 ### 运行测试 ```bash # 运行所有测试 pytest # 运行特定测试文件 pytest tests/test_auth_service.py # 查看测试覆盖率 pytest --cov=app --cov-report=html ``` --- ## 🚀 部署 ### 生产环境部署(Windows) > ⚠️ **本项目仅支持 Windows 生产部署**,因依赖 ZK `zkemkeeper` COM 组件和 `VideoSDK_Win64` DLL。 > 详细部署说明请参考 [运维文档](./docs/运维文档/部署运维文档.md)。 #### 1. 环境准备 ```powershell # 安装系统依赖(管理员 PowerShell) # - Python 3.9.2+:https://www.python.org/downloads/ # - MySQL 8.0+:https://dev.mysql.com/downloads/ # - Redis for Windows:https://github.com/microsoftarchive/redis/releases # - NSSM(服务管理):https://nssm.cc/download,解压到 C:\nssm\ # 注册 ZK zkemkeeper COM 组件(管理员 CMD) cd C:\Path\To\SDK regsvr32 zkemkeeper.dll ``` #### 2. 安装项目依赖 ```powershell cd D:\k1989cms python -m venv venv .\venv\Scripts\activate pip install -r requirements.txt ``` #### 3. 配置环境变量 ```powershell Copy-Item .env.example .env notepad .env ``` **生产环境重要配置**: ```bash FLASK_ENV=production SECRET_KEY=<生成强密钥> JWT_SECRET_KEY=<生成强密钥> ENCRYPTION_KEY=<生成44位Base64密钥> DEBUG=False ``` #### 4. 初始化数据库 ```powershell # 在 MySQL 中创建数据库 mysql -u root -p -e "CREATE DATABASE k1989cms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" # 初始化表结构和默认数据 flask full_setup ``` #### 5. 注册 Windows 服务(NSSM) ```powershell # 管理员 PowerShell 中执行 .\deploy\windows\install-services.ps1 -ProjectRoot D:\k1989cms -VenvDir venv -Port 5000 ``` 此脚本会注册三个 Windows 服务: - `k1989cms`:waitress Web 服务 - `k1989cms-celery`:Celery Worker 异步任务 - `k1989cms-celery-beat`:Celery Beat 定时任务调度 #### 6. 服务管理 ```powershell # 查看服务状态 Get-Service k1989cms, k1989cms-celery, k1989cms-celery-beat # 启动/停止/重启 Start-Service k1989cms* Stop-Service k1989cms* Restart-Service k1989cms # 查看实时日志 Get-Content D:\k1989cms\logs\k1989cms.log -Tail 50 -Wait ``` #### 7. 日常发版(零脚本依赖) ```powershell # 一键发版:拉代码 → 备份 → 迁移 → 重启服务 → 健康检查 .\deploy\scripts\deploy.ps1 # 模拟发版(验证流程,不实际执行) .\deploy\scripts\deploy.ps1 -DryRun # 跳过数据库迁移(仅改业务代码时) .\deploy\scripts\deploy.ps1 -SkipMigration ``` **发版影响**:服务重启约 2-5 秒中断。Windows 无 SIGHUP 信号,waitress 无法优雅重载,需 Restart-Service。 #### 8. 反向代理(可选) 如需 HTTPS 或 80 端口访问,可在 IIS 或 Nginx for Windows 配置反向代理到 `127.0.0.1:5000`。Nginx 配置参考 [deploy/nginx/k1989cms.conf](./deploy/nginx/k1989cms.conf)。 --- ### Linux 备用部署(仅业务层,不含 ZK COM SDK) > ⚠️ Linux 部署**不支持** ZK 设备 COM 通信和视频监控,仅适用于纯业务层 + 设备 TCP 降级模式。 参考 [Dockerfile](./Dockerfile) 和 [docker-compose.yml](./docker-compose.yml),使用 gunicorn 启动。systemd 配置参考 [deploy/systemd/](./deploy/systemd/)。 --- ## 📞 技术支持 ### 项目地址 - **Gitee**: https://gitee.com/thomasblog/k1989cms - **问题反馈**: https://gitee.com/thomasblog/k1989cms/issues --- ## 📚 文档 ![输入图片说明](docs/%E6%93%8D%E4%BD%9C%E6%89%8B%E5%86%8C/K1989CMS%20%E6%99%BA%E8%83%BD%E5%8A%9E%E5%85%AC%E5%B9%B3%E5%8F%B0%E9%A1%B9%E7%9B%AE%E6%B1%87%E6%8A%A5%E6%96%B0%E7%89%88_00.png) 详细文档请查看 [docs](./docs) 目录: - [产品需求文档](./docs/产品需求文档/) - [技术设计文档](./docs/技术设计文档/) - 含系统架构、路由分层、服务层、设备通信、Agent架构等设计文档 - [开发文档](./docs/开发文档/) - 含开发环境搭建、项目结构说明、模块开发指南 - [运维文档](./docs/运维文档/) - 含部署、监控、备份恢复、故障排查 - [代码规范](./docs/代码规范/) - Python/前端/数据库/Git 提交规范 - [操作手册](./docs/操作手册/) - 管理员/用户/访客操作指南 - [审查交付物](./docs/审查交付物/) - 六步审查体系产物(14 份) --- ## 📋 更新日志 ### v2.5.0 (2026-07-08) #### 安全修复(14项) - 修复 JWT 管理员鉴权因导入错误完全失效问题(jwt_decorators.py) - 修复启动安全体检异常被 `except: pass` 吞掉问题(app/__init__.py) - 修复 JWT 黑名单被 `verify_token` 绕过问题(auth_service.py) - 修复安全中间件限流器因属性名不匹配失效问题(security_middleware.py) - 修复 3 处路径遍历漏洞(attendance/report/backup) - 修复 SSRF 漏洞(sensor_routes.py callback_url 无白名单) - 修复 Building API 4 个端点无权限控制问题(organization_routes.py) - 修复 71 处设备写操作使用 VIEW 权限问题(device_routes.py) - 修复 API Key 完整明文返回前端问题(api_docs_routes.py) - 修复 Agent 远程命令执行无沙箱问题(Python + Go 双版本) - 修复 Agent 心跳/下载/状态接口无认证问题(asset_agent.py) - 修复 13 处审计日志丢失风险,改为独立事务(IndependentLogService) - 修复 TCP/WebSocket 连接池有效性检查失效问题(connection_pool.py) - 修复 Ping 线程池扩容(8→32)支持更多设备并发检测(device_monitor.py) #### 功能完整性修复(7项) - 消费路由 `/payments` 重复注册导致路由覆盖问题(consumption_routes.py) - WebSocket 连接池 `is_valid` 和 `close` 真实实现(connection_pool.py) - Go Agent EDR 补全网络连接和登录尝试检测(edr/edr.go) - 报表服务补全考勤/消费/访客/设备 4 类报表(report_service.py) - 部门树查询验证,使用内存映射消除 N+1 问题(organization_service.py) #### 深度功能修复(5项) - Go Agent 命令执行沙箱(白名单+危险字符过滤+300s超时),与 Python Agent 对齐(updater.go) - 前端 API 端点引用修复(考勤部门树 URL、员工离职 URL,共 3 处模板) - 访客联动 API 端点补全(列表查询+重试联动,含服务层方法) - `func.IF()` → `case()` 跨数据库兼容(考勤部门排名报表) - `func.date_format()` → `extract()` 跨数据库兼容(资产月度趋势统计) #### 部署就绪 - 新增 `wsgi.py` 生产环境 WSGI 入口,支持 gunicorn/uwsgi 部署 - `main.py` 生产环境警告,提示使用 gunicorn 替代 `app.run()` - 修正 README 中不存在的 `deploy/gunicorn.conf.py` 引用 ### v2.4.0 (2026-07-04) #### 文档体系更新 - 基于全面代码分析,新增 4 份技术设计文档:路由分层架构、服务层架构设计、设备通信架构、Agent架构设计 - 重写项目结构说明文档(v3.0),准确反映七层路由、79 服务类、12 通信模块、40+ 数据模型架构 - 更新文档中心索引至 v8.0,修复技术设计文档中的失效引用 - 更新 README 技术栈,补充设备通信协议矩阵和 Agent 技术说明 #### 架构改进 - 修复 MySQL 版本要求不一致问题(统一为 8.0+) - 完善 README 项目结构,补充 Go Agent、通信模块、Celery 任务等缺失内容 ### v2.3.3 (2026-04-28) #### 修复问题 - **BUG-001**: 修复访客审批功能异常(API URL路径错误) - **BUG-002**: 修复员工端创建访客邀请失败(允许无employee记录的用户创建邀请) - **BUG-005**: 修复用户端门禁记录页面404错误(蓝图URL前缀配置) - **BUG-007**: 修复通行记录页面加载失败(模板block名称和API字段名错误) - **BUG-008**: 添加用户端导航菜单门禁记录入口 #### 功能优化 - 完善用户端导航菜单,添加门禁记录入口 - 优化 `login_required` 装饰器,支持识别包含 `/api/` 的路径 - 完善通行记录API字段映射 ---
**K1989CMS** - 让企业管理更智能、更高效! Made with ❤️ by K1989 Team