File size: 1,154 Bytes
ae9d2aa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180306f
 
 
ae9d2aa
180306f
ae9d2aa
 
180306f
ae9d2aa
180306f
ae9d2aa
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# ── Stage 1: Build ────────────────────────────────────────────────────────────
FROM node:20-alpine AS builder

WORKDIR /app

COPY package.json package-lock.json* ./
RUN npm ci --ignore-scripts

COPY tsconfig.json ./
COPY src/ ./src/

RUN npm run build

# ── Stage 2: Run ──────────────────────────────────────────────────────────────
FROM node:20-alpine AS runner

WORKDIR /app

# node:20-alpine already has a 'node' user with uid 1000 / gid 1000
# HF Spaces runs containers as uid 1000 – so we reuse the existing user
RUN mkdir -p /data && chown -R node:node /data /app

COPY --from=builder --chown=node:node /app/package.json /app/package-lock.json* ./
RUN npm ci --omit=dev --ignore-scripts

COPY --from=builder --chown=node:node /app/dist/ ./dist/

USER node

# Hugging Face Spaces default port
ENV PORT=7860
ENV HOST=0.0.0.0
ENV NODE_ENV=production

EXPOSE 7860

CMD ["node", "dist/index.js"]