Files
dekun 52aca456e9 Add PostgreSQL production backend to eliminate SQLite lock contention.
Support DATABASE_URL with connection pooling, pg_dump backups, SQLite migration script, and deploy_postgres.sh with docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 08:11:42 +08:00

4.3 KiB
Raw Permalink Blame History

数据备份与恢复

qihuo 支持自动备份数据库与复盘附件,生成可在其他 Linux 服务器恢复的压缩包。

存储后端由 .env 决定:

后端 备份包内主文件 说明
SQLite(默认) futures.db 本地单文件库
PostgreSQL postgres_dump.sql pg_dump 逻辑备份

PostgreSQL 部署与迁移见 POSTGRES.md


备份内容

内容 说明
futures.db SQLite 主库(仅 SQLite 模式)
postgres_dump.sql PostgreSQL 逻辑备份(仅 PostgreSQL 模式)
uploads/ 复盘截图、自动 K 线图(若存在)
manifest.json 备份时间、backend 字段、文件清单
RESTORE.md 包内恢复说明
restore.sh 一键恢复脚本

不包含 .env(含 CTP 密码、DATABASE_URL 等),请单独安全保管或在新服务器重新配置。


备份目录

默认:/root/qihuo_backup

可通过环境变量覆盖:

# /opt/qihuo/.env 或 systemd/PM2 环境
QIHUO_BACKUP_DIR=/data/qihuo_backup

系统设置页

路径:系统设置 → 数据备份与恢复

  • 立即备份:后台生成 qihuo_backup_YYYYMMDD_HHMMSS.tar.gz
  • 每日自动备份:默认每天 03:00Asia/Shanghai)执行
  • 保留份数:默认保留最近 30 份,超出自动删除最旧文件
  • 下载:列表中点击「下载」获取压缩包

PostgreSQL 模式下需服务器已安装 pg_dumpapt install postgresql-client 或完整 postgresql 包)。


在新服务器恢复

方式一:使用包内脚本(推荐)

# 1. 上传压缩包到目标机
scp qihuo_backup_20260626_030015.tar.gz root@新服务器:/root/

# 2. 解压并恢复
cd /root
tar -xzf qihuo_backup_20260626_030015.tar.gz
cd qihuo_backup_20260626_030015
chmod +x restore.sh

# SQLite:直接恢复 futures.db
RESTORE_DIR=/opt/qihuo ./restore.sh

# PostgreSQL:先配置 /opt/qihuo/.env 的 DATABASE_URL,再执行
export RESTORE_DIR=/opt/qihuo
# 若 .env 在 RESTORE_DIR 下且含 DATABASE_URLrestore.sh 会自动 source
./restore.sh

默认恢复到 /root/qihuo。若生产目录为 /opt/qihuo

RESTORE_DIR=/opt/qihuo ./restore.sh

方式二:手工复制(SQLite

tar -xzf qihuo_backup_20260626_030015.tar.gz
cd qihuo_backup_20260626_030015
pm2 stop qihuo
cp futures.db /opt/qihuo/futures.db
cp -a uploads/. /opt/qihuo/uploads/
pm2 restart qihuo

方式三:手工导入(PostgreSQL)

pm2 stop qihuo
export DATABASE_URL=postgresql://qihuo:密码@127.0.0.1:5432/qihuo
psql "$DATABASE_URL" -f postgres_dump.sql
cp -a uploads/. /opt/qihuo/uploads/
pm2 restart qihuo

恢复后检查清单

  1. 已部署 qihuo 代码与 Python 虚拟环境(见 DEPLOY.md
  2. 已配置 .envDATABASE_URL 或 SQLite、SECRET_KEY、CTP 账号等)
  3. PostgreSQL:库已创建且 DATABASE_URL 可连接
  4. 访问 Web 登录,检查交易记录、统计页是否正常
  5. CTP 模式需在新环境重新连接柜台

注意事项

  • 恢复前务必停止 qihuo,避免进程占用数据库导致覆盖不完整
  • SQLite 备份使用 SQLite backup API,并在 WAL 模式下尝试 checkpoint
  • PostgreSQL 备份使用 pg_dump,恢复使用 psql -f
  • 自动备份在应用后台线程执行,与 Web 服务同进程
  • 大体积 uploads/ 会使压缩包变大,可按需定期清理无用截图
  • 不要将含 .env、数据库的压缩包上传到公开网盘

故障排查

现象 处理
设置页无备份列表 检查 /root/qihuo_backup 目录权限,进程需可写
立即备份无反应 查看 PM2 日志;可能上一任务仍在进行
PostgreSQL 备份失败 安装 postgresql-client;检查 DATABASE_URL
下载 404 文件名须为系统生成的 qihuo_backup_*.tar.gz
恢复后无法登录 确认数据已导入实际使用的库(SQLite 文件或 PG)
恢复后 CTP 连不上 在新服务器配置正确的 .env CTP 参数

相关文档