feat(data): 数据库搬到 data/ 目录 + SQLite WAL + 单卷绑定挂载
- config.py 新增 PEAR_DATA_DIR(默认 <项目根>/data),SQLite 库、Flask-Session
统一收进 DATA_DIR;不设时本地开发行为不变
- applications/__init__.py 顶部先 load_dotenv,保证 .env 里的 PEAR_DATA_DIR
在 config 导入时就生效
- extensions/init_sqlalchemy.py 接 SQLite connect 事件:WAL + synchronous=NORMAL
+ busy_timeout=30s(多 worker 写不再撞锁)
- config.py 注入 SQLALCHEMY_ENGINE_OPTIONS(pool_pre_ping + SQLite connect_args
超时;MySQL 路径下自动跳过 connect_args 防止参数错误)
- 新增 alembic 迁移 a47a5d2a3f1b 建 site_nav_click(含 anon_id 字段),
解决之前该表只由 db.create_all 建、不在迁移链里的隐患
- .gitignore / .dockerignore 加 data/ 排除规则(且把 migrations/ 从
ignore 里重新放行 —— 否则新加的迁移进不了库)
- NAS Docker 部署全面重写:
- compose 唯一绑定挂载 ./data:/app/data,宿主 File Station 看得见
- start.sh 自检 data 目录 + 子目录;workers 默认改为 1 threads 8
(SQLite 写串行,单进程最稳)
- 新增 backup.sh:sqlite3 .backup 在线热备(确保 WAL 一致性)+ 压缩
+ 保留 14 天
- Dockerfile 安装 sqlite3 客户端备用,建 /app/data 子目录并 chown
- docs/deployment-nas.md 重写数据持久化章节(路径表 + 热备命令 +
恢复步骤 + 整库迁移 tar/untar 流程)
This commit is contained in:
+13
-5
@@ -20,9 +20,14 @@ FLASK_APP=app.py
|
||||
SECRET_KEY=PLEASE_REPLACE_WITH_RANDOM_STRING
|
||||
|
||||
# ---- 数据库 ----
|
||||
# 默认 SQLite,存到容器内 /app/pear.db(已挂载为命名卷 pear_db,重启不丢)
|
||||
# 如需切换 MySQL:
|
||||
# SQLALCHEMY_DATABASE_URI=mysql+pymysql://user:pass@db:3306/pear?charset=utf8mb4
|
||||
# 默认 SQLite;库文件、session、备份都收进 PEAR_DATA_DIR 指向的目录。
|
||||
# docker-compose.yaml 已经把宿主 ./data 绑到容器 /app/data,PEAR_DATA_DIR 默认
|
||||
# 就是 /app/data,不需要额外改。这里只是给你本地开发调整用的口子。
|
||||
# PEAR_DATA_DIR=D:/bwstudio/pear-admin-flask/data
|
||||
|
||||
# 默认 SQLite,WAL 模式由 extensions 自动开启(多 worker 写也不容易撞锁)。
|
||||
# 想换成 MySQL 就解注释下面这行;docker-compose.yaml 里也写好了 db 服务可参考:
|
||||
# SQLALCHEMY_DATABASE_URI=mysql+pymysql://pear:pear@db:3306/pear?charset=utf8mb4
|
||||
# SQLALCHEMY_DATABASE_URI=sqlite:///../pear.db
|
||||
|
||||
# ---- 时区 ----
|
||||
@@ -40,5 +45,8 @@ TZ=Asia/Shanghai
|
||||
# 仅在 docker-compose.yaml 的 ports 段同步修改时使用;默认 5000
|
||||
APP_PORT=5000
|
||||
|
||||
# ---- Gunicorn worker 数量(NAS 单容器推荐 2-4)----
|
||||
# GUNICORN_WORKERS=2
|
||||
# ---- Gunicorn worker / thread 数 ----
|
||||
# SQLite + WAL 推荐 workers=1 threads=8:单进程写最稳,线程吃满并发。
|
||||
# 想更高吞吐可改 workers=2,但务必确认没有长事务(埋点已经够短)。
|
||||
GUNICORN_WORKERS=1
|
||||
GUNICORN_THREADS=8
|
||||
Reference in New Issue
Block a user