Spaces:
Sleeping
Sleeping
File size: 1,767 Bytes
0fff343 | 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 39 40 41 42 43 44 45 46 47 48 49 | # OncoDSL Lab — single-image deployment.
# Runs the FastAPI engine, the Next.js front end, and a Caddy reverse proxy
# (with a password gate) behind one HTTPS port. Data is baked into the image.
# ---- Stage 1: build the Next.js front end ----
FROM node:20-slim AS web
WORKDIR /web
COPY web/package*.json ./
RUN npm ci || npm install
COPY web/ ./
RUN mkdir -p public
# The browser calls the engine on the same origin, under /api.
ENV NEXT_PUBLIC_API_URL=/api
RUN npm run build
# ---- Stage 2: runtime (python engine + node + caddy) ----
FROM python:3.11-slim
ENV PYTHONUNBUFFERED=1 NODE_ENV=production NEXT_TELEMETRY_DISABLED=1 \
HOME=/tmp XDG_DATA_HOME=/tmp/.local/share XDG_CONFIG_HOME=/tmp/.config
WORKDIR /app
# Node (to run `next start`) via NodeSource; Caddy copied from its official image.
RUN apt-get update \
&& apt-get install -y --no-install-recommends curl ca-certificates \
&& curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get install -y --no-install-recommends nodejs \
&& rm -rf /var/lib/apt/lists/*
COPY --from=caddy:2 /usr/bin/caddy /usr/bin/caddy
# Python deps
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# App code + baked data (data/processed* is NOT in .dockerignore)
COPY . /app
# Built front end from stage 1
COPY --from=web /web/.next /app/web/.next
COPY --from=web /web/node_modules /app/web/node_modules
COPY --from=web /web/public /app/web/public
COPY deploy/Caddyfile /etc/caddy/Caddyfile
# HF Spaces runs as a non-root user (uid 1000); make the dirs it writes writable.
RUN chmod +x /app/deploy/start.sh \
&& chmod -R a+rwX /app/web/.next \
&& mkdir -p /tmp/.local/share /tmp/.config && chmod -R 777 /tmp/.local /tmp/.config
EXPOSE 7860
CMD ["/app/deploy/start.sh"]
|