# 订单日报系统 数据库变更与部署文档 ## 一、数据库变更说明 ### 1.1 新增表:t_daily_report_global_config **表结构**: ```sql CREATE TABLE IF NOT EXISTS t_daily_report_global_config ( id BIGINT NOT NULL DEFAULT 1 COMMENT '主键(固定为1)', sum_data_fields VARCHAR(1000) NULL COMMENT '求和数据采集和显示字段列表(JSON格式)', create_time DATETIME NULL COMMENT '创建时间', update_time DATETIME NULL COMMENT '更新时间' ) UNIQUE KEY(id) DISTRIBUTED BY HASH(id) BUCKETS 1 PROPERTIES("replication_num" = "1") ``` **字段说明**: | 字段名 | 类型 | 说明 | |--------|------|------| | id | BIGINT | 主键,固定为1(全局配置只有一条记录) | | sum_data_fields | VARCHAR(1000) | 求和数据采集和显示字段列表,JSON格式 | | create_time | DATETIME | 创建时间 | | update_time | DATETIME | 更新时间 | **数据示例**: ```sql INSERT INTO t_daily_report_global_config (id, sum_data_fields, create_time, update_time) VALUES (1, '["sharp_electricity","peak_electricity","flat_electricity","valley_electricity"]', NOW(), NOW()); ``` ### 1.2 自动初始化 系统启动时会自动执行以下操作: 1. 检查表是否存在,不存在则创建 2. 检查ID=1的记录是否存在,不存在则初始化一条空记录 **相关代码**:[db_init.py](file:///d:/py/code/ylt_power_diy/ylt_diy/lib/db_init.py#L186-L211) ## 二、部署步骤 ### 2.1 开发环境部署 **前置条件**: - Python 3.12+ - MySQL/Apache Doris 数据库 - Git **步骤**: 1. **克隆代码** ```bash git clone <仓库地址> cd ylt_diy ``` 2. **安装依赖** ```bash pip install -r requirements.txt ``` 3. **配置环境变量**(可选) ```bash # 设置数据库连接(默认值见下文) export DB_HOST=haoslm2.xicp.net export DB_PORT=10216 export DB_USER=root export DB_PASSWORD=your_password export DB_DATABASE=ylt_power_diy export DEPLOY_RUN_PORT=5000 ``` 4. **启动开发服务器** ```bash python app.py ``` 5. **访问系统** 打开浏览器访问:http://localhost:5000 ### 2.2 生产环境部署 **前置条件**: - Linux 服务器(推荐 CentOS 7+) - Python 3.12+ - MySQL/Apache Doris 数据库 - Nginx(可选,用于反向代理) **步骤**: 1. **克隆代码** ```bash git clone <仓库地址> cd ylt_diy ``` 2. **安装依赖** ```bash pip install -r requirements.txt ``` 3. **配置环境变量** 创建 `.env` 文件: ```bash DEPLOY_RUN_PORT=5000 DB_HOST=haoslm2.xicp.net DB_PORT=10216 DB_USER=root DB_PASSWORD=your_password DB_DATABASE=ylt_power_diy ``` 4. **创建服务配置** 创建 `/etc/systemd/system/ylt_daily_report.service`: ```ini [Unit] Description=订单日报系统 After=network.target [Service] Type=simple User=www-data WorkingDirectory=/path/to/ylt_diy Environment="DEPLOY_RUN_PORT=5000" Environment="DB_HOST=haoslm2.xicp.net" Environment="DB_PORT=10216" Environment="DB_USER=root" Environment="DB_PASSWORD=your_password" Environment="DB_DATABASE=ylt_power_diy" ExecStart=/usr/bin/python3 app.py Restart=always [Install] WantedBy=multi-user.target ``` 5. **启动服务** ```bash systemctl daemon-reload systemctl start ylt_daily_report systemctl enable ylt_daily_report ``` 6. **配置 Nginx 反向代理**(可选) 创建 `/etc/nginx/conf.d/ylt_daily_report.conf`: ```nginx server { listen 80; server_name your-domain.com; location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /public/ { root /path/to/ylt_diy; expires 30d; } } ``` 7. **重启 Nginx** ```bash nginx -t systemctl restart nginx ``` ### 2.3 数据库配置 **默认配置**: | 配置项 | 默认值 | 说明 | |--------|--------|------| | DB_HOST | haoslm2.xicp.net | 数据库主机地址 | | DB_PORT | 10216 | 数据库端口 | | DB_USER | root | 数据库用户名 | | DB_PASSWORD | (空) | 数据库密码 | | DB_DATABASE | ylt_power_diy | 数据库名 | **连接方式**: 系统使用 PyMySQL 连接数据库,支持 MySQL 和 Apache Doris(MySQL 协议兼容)。 **相关代码**:[db.py](file:///d:/py/code/ylt_power_diy/ylt_diy/lib/db.py) ## 三、版本升级 ### 3.1 升级步骤 1. **拉取最新代码** ```bash cd /path/to/ylt_diy git pull ``` 2. **安装新依赖**(如果有) ```bash pip install -r requirements.txt ``` 3. **重启服务** ```bash systemctl restart ylt_daily_report ``` ### 3.2 数据库自动迁移 系统启动时会自动执行数据库初始化,包括: 1. 创建缺失的表 2. 添加缺失的字段 3. 初始化全局配置记录 **注意**:如果出现数据库迁移失败,请检查数据库连接和权限。 ## 四、备份与恢复 ### 4.1 数据库备份 ```bash # 使用 mysqldump 备份 mysqldump -h haoslm2.xicp.net -P 10216 -u root -p ylt_power_diy > backup.sql # 使用 Doris 备份命令(如果使用 Doris) curl -X POST http://doris-be:8030/api/bootstrap -d '{"type":"backup","backup_name":"daily_report_backup","storage":"hdfs://your-hdfs/path"}' ``` ### 4.2 数据库恢复 ```bash # 使用 mysql 命令恢复 mysql -h haoslm2.xicp.net -P 10216 -u root -p ylt_power_diy < backup.sql ``` ### 4.3 文件备份 ```bash # 备份报表文件 tar -czvf reports_backup.tar.gz public/reports/ # 备份配置文件 tar -czvf config_backup.tar.gz lib/ ``` ## 五、常见部署问题 ### 5.1 数据库连接失败 **问题**:系统启动时提示数据库连接失败 **解决**: - 检查数据库主机和端口是否正确 - 确认数据库服务正常运行 - 检查数据库用户名和密码 - 确认网络连通性(ping 数据库主机) ### 5.2 端口被占用 **问题**:启动时提示端口 5000 被占用 **解决**: ```bash # 查看占用进程 lsof -i :5000 # 杀死占用进程 kill -9 # 或修改端口 export DEPLOY_RUN_PORT=5001 ``` ### 5.3 静态文件加载失败 **问题**:页面样式和脚本无法加载 **解决**: - 检查 `public/static/` 目录是否存在 - 确认 Flask 应用的 `static_folder` 配置正确 - 清除浏览器缓存(Ctrl + Shift + R) ### 5.4 定时任务不执行 **问题**:每天 08:01 的定时任务没有执行 **解决**: - 确认服务正常运行(`systemctl status ylt_daily_report`) - 检查日志文件(`/app/work/logs/bypass/`) - 确认系统时间正确 - 检查配置是否启用(`is_active = 1`) ### 5.5 内存不足 **问题**:服务运行一段时间后崩溃 **解决**: - 增加服务器内存 - 优化查询语句,减少内存使用 - 配置定时清理任务 ## 六、日志管理 ### 6.1 日志位置 - 应用日志:`/app/work/logs/bypass/` - 系统日志:`/var/log/syslog`(Linux) ### 6.2 日志级别 - INFO:普通信息 - WARNING:警告信息 - ERROR:错误信息 ### 6.3 查看日志 ```bash # 查看应用日志 tail -f /app/work/logs/bypass/app.log # 查看系统日志 journalctl -u ylt_daily_report -f ``` ## 七、安全建议 ### 7.1 数据库安全 - 使用强密码 - 限制数据库访问 IP - 定期备份数据库 ### 7.2 应用安全 - 使用 HTTPS - 定期更新依赖 - 关闭调试模式(生产环境) - 配置防火墙 ### 7.3 服务器安全 - 禁用 SSH 密码登录(使用密钥) - 定期更新系统 - 禁用不必要的服务