# Stage 1: Build the React app FROM node:16-alpine AS build # Set working directory WORKDIR /app # Copy package.json and package-lock.json COPY package*.json ./ # Install dependencies RUN npm install # Copy the rest of the application code COPY . . # Build the React app RUN npm run build # Stage 2: Serve the built app with a lightweight web server FROM nginx:alpine # Install necessary packages and set up a non-root user RUN apk add --no-cache shadow \ && useradd -u 1001 -U -d /home/user -s /bin/bash user \ && mkdir -p /home/user \ && chown -R user:user /home/user # Install nginx and set permissions RUN apk add --no-cache nginx \ && mkdir -p /var/cache/nginx /var/log/nginx /var/lib/nginx /var/run \ && touch /var/run/nginx.pid \ && chown -R user:user /var/cache/nginx /var/log/nginx /var/lib/nginx /var/run/nginx.pid # Switch to the root user to perform privileged operations USER root # Remove the default Nginx configuration file RUN rm /etc/nginx/conf.d/default.conf # Copy the built files from the previous stage COPY --from=build /app/dist /usr/share/nginx/html # Replace the default nginx.conf with our configuration COPY nginx.conf /etc/nginx/conf.d # Change ownership of the necessary directories and files to the non-root user RUN chown -R user:user /usr/share/nginx/html /etc/nginx/conf.d /var/cache/nginx /var/run /var/log/nginx # Switch back to the "user" user USER user # Expose port 7860 EXPOSE 7860 # Start Nginx server CMD ["nginx", "-g", "daemon off;"]