From f81d72ef43919f153567aa6227114fc06ad8b342 Mon Sep 17 00:00:00 2001 From: sususu Date: Wed, 19 Nov 2025 17:50:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=20Dockerfile.dev?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Dockerfile.dev 文件用于构建开发环境 - 使用 BuildKit 加速依赖安装和 Next.js 构建 --- deploy/Dockerfile.dev | 60 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 deploy/Dockerfile.dev diff --git a/deploy/Dockerfile.dev b/deploy/Dockerfile.dev new file mode 100644 index 000000000..6cf163f28 --- /dev/null +++ b/deploy/Dockerfile.dev @@ -0,0 +1,60 @@ +# syntax=docker/dockerfile:1 + +FROM --platform=$BUILDPLATFORM oven/bun:1.3.2-slim AS build-base +WORKDIR /app + +FROM build-base AS deps +COPY package.json bun.lock ./ +# 使用 BuildKit 缓存挂载加速依赖安装 +RUN --mount=type=cache,target=/root/.bun/install/cache \ + bun install --frozen-lockfile + +FROM deps AS build +COPY . . + +# 接收构建参数 +ARG APP_VERSION=dev + +# 设置为环境变量供 Next.js 使用 +ENV NEXT_TELEMETRY_DISABLED=1 +ENV NEXT_PUBLIC_APP_VERSION=$APP_VERSION + +# 构建时需要的环境变量 (避免数据库初始化错误) +# 这些是占位符,实际运行时会被真实值覆盖 +ENV DSN="postgres://placeholder:placeholder@localhost:5432/placeholder" +ENV REDIS_URL="redis://localhost:6379" + +# 使用 BuildKit 缓存加速 Next.js 构建 +RUN --mount=type=cache,target=/app/.next/cache \ + bun run build + +FROM node:22-slim AS runner +ENV NODE_ENV=production +ENV PORT=3000 +ENV HOST=0.0.0.0 +WORKDIR /app + +# 安装 PostgreSQL 18 客户端工具(用于数据库备份/恢复功能)和 curl(用于健康检查) +# 需要使用官方 PostgreSQL APT 仓库以获取最新版本 +# 使用 BuildKit 缓存挂载加速 APT 安装 +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \ + apt-get update && \ + apt-get install -y gnupg curl ca-certificates && \ + curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /usr/share/keyrings/postgresql-archive-keyring.gpg && \ + echo "deb [signed-by=/usr/share/keyrings/postgresql-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list && \ + apt-get update && \ + apt-get install -y postgresql-client-18 + +COPY --from=build --chown=node:node /app/public ./public +COPY --from=build --chown=node:node /app/drizzle ./drizzle +COPY --from=build --chown=node:node /app/messages ./messages +COPY --from=build --chown=node:node /app/.next/standalone ./ +# Server Actions live inside .next/server; copy it or Next.js cannot resolve action IDs. +COPY --from=build --chown=node:node /app/.next/server ./.next/server +COPY --from=build --chown=node:node /app/.next/static ./.next/static + +USER node +EXPOSE 3000 + +CMD ["node", "server.js"]