diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml
index 73d4571..0446760 100644
--- a/.github/workflows/docker-build.yml
+++ b/.github/workflows/docker-build.yml
@@ -66,6 +66,9 @@ jobs:
echo "Run the container:"
echo " docker run -d -p 80:80 \\"
echo " -v bilinote-data:/app/backend/data \\"
+ echo " -v bilinote-config:/app/backend/config \\"
+ echo " -v bilinote-static:/app/backend/static \\"
+ echo " -v bilinote-models:/app/backend/models \\"
echo " --name bilinote \\"
echo " ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest"
echo ""
diff --git a/BillNote_frontend/src-tauri/tauri.conf.json b/BillNote_frontend/src-tauri/tauri.conf.json
index 65f876e..c41cec1 100644
--- a/BillNote_frontend/src-tauri/tauri.conf.json
+++ b/BillNote_frontend/src-tauri/tauri.conf.json
@@ -1,7 +1,7 @@
{
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
"productName": "BiliNote",
- "version": "2.3.2",
+ "version": "2.3.3",
"identifier": "com.jefferyhuang.bilinote",
"build": {
"frontendDist": "../dist",
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9747dcc..d21bb92 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
本项目所有重要变更记录于此。格式参考 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
+## [2.3.3] - 2026-05-22
+
+### Fixed
+
+- **预构建 Docker 镜像数据持久化**:文档的 `docker run` 只挂了 `data/`(媒体缓存),而 SQLite 数据库(LLM 供应商配置 + 笔记历史)和笔记文件不在该卷下,导致删除 / 升级容器时丢失配置与历史。现将数据库重定向到 `/app/backend/data/bili_note.db`、笔记到 `data/note_results`(随 data 卷持久化);README 更新为挂载 `data` / `config` / `static` / `models` 四个数据卷,并提示**勿**挂整个 `/app/backend`(命名卷会固化镜像内代码,导致 `docker pull` 升级不生效)。`docker-compose` 路径本就正确(`./backend:/app` 整目录绑挂),未受影响。
+
## [2.3.2] - 2026-05-22
### Fixed
diff --git a/Dockerfile.complete b/Dockerfile.complete
index 4ad647e..3102be4 100644
--- a/Dockerfile.complete
+++ b/Dockerfile.complete
@@ -95,14 +95,16 @@ COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
# 在 [supervisord] 块用 environment= 设兜底默认值;在 [program:backend] 用
# %(ENV_*)s 显式引用,等价于「把 host 通过 docker run -e 或 env_file 传进来的
# 变量再透传给 python main.py」。漏掉这一步就是用户「改 .env 没反应」的根因。
-RUN mkdir -p /var/log/supervisor
+# /app/backend/data 用于持久化数据库与笔记(见下方 DATABASE_URL / NOTE_OUTPUT_DIR),
+# 预建好目录,避免不挂卷启动时 sqlite 因父目录不存在而创建库失败。
+RUN mkdir -p /var/log/supervisor /app/backend/data
COPY <
AI 视频笔记生成工具 让 AI 为你的视频做笔记
@@ -163,10 +163,17 @@ docker pull ghcr.io/jefferyhcool/bilinote:latest docker run -d -p 80:80 \ -v bilinote-data:/app/backend/data \ + -v bilinote-config:/app/backend/config \ + -v bilinote-static:/app/backend/static \ + -v bilinote-models:/app/backend/models \ --name bilinote \ ghcr.io/jefferyhcool/bilinote:latest ``` +上面四个卷分别持久化:`data`(SQLite 数据库 + 生成的笔记)、`config`(LLM 供应商配置 / Cookie / 转写设置)、`static`(笔记引用的视频截图)、`models`(Whisper 模型缓存,可选,避免每次重新下载)。这样 `docker pull` 升级新镜像、删旧容器重建后,配置和历史都不会丢。 + +> ⚠️ **不要**用 `-v 卷名:/app/backend` 挂整个后端目录——命名卷会用首次启动时的镜像内容固化,之后 `docker pull` 升级也会被旧代码盖住,导致「升级不生效」。只挂上面这些数据子目录即可。 + 访问:`http://localhost` 也可以使用 docker-compose 本地构建: @@ -302,10 +309,17 @@ docker pull ghcr.io/jefferyhcool/bilinote:latest # 运行容器 docker run -d -p 80:80 \ -v bilinote-data:/app/backend/data \ + -v bilinote-config:/app/backend/config \ + -v bilinote-static:/app/backend/static \ + -v bilinote-models:/app/backend/models \ --name bilinote \ ghcr.io/jefferyhcool/bilinote:latest ``` +上面四个卷分别持久化:`data`(SQLite 数据库 + 生成的笔记)、`config`(LLM 供应商配置 / Cookie / 转写设置)、`static`(笔记引用的视频截图)、`models`(Whisper 模型缓存,可选,避免每次重新下载)。这样 `docker pull` 升级新镜像、删旧容器重建后,配置和历史都不会丢。 + +> ⚠️ **不要**用 `-v 卷名:/app/backend` 挂整个后端目录——命名卷会用首次启动时的镜像内容固化,之后 `docker pull` 升级也会被旧代码盖住,导致「升级不生效」。只挂上面这些数据子目录即可。 + 访问:`http://localhost` 也可以使用 docker-compose 本地构建: