SportBuddy/apps/backend/Dockerfile
2025-10-26 15:44:27 +01:00

51 lines
1.4 KiB
Docker

# Unified Dockerfile for Backend (Development & Production)
# Usage:
# Development: docker-compose up (uses 'development' target)
# Production: docker build --target production -t sportbuddy-backend .
FROM node:alpine AS base
RUN apk add --no-cache openssl libc6-compat
WORKDIR /app
# Stage 1: Install dependencies
FROM base AS deps
COPY package*.json ./
RUN npm install
# Stage 2: Development (hot reload with volume mounts)
FROM base AS development
COPY package*.json ./
RUN npm install
COPY prisma ./prisma/
EXPOSE 3001
CMD ["sh", "-c", "npx prisma generate && npx prisma db push && npm run dev"]
# Stage 3: Build for production
FROM base AS builder
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npx prisma generate
ENV NEXT_TELEMETRY_DISABLED=1
RUN npm run build
# Stage 4: Production runtime
FROM base AS production
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 nextjs
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma
USER nextjs
EXPOSE 3001
ENV PORT=3001
ENV HOSTNAME="0.0.0.0"
CMD ["node", "server.js"]