|
|
|
@ -1,46 +1,29 @@ |
|
|
|
# 多阶段构建 - 构建阶段 |
|
|
|
FROM oven/bun:alpine AS builder |
|
|
|
|
|
|
|
WORKDIR /app |
|
|
|
|
|
|
|
# 复制依赖文件 |
|
|
|
COPY package.json bun.lockb ./ |
|
|
|
|
|
|
|
# 安装所有依赖(包括开发依赖) |
|
|
|
RUN bun install --frozen-lockfile |
|
|
|
|
|
|
|
# 复制源代码 |
|
|
|
COPY . . |
|
|
|
|
|
|
|
# 构建阶段(如果需要) |
|
|
|
RUN bun run build || true |
|
|
|
|
|
|
|
# 生产阶段 |
|
|
|
FROM oven/bun:alpine AS production |
|
|
|
|
|
|
|
# 创建非root用户 |
|
|
|
RUN addgroup -g 1001 -S nodejs && \ |
|
|
|
adduser -S bun -u 1001 |
|
|
|
|
|
|
|
WORKDIR /app |
|
|
|
|
|
|
|
# 从构建阶段复制依赖 |
|
|
|
COPY --from=builder --chown=bun:nodejs /app/node_modules ./node_modules |
|
|
|
COPY --from=builder --chown=bun:nodejs /app/package.json ./ |
|
|
|
COPY --from=builder --chown=bun:nodejs /app/bun.lockb ./ |
|
|
|
COPY --from=builder --chown=bun:nodejs /app/knexfile.mjs ./ |
|
|
|
# 安装构建依赖 |
|
|
|
RUN apk add --no-cache python3 make g++ gcc dos2unix |
|
|
|
|
|
|
|
# 复制应用代码 |
|
|
|
COPY --from=builder --chown=bun:nodejs /app/src ./src |
|
|
|
COPY --from=builder --chown=bun:nodejs /app/public ./public |
|
|
|
# 复制应用文件 |
|
|
|
COPY --chown=bun:bun ./package.json ./package.json |
|
|
|
COPY --chown=bun:bun ./bun.lockb ./bun.lockb |
|
|
|
COPY --chown=bun:bun ./knexfile.mjs ./knexfile.mjs |
|
|
|
COPY --chown=bun:bun ./jsconfig.json ./jsconfig.json |
|
|
|
COPY --chown=bun:bun ./src ./src |
|
|
|
COPY --chown=bun:bun ./public ./public |
|
|
|
COPY --chown=bun:bun ./entrypoint.sh ./entrypoint.sh |
|
|
|
|
|
|
|
# 复制并设置入口脚本权限 |
|
|
|
COPY --chown=bun:nodejs entrypoint.sh ./entrypoint.sh |
|
|
|
RUN chmod +x ./entrypoint.sh |
|
|
|
# 安装生产依赖和修复 entrypoint.sh |
|
|
|
RUN bun install --frozen-lockfile --production --registry https://registry.npmjs.org && \ |
|
|
|
# 修复 entrypoint.sh 的换行符 |
|
|
|
dos2unix ./entrypoint.sh && \ |
|
|
|
chmod +x ./entrypoint.sh |
|
|
|
|
|
|
|
# 创建必要的目录并设置权限 |
|
|
|
RUN mkdir -p /app/database /app/logs && \ |
|
|
|
chown -R bun:nodejs /app/database /app/logs |
|
|
|
RUN mkdir -p ./database ./logs && \ |
|
|
|
chown -R bun:bun ./database ./logs |
|
|
|
|
|
|
|
# 设置环境变量 |
|
|
|
ENV NODE_ENV=production |
|
|
|
|