fix: docker files for db and app (#1127)

This commit is contained in:
Gaurav Verma
2025-06-11 02:02:39 +05:30
committed by GitHub
parent 38892ffeb6
commit a822084ee7
3 changed files with 46 additions and 40 deletions

View File

@@ -44,7 +44,7 @@ services:
depends_on:
db:
condition: service_healthy
command: ['bun', 'run', 'db:migrate']
command: ['pnpm', 'run', 'db:migrate']
restart: 'no'
db:

View File

@@ -1,7 +1,7 @@
# ========================================
# Base Stage: Alpine Linux with Bun
# ========================================
FROM oven/bun:alpine AS base
FROM node:22-alpine AS base
# ========================================
# Dependencies Stage: Install Dependencies
@@ -11,15 +11,16 @@ RUN apk add --no-cache libc6-compat
WORKDIR /app
# Install turbo globally
RUN bun install -g turbo
RUN npm install -g pnpm
RUN pnpm install -g turbo
COPY package.json bun.lock turbo.json ./
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./
RUN mkdir -p apps packages
COPY apps/*/package.json ./apps/
COPY packages/*/package.json ./packages/
COPY packages/tsconfig/ ./packages/tsconfig/
COPY packages/ ./packages/
RUN pnpm install --prod --ignore-scripts
RUN bun install --omit dev --ignore-scripts
# ========================================
# Builder Stage: Build the Application
@@ -27,23 +28,24 @@ RUN bun install --omit dev --ignore-scripts
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
RUN npm install -g pnpm wrangler
# Copy workspace configuration and source code
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./
COPY . .
# Installing with full context to prevent missing dependencies error
RUN bun install --omit dev --ignore-scripts
ENV CI=true
# Required for standalone nextjs build
WORKDIR /app/apps/mail
RUN bun install sharp
# Install all dependencies (including devDependencies for build)
RUN pnpm install --frozen-lockfile
# Set environment variables for build
ENV NEXT_TELEMETRY_DISABLED=1 \
NODE_ENV=production \
DOCKER_BUILD=true
WORKDIR /app
RUN cd apps/mail && bun run build
# Build the application
RUN cd apps/mail && pnpm run build
# ========================================
# Runner Stage: Production Environment
@@ -51,8 +53,10 @@ RUN cd apps/mail && bun run build
FROM base AS runner
WORKDIR /app
RUN addgroup -S -g 1001 bunjs && \
adduser -S -u 1001 nextjs -G bunjs
RUN npm install -g wrangler
RUN addgroup -S -g 1001 pnpm && \
adduser -S -u 1001 nextjs -G pnpm
# Set environment variables for build
ENV NODE_ENV=production \
@@ -64,12 +68,8 @@ ENV NODE_ENV=production \
COPY scripts/docker/ /app/scripts
RUN chmod -R +x /app/scripts/*
# Copy public assets
COPY --from=builder --chown=nextjs:bunjs /app/apps/mail/public ./apps/mail/public
# Leverage output traces to reduce image size (standalone output)
COPY --from=builder --chown=nextjs:bunjs /app/apps/mail/.next/standalone ./
COPY --from=builder --chown=nextjs:bunjs /app/apps/mail/.next/static ./apps/mail/.next/static
# Copy the entire built application
COPY --from=builder --chown=nextjs:pnpm /app ./
# Switch to non-root user
USER nextjs

View File

@@ -1,30 +1,36 @@
# ========================================
# Dependencies Stage: Install Dependencies
# ========================================
FROM oven/bun:alpine AS deps
FROM node:22-alpine AS deps
WORKDIR /app
# Copy only package files needed for migrations
COPY package.json bun.lock turbo.json ./
COPY packages/db/package.json ./packages/db/
COPY packages/tsconfig/base.json ./packages/tsconfig/base.json
COPY packages/tsconfig/package.json ./packages/tsconfig/
RUN npm install -g pnpm
# Install minimal dependencies in one layer
RUN bun install --omit dev --ignore-scripts && \
bun install --omit dev --ignore-scripts drizzle-kit drizzle-orm postgres
# Copy workspace configuration and package files
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./
COPY apps/server/package.json ./apps/server/
COPY packages/ ./packages/
COPY patches/ ./patches/
# Install dependencies needed for migrations
RUN pnpm install --frozen-lockfile
# ========================================
# Runner Stage: Production Environment
# ========================================
FROM oven/bun:alpine AS runner
FROM node:22-alpine AS runner
WORKDIR /app
# Copy only the necessary files from deps
COPY --from=deps /app/node_modules ./node_modules
COPY packages/db/drizzle.config.ts ./packages/db/drizzle.config.ts
COPY packages/db/src ./packages/db/src
COPY packages/db/migrations ./packages/db/migrations
COPY packages/db/package.json ./packages/db/package.json
RUN npm install -g pnpm
WORKDIR /app/packages/db
# Copy workspace configuration and dependencies
COPY --from=deps /app/node_modules ./node_modules
COPY --from=deps /app/package.json ./package.json
COPY --from=deps /app/pnpm-lock.yaml ./pnpm-lock.yaml
COPY --from=deps /app/pnpm-workspace.yaml ./pnpm-workspace.yaml
# Copy server app with database configuration
COPY apps/server/ ./apps/server/
COPY packages/ ./packages/
WORKDIR /app/apps/server