imkFinal/backend/Dockerfile
2025-03-31 06:27:21 +02:00

60 lines
1.1 KiB
Docker

# backend/Dockerfile
FROM node:18-alpine
# Add build arguments
ARG NODE_ENV
ARG API_URL
ARG CORS_ORIGIN
ARG DATABASE_URL
ARG JWT_SECRET
ARG SMTP_HOST
ARG SMTP_PORT
ARG SMTP_USER
ARG SMTP_PASS
ARG EMAIL_FROM
# Set environment variables from build args
ENV NODE_ENV=${NODE_ENV}
ENV API_URL=${API_URL}
ENV CORS_ORIGIN=${CORS_ORIGIN}
ENV DATABASE_URL=${DATABASE_URL}
ENV JWT_SECRET=${JWT_SECRET}
ENV SMTP_HOST=${SMTP_HOST}
ENV SMTP_PORT=${SMTP_PORT}
ENV SMTP_USER=${SMTP_USER}
ENV SMTP_PASS=${SMTP_PASS}
ENV EMAIL_FROM=${EMAIL_FROM}
WORKDIR /usr/src/app
# Install necessary tools
RUN apk add --no-cache curl wget
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy prisma schema
COPY prisma ./prisma/
# Generate Prisma client
RUN npx prisma generate
# Copy source code
COPY . .
# Build the application
RUN npm run build
# Expose port
EXPOSE 3000
# Add healthcheck
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD wget -q --spider http://localhost:3000/health || exit 1
# Start the application
CMD ["npm", "run", "start:prod"]