From ab4d5ee61740c53194d2195bba816f544447603b Mon Sep 17 00:00:00 2001 From: phaichayon Date: Thu, 16 Jul 2026 16:19:01 +0700 Subject: [PATCH 1/2] edit docker file --- Dockerfile | 77 +++++++++--------------------------------- docker-bun-build.log | Bin 0 -> 11628 bytes docker-node-build.log | Bin 0 -> 22464 bytes 3 files changed, 16 insertions(+), 61 deletions(-) create mode 100644 docker-bun-build.log create mode 100644 docker-node-build.log diff --git a/Dockerfile b/Dockerfile index 4f6b62b..9ba4819 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,73 +1,28 @@ -# ============================================ -# Stage 1: Install dependencies -# ============================================ - -ARG NODE_VERSION=22-slim - -FROM node:${NODE_VERSION} AS dependencies - +FROM node:20-bookworm-slim AS base WORKDIR /app - -# Install bun to use bun.lock for dependency resolution -RUN npm install -g bun - -# Copy package-related files to leverage Docker cache -COPY package.json bun.lock* ./ - -# Install dependencies with frozen lockfile for reproducible builds -RUN --mount=type=cache,target=/root/.bun/install/cache \ - bun install --no-save --frozen-lockfile - -# ============================================ -# Stage 2: Build the Next.js application -# ============================================ - -FROM node:${NODE_VERSION} AS builder - -WORKDIR /app - -COPY --from=dependencies /app/node_modules ./node_modules -COPY . . - -ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 -# Build-time env vars — override these with --build-arg or in compose.yml -ARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY -ARG NEXT_PUBLIC_CLERK_SIGN_IN_URL=/auth/sign-in -ARG NEXT_PUBLIC_CLERK_SIGN_UP_URL=/auth/sign-up -ARG NEXT_PUBLIC_SENTRY_DISABLED=true +FROM base AS deps +COPY package.json package-lock.json ./ +RUN npm install --no-audit --no-fund +FROM base AS builder +ENV NODE_ENV=production ENV BUILD_STANDALONE=true - +ARG NEXT_PUBLIC_SENTRY_DISABLED=true +ENV NEXT_PUBLIC_SENTRY_DISABLED=${NEXT_PUBLIC_SENTRY_DISABLED} +COPY --from=deps /app/node_modules ./node_modules +COPY . . RUN npm run build -# ============================================ -# Stage 3: Production runner -# ============================================ - -FROM node:${NODE_VERSION} AS runner - +FROM node:20-bookworm-slim AS runner WORKDIR /app - ENV NODE_ENV=production -ENV PORT=3000 -ENV HOSTNAME="0.0.0.0" ENV NEXT_TELEMETRY_DISABLED=1 - -# Copy public assets -COPY --from=builder --chown=node:node /app/public ./public - -# Create .next dir with correct permissions for prerender cache -RUN mkdir .next && chown node:node .next - -# Copy standalone output and static files -COPY --from=builder --chown=node:node /app/.next/standalone ./ -COPY --from=builder --chown=node:node /app/.next/static ./.next/static - -# Run as non-root user -USER node - +ENV PORT=3000 +ENV HOSTNAME=0.0.0.0 +COPY --from=builder /app/public ./public +COPY --from=builder /app/.next/standalone ./ +COPY --from=builder /app/.next/static ./.next/static EXPOSE 3000 - CMD ["node", "server.js"] diff --git a/docker-bun-build.log b/docker-bun-build.log new file mode 100644 index 0000000000000000000000000000000000000000..5a8c79bce653eb89883dcf1fc38da73b0f5d7fb1 GIT binary patch literal 11628 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 Date: Thu, 16 Jul 2026 16:20:50 +0700 Subject: [PATCH 2/2] commit --- .husky/pre-commit | 1 - .husky/pre-push | 1 - Dockerfile.bun | 68 ----------------------------------------------- 3 files changed, 70 deletions(-) delete mode 100644 .husky/pre-commit delete mode 100644 .husky/pre-push delete mode 100644 Dockerfile.bun diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100644 index 2312dc5..0000000 --- a/.husky/pre-commit +++ /dev/null @@ -1 +0,0 @@ -npx lint-staged diff --git a/.husky/pre-push b/.husky/pre-push deleted file mode 100644 index e4b1180..0000000 --- a/.husky/pre-push +++ /dev/null @@ -1 +0,0 @@ -bun run build \ No newline at end of file diff --git a/Dockerfile.bun b/Dockerfile.bun deleted file mode 100644 index 2ce7f93..0000000 --- a/Dockerfile.bun +++ /dev/null @@ -1,68 +0,0 @@ -# ============================================ -# Stage 1: Install dependencies -# ============================================ - -FROM oven/bun:1 AS dependencies - -WORKDIR /app - -# Copy package-related files to leverage Docker cache -COPY package.json bun.lock* ./ - -# Install dependencies with frozen lockfile for reproducible builds -RUN --mount=type=cache,target=/root/.bun/install/cache \ - bun install --no-save --frozen-lockfile - -# ============================================ -# Stage 2: Build the Next.js application -# ============================================ - -FROM oven/bun:1 AS builder - -WORKDIR /app - -COPY --from=dependencies /app/node_modules ./node_modules -COPY . . - -ENV NODE_ENV=production -ENV NEXT_TELEMETRY_DISABLED=1 - -# Build-time env vars — override these with --build-arg or in compose.yml -ARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY -ARG NEXT_PUBLIC_CLERK_SIGN_IN_URL=/auth/sign-in -ARG NEXT_PUBLIC_CLERK_SIGN_UP_URL=/auth/sign-up -ARG NEXT_PUBLIC_SENTRY_DISABLED=true - -ENV BUILD_STANDALONE=true - -RUN bun run build - -# ============================================ -# Stage 3: Production runner -# ============================================ - -FROM oven/bun:1 AS runner - -WORKDIR /app - -ENV NODE_ENV=production -ENV PORT=3000 -ENV HOSTNAME="0.0.0.0" -ENV NEXT_TELEMETRY_DISABLED=1 - -# Copy public assets -COPY --from=builder --chown=bun:bun /app/public ./public - -# Create .next dir with correct permissions for prerender cache -RUN mkdir .next && chown bun:bun .next - -# Copy standalone output and static files -COPY --from=builder --chown=bun:bun /app/.next/standalone ./ -COPY --from=builder --chown=bun:bun /app/.next/static ./.next/static - -# Run as non-root user -USER bun - -EXPOSE 3000 - -CMD ["bun", "server.js"]