# 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 ./ COPY prisma ./prisma/ # Install dependencies RUN npm install --omit-dev # Copy prisma schema # COPY prisma ./prisma/ # Generate Prisma client RUN npx prisma generate RUN npx prisma migrate deploy # Copy source code COPY . . # Build the application RUN npm run build # Expose port EXPOSE 3000 # ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh /wait-for-it.sh # RUN chmod +x /wait-for-it.sh # 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"]