33 lines
1.3 KiB
Plaintext
33 lines
1.3 KiB
Plaintext
# Node.js Multi-stage build for React
|
|
FROM node:18-alpine AS builder
|
|
|
|
WORKDIR /app
|
|
COPY package*.json ./
|
|
RUN npm ci --only=production
|
|
COPY . .
|
|
RUN npm run build
|
|
|
|
# Production stage with simple Nginx
|
|
FROM nginx:alpine
|
|
|
|
# Copy built app
|
|
COPY --from=builder /app/build /usr/share/nginx/html
|
|
|
|
# Create simple nginx config for React SPA
|
|
RUN echo 'server {' > /etc/nginx/conf.d/default.conf && \
|
|
echo ' listen 80;' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' server_name localhost;' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' root /usr/share/nginx/html;' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' index index.html;' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' location / {' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' try_files $uri $uri/ /index.html;' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' }' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' location /health {' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' return 200 "healthy";' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' add_header Content-Type text/plain;' >> /etc/nginx/conf.d/default.conf && \
|
|
echo ' }' >> /etc/nginx/conf.d/default.conf && \
|
|
echo '}' >> /etc/nginx/conf.d/default.conf
|
|
|
|
EXPOSE 80
|
|
CMD ["nginx", "-g", "daemon off;"]
|