Spaces:
Running
Running
# Use an official Node.js runtime as a parent image | |
# Using LTS (Long Term Support) version is generally recommended | |
FROM node:20-alpine AS base | |
# Set the working directory in the container | |
WORKDIR /app | |
# Install dependencies stage | |
FROM base AS deps | |
# Copy package.json and package-lock.json (or yarn.lock or pnpm-lock.yaml) | |
COPY package.json package-lock.json* ./ | |
# Install dependencies | |
RUN npm ci | |
# Build stage | |
FROM base AS builder | |
# Copy dependencies from the 'deps' stage | |
COPY --from=deps /app/node_modules ./node_modules | |
# Copy the rest of the application code | |
COPY . . | |
# Build the SvelteKit application, mounting the secret and reading it with cat | |
# The secret 'HF_TOKEN' must be defined in the Hugging Face Space settings | |
RUN --mount=type=secret,id=HF_TOKEN \ | |
HF_TOKEN=$(cat /run/secrets/HF_TOKEN) npm run build | |
# Production stage | |
FROM base AS production | |
ENV NODE_ENV=production | |
# Set the default port for the SvelteKit Node adapter | |
ENV PORT=7860 | |
# Copy built application output from the 'builder' stage | |
# The output directory is typically 'build' when using adapter-node | |
COPY --from=builder /app/build ./build | |
# Copy production dependencies from the 'deps' stage | |
COPY --from=deps /app/node_modules ./node_modules | |
# Copy package.json to run the server | |
COPY package.json . | |
# Expose the port the app runs on | |
# SvelteKit with adapter-node typically defaults to 3000, but can be overridden by PORT env var | |
EXPOSE 7860 | |
# Set the command to run the application | |
# This starts the Node.js server built by adapter-node | |
CMD ["node", "build/index.js"] |