Spaces:
Running
Running
# Build stage | |
FROM node:20-slim AS builder | |
# Set working directory | |
WORKDIR /app | |
# Copy package files | |
COPY package*.json ./ | |
# Install dependencies | |
RUN npm install | |
# Copy project files | |
COPY . . | |
# Build the app | |
RUN npm run build | |
# Production stage | |
FROM nginx:alpine | |
# Create nginx cache directories and set permissions | |
RUN mkdir -p /var/cache/nginx \ | |
&& chown -R nginx:nginx /var/cache/nginx \ | |
&& mkdir -p /var/log/nginx \ | |
&& chown -R nginx:nginx /var/log/nginx \ | |
&& mkdir -p /var/lib/nginx \ | |
&& chown -R nginx:nginx /var/lib/nginx \ | |
&& touch /var/run/nginx.pid \ | |
&& chown -R nginx:nginx /var/run/nginx.pid \ | |
&& chown -R nginx:nginx /etc/nginx | |
# Copy built assets from builder stage | |
COPY --from=builder /app/dist /usr/share/nginx/html | |
# Copy nginx configuration | |
COPY nginx.conf /etc/nginx/conf.d/default.conf | |
# Update nginx configuration to run as non-root | |
RUN sed -i '/user nginx;/d' /etc/nginx/nginx.conf \ | |
&& sed -i 's,listen 80;,listen 7860;,' /etc/nginx/conf.d/default.conf \ | |
&& sed -i '/user/d' /etc/nginx/nginx.conf \ | |
&& chown -R nginx:nginx /usr/share/nginx/html | |
# Switch to non-root user | |
USER nginx | |
# Expose port 7860 (default for Hugging Face Spaces) | |
EXPOSE 7860 | |
# Start nginx | |
CMD ["nginx", "-g", "daemon off;"] |