Files
ylt_diy/docs/数据库变更与部署文档.md

7.3 KiB
Raw Permalink Blame History

订单日报系统 数据库变更与部署文档

一、数据库变更说明

1.1 新增表t_daily_report_global_config

表结构

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 更新时间

数据示例

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

二、部署步骤

2.1 开发环境部署

前置条件

  • Python 3.12+
  • MySQL/Apache Doris 数据库
  • Git

步骤

  1. 克隆代码
git clone <仓库地址>
cd ylt_diy
  1. 安装依赖
pip install -r requirements.txt
  1. 配置环境变量(可选)
# 设置数据库连接(默认值见下文)
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
  1. 启动开发服务器
python app.py
  1. 访问系统

打开浏览器访问:http://localhost:5000

2.2 生产环境部署

前置条件

  • Linux 服务器(推荐 CentOS 7+
  • Python 3.12+
  • MySQL/Apache Doris 数据库
  • Nginx可选用于反向代理

步骤

  1. 克隆代码
git clone <仓库地址>
cd ylt_diy
  1. 安装依赖
pip install -r requirements.txt
  1. 配置环境变量

创建 .env 文件:

DEPLOY_RUN_PORT=5000
DB_HOST=haoslm2.xicp.net
DB_PORT=10216
DB_USER=root
DB_PASSWORD=your_password
DB_DATABASE=ylt_power_diy
  1. 创建服务配置

创建 /etc/systemd/system/ylt_daily_report.service

[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
  1. 启动服务
systemctl daemon-reload
systemctl start ylt_daily_report
systemctl enable ylt_daily_report
  1. 配置 Nginx 反向代理(可选)

创建 /etc/nginx/conf.d/ylt_daily_report.conf

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;
    }
}
  1. 重启 Nginx
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 DorisMySQL 协议兼容)。

相关代码db.py

三、版本升级

3.1 升级步骤

  1. 拉取最新代码
cd /path/to/ylt_diy
git pull
  1. 安装新依赖(如果有)
pip install -r requirements.txt
  1. 重启服务
systemctl restart ylt_daily_report

3.2 数据库自动迁移

系统启动时会自动执行数据库初始化,包括:

  1. 创建缺失的表
  2. 添加缺失的字段
  3. 初始化全局配置记录

注意:如果出现数据库迁移失败,请检查数据库连接和权限。

四、备份与恢复

4.1 数据库备份

# 使用 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 数据库恢复

# 使用 mysql 命令恢复
mysql -h haoslm2.xicp.net -P 10216 -u root -p ylt_power_diy < backup.sql

4.3 文件备份

# 备份报表文件
tar -czvf reports_backup.tar.gz public/reports/

# 备份配置文件
tar -czvf config_backup.tar.gz lib/

五、常见部署问题

5.1 数据库连接失败

问题:系统启动时提示数据库连接失败

解决

  • 检查数据库主机和端口是否正确
  • 确认数据库服务正常运行
  • 检查数据库用户名和密码
  • 确认网络连通性ping 数据库主机)

5.2 端口被占用

问题:启动时提示端口 5000 被占用

解决

# 查看占用进程
lsof -i :5000

# 杀死占用进程
kill -9 <PID>

# 或修改端口
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/syslogLinux

6.2 日志级别

  • INFO普通信息
  • WARNING警告信息
  • ERROR错误信息

6.3 查看日志

# 查看应用日志
tail -f /app/work/logs/bypass/app.log

# 查看系统日志
journalctl -u ylt_daily_report -f

七、安全建议

7.1 数据库安全

  • 使用强密码
  • 限制数据库访问 IP
  • 定期备份数据库

7.2 应用安全

  • 使用 HTTPS
  • 定期更新依赖
  • 关闭调试模式(生产环境)
  • 配置防火墙

7.3 服务器安全

  • 禁用 SSH 密码登录(使用密钥)
  • 定期更新系统
  • 禁用不必要的服务