2
0

Dockerfile.dev 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # syntax=docker/dockerfile:1
  2. FROM --platform=$BUILDPLATFORM oven/bun:debian AS build-base
  3. WORKDIR /app
  4. FROM build-base AS deps
  5. COPY package.json ./
  6. RUN bun install
  7. FROM deps AS build
  8. COPY . .
  9. # 接收构建参数
  10. ARG APP_VERSION=dev
  11. # 设置为环境变量供 Next.js 使用
  12. ENV NEXT_TELEMETRY_DISABLED=1
  13. ENV NEXT_PUBLIC_APP_VERSION=$APP_VERSION
  14. # 构建时需要的环境变量 (避免数据库初始化错误)
  15. # 这些是占位符,实际运行时会被真实值覆盖
  16. ENV DSN="postgres://placeholder:placeholder@localhost:5432/placeholder"
  17. ENV REDIS_URL="redis://localhost:6379"
  18. # 使用 BuildKit 缓存加速 Next.js 构建
  19. RUN --mount=type=cache,target=/app/.next/cache \
  20. bun run build
  21. # 运行阶段:使用 Node.js(避免 Bun 流式响应内存泄漏 Issue #18488)
  22. FROM node:trixie-slim AS runner
  23. ENV NODE_ENV=production
  24. ENV PORT=3000
  25. ENV HOST=0.0.0.0
  26. WORKDIR /app
  27. # 安装 PostgreSQL 客户端工具(用于数据库备份/恢复功能)和 curl(用于健康检查)
  28. # node:trixie-slim 基于 Debian Trixie,需手动安装 postgresql-client
  29. # 使用 BuildKit 缓存挂载加速 APT 安装
  30. RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
  31. --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
  32. apt-get update && \
  33. apt-get install -y curl ca-certificates postgresql-client
  34. COPY --from=build --chown=node:node /app/public ./public
  35. COPY --from=build --chown=node:node /app/drizzle ./drizzle
  36. COPY --from=build --chown=node:node /app/messages ./messages
  37. COPY --from=build --chown=node:node /app/.next/standalone ./
  38. # Server Actions live inside .next/server; copy it or Next.js cannot resolve action IDs.
  39. COPY --from=build --chown=node:node /app/.next/server ./.next/server
  40. COPY --from=build --chown=node:node /app/.next/static ./.next/static
  41. USER node
  42. EXPOSE 3000
  43. CMD ["node", "server.js"]