Skip to content

fix: repair Docker image build and clean production audit - #216

Open
libertydragonn wants to merge 1 commit into
Decohererk:mainfrom
libertydragonn:redo/deps-docker-build
Open

libertydragonn wants to merge 1 commit into
Decohererk:mainfrom
libertydragonn:redo/deps-docker-build

Conversation

@libertydragonn

Copy link
Copy Markdown
Contributor

背景

这是把之前 #214 / #215 拆小重做的第 1 个 PR,只包含依赖审计和 Docker 构建修复,不含任何 auth / 播放 / spider 改动,方便单独 review 和合并。基于当前最新 main 重新开分支。

问题

之前 #214 把生产审计的 pnpm overrides 放进了新增的 pnpm-workspace.yaml,但 Dockerfile 的 deps 阶段只 COPY package.json pnpm-lock.yaml,没有拷贝 pnpm-workspace.yaml。结果容器内 pnpm install --frozen-lockfile 直接报错,镜像无法构建:

ERR_PNPM_LOCKFILE_CONFIG_MISMATCH
Cannot proceed with the frozen installation. The current "overrides"
configuration doesn't match the value found in the lockfile

改动

  • 把生产审计修复以 pnpm overrides 形式放在 pnpm-workspace.yaml,并刷新 lockfile,使 pnpm audit --prod 干净。
  • Dockerfile deps 阶段补上 COPY ... pnpm-workspace.yaml,否则 pnpm install --frozen-lockfile 失败、镜像构建不出来。
  • Dockerfile 里把 pnpm 从 latest 固定到 packageManager 声明的版本(10.14.0),保证镜像构建可复现。
  • .dockerignore 增加 node_modules / .next / .git:否则宿主机 checkout 里(可能是非 Linux 的)node_modules 会在 COPY . . 时覆盖镜像里已正确安装的依赖,导致 next buildCannot find module next

验证(真实 Docker 部署)

  • docker build -t decotv-test . — 成功(修复前会在 deps 阶段因 lockfile mismatch 失败)。
  • docker run 该镜像 + kvrocks,实测登录链路:
    • 站长正确密码 → 200,错误密码 → 401
    • 普通用户(DB 明文密码)登录 → 200
  • pnpm audit --prod — 通过
  • pnpm typecheck — 通过
  • pnpm build — 通过

说明

这个 PR 只修构建和依赖,行为上不改变登录/鉴权逻辑,属于低风险基础修复。后续 auth cookie、密码哈希、SSRF、spider.jar、播放探测等会各自拆成独立 PR,并附各自的 Docker 部署验证结果。

- Move production audit fixes into pnpm overrides (pnpm-workspace.yaml)
  and refresh the lockfile so pnpm audit --prod is clean.
- Copy pnpm-workspace.yaml into the Docker deps stage: without it
  pnpm install --frozen-lockfile fails with
  ERR_PNPM_LOCKFILE_CONFIG_MISMATCH and the image cannot build.
- Pin pnpm in the Dockerfile to the packageManager version (10.14.0)
  instead of latest so image builds stay reproducible.
- Ignore node_modules/.next/.git in .dockerignore so a host checkout's
  (possibly non-Linux) node_modules can't clobber the image's installed
  dependencies during COPY.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant