chore: 优化 Docker 构建以适配中国服务器网络环境
- apt-get 切换阿里云镜像(http://),解决 slim 镜像无 ca-certificates 的 https 问题 - pnpm 切换 npmmirror 注册源,加速依赖下载 - 修复 better-sqlite3 编译:hoisted 模式、onlyBuiltDependencies、显式 rebuild - 新增 mkdir -p data 避免容器启动时数据目录缺失 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -15,7 +15,12 @@
|
|||||||
"Bash(pip show:*)",
|
"Bash(pip show:*)",
|
||||||
"Bash(pip3 show:*)",
|
"Bash(pip3 show:*)",
|
||||||
"WebFetch(domain:ai.njcqtechaicoding.com)",
|
"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)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
Dockerfile
17
Dockerfile
@@ -2,7 +2,7 @@ FROM node:22-slim AS frontend
|
|||||||
RUN corepack enable pnpm
|
RUN corepack enable pnpm
|
||||||
WORKDIR /app/web
|
WORKDIR /app/web
|
||||||
COPY web/package.json ./
|
COPY web/package.json ./
|
||||||
RUN pnpm install
|
RUN pnpm config set registry https://registry.npmmirror.com && pnpm install
|
||||||
COPY web/ ./
|
COPY web/ ./
|
||||||
RUN pnpm run build
|
RUN pnpm run build
|
||||||
|
|
||||||
@@ -10,14 +10,27 @@ FROM node:22-slim AS production
|
|||||||
RUN corepack enable pnpm
|
RUN corepack enable pnpm
|
||||||
WORKDIR /app
|
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
|
# 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/*
|
RUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
COPY server/package.json ./server/
|
COPY server/package.json ./server/
|
||||||
WORKDIR /app/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/ ./
|
COPY server/ ./
|
||||||
|
RUN mkdir -p data
|
||||||
COPY --from=frontend /app/web/dist /app/web/dist
|
COPY --from=frontend /app/web/dist /app/web/dist
|
||||||
|
|
||||||
EXPOSE 3456
|
EXPOSE 3456
|
||||||
|
|||||||
@@ -16,5 +16,8 @@
|
|||||||
"@types/express": "^5.0.0",
|
"@types/express": "^5.0.0",
|
||||||
"@types/node": "^22.10.0",
|
"@types/node": "^22.10.0",
|
||||||
"typescript": "^5.7.0"
|
"typescript": "^5.7.0"
|
||||||
|
},
|
||||||
|
"pnpm": {
|
||||||
|
"onlyBuiltDependencies": ["better-sqlite3"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user