Spaces:
Sleeping
Sleeping
# Stage 1: Build stage | |
FROM node:22-alpine AS builder | |
# Add user | |
RUN useradd -m -u 1000 user | |
# Set working directory | |
WORKDIR /app | |
# Copy package files | |
COPY package*.json ./ | |
# Install dependencies | |
RUN npm ci --only=production=false | |
# Copy source code | |
COPY . . | |
# Build the application | |
RUN npm run build | |
# Stage 2: Production stage for Hugging Face Spaces | |
FROM nginx:alpine AS production | |
# Install wget for healthcheck | |
RUN apk add --no-cache wget | |
# Copy built application from builder stage | |
COPY --from=builder /app/dist /usr/share/nginx/html | |
# Copy custom nginx configuration for HF Spaces | |
COPY nginx.hf.conf /etc/nginx/nginx.conf | |
# Create nginx directories with proper permissions | |
RUN mkdir -p /var/cache/nginx/client_temp \ | |
/var/cache/nginx/proxy_temp \ | |
/var/cache/nginx/fastcgi_temp \ | |
/var/cache/nginx/uwsgi_temp \ | |
/var/cache/nginx/scgi_temp \ | |
/var/run/nginx && \ | |
chown -R user:user /var/cache/nginx /var/run/nginx && \ | |
chmod -R 755 /var/cache/nginx /var/run/nginx && \ | |
touch /var/run/nginx/nginx.pid && \ | |
chown user:user /var/run/nginx/nginx.pid | |
# Expose port 7860 (required by Hugging Face Spaces) | |
EXPOSE 7860 | |
# Switch to nginx user for security | |
USER user | |
# Start nginx on port 7860 | |
CMD ["nginx", "-g", "daemon off;"] | |