Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
# Build frontend | |
FROM node:18 as frontend-build | |
WORKDIR /app | |
COPY frontend/package*.json ./ | |
RUN npm install | |
COPY frontend/ ./ | |
RUN npm run build | |
# Build backend | |
FROM python:3.12-slim | |
WORKDIR /app | |
# Create non-root user | |
RUN useradd -m -u 1000 user | |
# Install poetry | |
RUN pip install poetry | |
# Create and configure cache directory | |
RUN mkdir -p /app/.cache && \ | |
chown -R user:user /app | |
# Copy and install backend dependencies | |
COPY backend/pyproject.toml backend/poetry.lock* ./ | |
RUN poetry config virtualenvs.create false \ | |
&& poetry install --no-interaction --no-ansi --no-root --only main | |
# Copy backend code | |
COPY backend/ . | |
# Install Node.js and npm | |
RUN apt-get update && apt-get install -y \ | |
curl \ | |
netcat-openbsd \ | |
&& curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \ | |
&& apt-get install -y nodejs \ | |
&& rm -rf /var/lib/apt/lists/* | |
# Copy frontend server and build | |
COPY --from=frontend-build /app/build ./frontend/build | |
COPY --from=frontend-build /app/package*.json ./frontend/ | |
COPY --from=frontend-build /app/server.js ./frontend/ | |
# Install frontend production dependencies | |
WORKDIR /app/frontend | |
RUN npm install --production | |
WORKDIR /app | |
# Environment variables | |
ENV HF_HOME=/app/.cache \ | |
TRANSFORMERS_CACHE=/app/.cache \ | |
HF_DATASETS_CACHE=/app/.cache \ | |
INTERNAL_API_PORT=7861 \ | |
PORT=7860 \ | |
NODE_ENV=production | |
# Note: HF_TOKEN should be provided at runtime, not build time | |
USER user | |
EXPOSE 7860 | |
# Start both servers with wait-for | |
CMD ["sh", "-c", "uvicorn app.asgi:app --host 0.0.0.0 --port 7861 & while ! nc -z localhost 7861; do sleep 1; done && cd frontend && npm run serve"] |