Files
spotlightcam/backend/Dockerfile.prod

59 lines
1.2 KiB
Docker
Raw Permalink Normal View History

# Multi-stage build for production
# Stage 1: Build
FROM node:20-alpine AS builder
# Install OpenSSL for Prisma
RUN apk add --no-cache openssl
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install all dependencies (including devDependencies for Prisma generation)
RUN npm ci
# Copy application files
COPY . .
# Generate Prisma Client
RUN npx prisma generate
# Stage 2: Production
FROM node:20-alpine
# Install OpenSSL for Prisma
RUN apk add --no-cache openssl
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install only production dependencies
RUN npm ci --only=production
# Copy application files and generated Prisma Client from builder
COPY --from=builder /app/src ./src
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/scripts ./scripts
COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma
COPY --from=builder /app/node_modules/@prisma ./node_modules/@prisma
# Copy entrypoint script
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
# Set environment to production
ENV NODE_ENV=production
# Expose port
EXPOSE 3000
# Set entrypoint
ENTRYPOINT ["docker-entrypoint.sh"]
# Start the application
CMD ["node", "src/server.js"]