From 9f8de46d0624b24458fcaaf5ba86bbbf88360769 Mon Sep 17 00:00:00 2001 From: mohamad Date: Sun, 1 Jun 2025 16:38:29 +0200 Subject: [PATCH] refactor: Transition production Dockerfile to use Nginx for serving built assets and streamline environment variable handling --- fe/Dockerfile.prod | 47 +++++++++++++++++----------------------------- 1 file changed, 17 insertions(+), 30 deletions(-) diff --git a/fe/Dockerfile.prod b/fe/Dockerfile.prod index a0c2320..c47dcb8 100644 --- a/fe/Dockerfile.prod +++ b/fe/Dockerfile.prod @@ -29,43 +29,30 @@ RUN npm ci COPY . . # Set environment variables for build -ENV NODE_ENV=production +ARG VITE_API_URL +ENV VITE_API_URL=${VITE_API_URL} # Build the application RUN npm run build-only # Production stage -FROM node:slim AS production - -# Install serve globally -RUN npm install -g serve - -# Set working directory -WORKDIR /app +FROM nginx:alpine # Copy built assets from build stage -COPY --from=build /app/dist . +COPY --from=build /app/dist /usr/share/nginx/html -# Create a default static.json for serve to handle SPA routing -RUN echo '{ \n "rewrites": [ \n { "source": "**", "destination": "/index.html" } \n ] \n}' > static.json +# Copy nginx configuration for SPA routing +RUN echo 'server { \ + listen 80; \ + location / { \ + root /usr/share/nginx/html; \ + index index.html; \ + try_files $uri $uri/ /index.html; \ + } \ +}' > /etc/nginx/conf.d/default.conf -# Create a script to inject environment variables at runtime -RUN echo '#!/bin/sh\n\ -cat > /app/env-config.js << EOL\n\ -window.ENV = {\n\ - VITE_API_URL: "${VITE_API_URL}",\n\ - VITE_SENTRY_DSN: "${VITE_SENTRY_DSN}",\n\ - VITE_ROUTER_MODE: "${VITE_ROUTER_MODE}"\n\ -};\n\ -EOL\n\ -serve -s . -l 3000' > /app/start.sh && chmod +x /app/start.sh +# Expose port 80 +EXPOSE 80 -# Expose port 3000 (serve default) -EXPOSE 3000 - -# Health check (optional, depends on serve capabilities or custom health endpoint) -# HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \ -# CMD curl -f http://localhost:3000/ || exit 1 - -# Start serve with environment variable injection -CMD ["/app/start.sh"] \ No newline at end of file +# Start nginx +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file -- 2.45.2