52 lines
1.5 KiB
Docker
52 lines
1.5 KiB
Docker
FROM oven/bun:1.3 AS base
|
|
WORKDIR /app
|
|
|
|
# Install dependencies
|
|
FROM base AS deps
|
|
# Copy root package files and lockfile first
|
|
COPY package.json bun.lock ./
|
|
# Copy workspace structure - all package.json files needed for workspace resolution
|
|
COPY packages ./packages
|
|
COPY apps ./apps
|
|
# Install all dependencies (bun will resolve workspace dependencies)
|
|
# Note: We copy full directories but bun only needs package.json files for resolution
|
|
RUN bun install --frozen-lockfile
|
|
|
|
# Build stage
|
|
FROM base AS build
|
|
COPY --from=deps /app/node_modules ./node_modules
|
|
COPY --from=deps /app/packages ./packages
|
|
# Copy backend source
|
|
COPY apps/backend ./apps/backend
|
|
# Build backend
|
|
WORKDIR /app/apps/backend
|
|
RUN bun run build
|
|
|
|
# Production stage
|
|
FROM base AS production
|
|
WORKDIR /app
|
|
|
|
# Copy dependencies and built files
|
|
COPY --from=deps /app/node_modules ./node_modules
|
|
COPY --from=deps /app/packages ./packages
|
|
# Copy source code (needed for migrations and tests)
|
|
COPY --from=build /app/apps/backend/src ./apps/backend/src
|
|
COPY --from=build /app/apps/backend/dist ./apps/backend/dist
|
|
COPY --from=build /app/apps/backend/drizzle ./apps/backend/drizzle
|
|
COPY --from=build /app/apps/backend/package.json ./apps/backend/
|
|
COPY --from=build /app/apps/backend/tsconfig.json ./apps/backend/
|
|
COPY --from=build /app/apps/backend/drizzle.config.ts ./apps/backend/
|
|
|
|
# Set working directory to backend
|
|
WORKDIR /app/apps/backend
|
|
|
|
# Set environment to production
|
|
ENV NODE_ENV=production
|
|
|
|
# Expose port
|
|
EXPOSE 3000
|
|
|
|
# Default command (can be overridden)
|
|
CMD ["bun", "run", "start"]
|
|
|