FROM node:20-bullseye AS deps WORKDIR /app COPY ui/package*.json ./ui/ RUN cd ui && npm install --ignore-scripts FROM node:20-bullseye AS build WORKDIR /app COPY . . COPY --from=deps /app/ui/node_modules ./ui/node_modules WORKDIR /app/ui ENV NODE_ENV=production \ NEXT_PUBLIC_DB_MODE=browser RUN npx prisma generate && npm run build FROM node:20-bullseye-slim AS runner WORKDIR /app/ui ENV NODE_ENV=production \ NEXT_PUBLIC_DB_MODE=browser \ NEXT_TELEMETRY_DISABLED=1 \ PORT=7860 \ DATASETS_FOLDER=/data/datasets \ TRAINING_FOLDER=/data/output \ HF_JOBS_DEFAULT_HARDWARE=a100-large \ HF_OAUTH_CLIENT_ID=bfa7db67-cf78-4a4b-8232-69d855ea836b \ NEXT_PUBLIC_HF_OAUTH_CLIENT_ID=bfa7db67-cf78-4a4b-8232-69d855ea836b # Expect HF_OAUTH_CLIENT_SECRET to be provided at runtime. ENV HF_OAUTH_CLIENT_SECRET="" RUN apt-get update && apt-get install -y --no-install-recommends \ python3 python3-pip git curl ca-certificates bash tini \ && pip3 install --no-cache-dir "huggingface_hub[cli]" \ && curl -LsSf https://astral.sh/uv/install.sh | bash \ && ln -s /root/.local/bin/uv /usr/local/bin/uv \ && apt-get clean && rm -rf /var/lib/apt/lists/* RUN mkdir -p /data/datasets /data/output COPY --from=build /app /app COPY --from=deps /app/ui/node_modules ./node_modules EXPOSE 7860 ENTRYPOINT ["tini", "--"] CMD ["npm", "run", "start", "--", "--hostname", "0.0.0.0", "--port", "7860"]