mirror of
https://github.com/Mail-0/Zero.git
synced 2026-03-03 03:57:01 +00:00
fix: docker files for db and app (#1127)
This commit is contained in:
@@ -44,7 +44,7 @@ services:
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
command: ['bun', 'run', 'db:migrate']
|
||||
command: ['pnpm', 'run', 'db:migrate']
|
||||
restart: 'no'
|
||||
|
||||
db:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user