FROM python:3.11-slim AS python-deps WORKDIR /app COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt FROM node:20-slim AS node-deps WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --production=false FROM node:20-slim AS builder WORKDIR /app COPY --from=node-deps /app/node_modules ./node_modules COPY app/ ./app/ COPY components/ ./components/ COPY hooks/ ./hooks/ COPY lib/ ./lib/ COPY public/ ./public/ COPY package.json package-lock.json tsconfig.json next.config.ts postcss.config.mjs eslint.config.mjs .eslintrc.json next-env.d.ts metadata.json ./ ENV NEXT_TELEMETRY_DISABLED=1 ARG CACHEBUST=3 RUN npm run build FROM python:3.11-slim AS runner WORKDIR /app # Copy Node.js 20 binary from the build stage (apt nodejs is too old) COPY --from=builder /usr/local/bin/node /usr/local/bin/node COPY --from=builder /usr/local/lib/node_modules /usr/local/lib/node_modules COPY --from=python-deps /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages COPY --from=python-deps /usr/local/bin /usr/local/bin COPY --from=builder /app/public ./public COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static COPY origami_server/ ./origami_server/ COPY training/ ./training/ COPY start.sh ./ RUN chmod +x start.sh ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 ENV PORT=7860 ENV HOSTNAME=0.0.0.0 EXPOSE 7860 EXPOSE 8000 CMD ["./start.sh"]