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/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 < ⚠️ **不要**用 `-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 本地构建: