From 013c0f14c4c2b4f4f0f16c517a675c935c67382d Mon Sep 17 00:00:00 2001 From: YANG JIANKUAN Date: Tue, 14 Apr 2026 14:23:38 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E4=BC=98=E5=8C=96=20Docker=20?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E4=BB=A5=E9=80=82=E9=85=8D=E4=B8=AD=E5=9B=BD?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E7=BD=91=E7=BB=9C=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - apt-get 切换阿里云镜像(http://),解决 slim 镜像无 ca-certificates 的 https 问题 - pnpm 切换 npmmirror 注册源,加速依赖下载 - 修复 better-sqlite3 编译:hoisted 模式、onlyBuiltDependencies、显式 rebuild - 新增 mkdir -p data 避免容器启动时数据目录缺失 Co-Authored-By: Claude Sonnet 4.6 --- .claude/settings.local.json | 7 ++++++- Dockerfile | 17 +++++++++++++++-- server/package.json | 3 +++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index e8d2cee..9ffacb6 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -15,7 +15,12 @@ "Bash(pip show:*)", "Bash(pip3 show:*)", "WebFetch(domain:ai.njcqtechaicoding.com)", - "Bash(CLAUDE_SKILL_DIR=/Users/kid/.claude/skills/web-access node:*)" + "Bash(CLAUDE_SKILL_DIR=/Users/kid/.claude/skills/web-access node:*)", + "Bash(docker build:*)", + "Bash(docker run:*)", + "Bash(docker stop:*)", + "Bash(docker compose:*)", + "Bash(ssh-keyscan 118.195.187.179)" ] } } diff --git a/Dockerfile b/Dockerfile index f947905..60533f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM node:22-slim AS frontend RUN corepack enable pnpm WORKDIR /app/web COPY web/package.json ./ -RUN pnpm install +RUN pnpm config set registry https://registry.npmmirror.com && pnpm install COPY web/ ./ RUN pnpm run build @@ -10,14 +10,27 @@ FROM node:22-slim AS production RUN corepack enable pnpm WORKDIR /app +# Switch to Aliyun mirror for faster apt downloads in China +RUN sed -i \ + -e 's|http://deb.debian.org|http://mirrors.aliyun.com|g' \ + -e 's|http://security.debian.org|http://mirrors.aliyun.com|g' \ + /etc/apt/sources.list.d/debian.sources + # Build tools needed to compile better-sqlite3 native addon RUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt/lists/* COPY server/package.json ./server/ WORKDIR /app/server -RUN pnpm install --prod +# hoisted mode: flat node_modules so native addons (better-sqlite3) can locate their .node files +# pnpm v10 blocks build scripts by default; onlyBuiltDependencies allows better-sqlite3 to compile, +# and explicit rebuild ensures the native addon is built even if install skipped it. +RUN echo "node-linker=hoisted" > .npmrc && \ + pnpm config set registry https://registry.npmmirror.com && \ + pnpm install --prod && \ + pnpm rebuild better-sqlite3 COPY server/ ./ +RUN mkdir -p data COPY --from=frontend /app/web/dist /app/web/dist EXPOSE 3456 diff --git a/server/package.json b/server/package.json index 2123109..5d5c229 100644 --- a/server/package.json +++ b/server/package.json @@ -16,5 +16,8 @@ "@types/express": "^5.0.0", "@types/node": "^22.10.0", "typescript": "^5.7.0" + }, + "pnpm": { + "onlyBuiltDependencies": ["better-sqlite3"] } }