Spaces:
Running
Running
File size: 1,336 Bytes
2ef1d92 a6cdaab 2ef1d92 a6cdaab 7ebd053 a6cdaab 2ef1d92 a6cdaab 2ef1d92 a6cdaab 2ef1d92 a6cdaab 2ef1d92 59cbcf0 2ef1d92 a6cdaab 2ef1d92 a6cdaab 2ef1d92 1a4d163 2ef1d92 73d7d5f 2ef1d92 a6cdaab 2ef1d92 a6cdaab 2ef1d92 a6cdaab 2ef1d92 a6cdaab 2ef1d92 a6cdaab 2ef1d92 | 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 50 51 52 53 54 55 56 57 58 59 60 | # Stage 1: Build frontend
FROM node:20-alpine AS frontend-builder
WORKDIR /app/frontend
COPY frontend/package.json frontend/package-lock.json ./
RUN npm install
COPY frontend/ ./
RUN npm run build
# Stage 2: Production
FROM python:3.12-slim
# Install uv directly from official image
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
# Create user with UID 1000 (required for HF Spaces)
RUN useradd -m -u 1000 user
WORKDIR /app
# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
curl \
bash \
&& rm -rf /var/lib/apt/lists/*
# Copy dependency files
COPY pyproject.toml uv.lock ./
# Install dependencies into /app/.venv
# Use --frozen to ensure exact versions from uv.lock
RUN uv sync --no-dev --frozen
# Copy application code
COPY agent/ ./agent/
COPY backend/ ./backend/
COPY configs/ ./configs/
# Copy built frontend
COPY --from=frontend-builder /app/frontend/dist ./static/
# Create directories and set ownership
RUN mkdir -p /app/session_logs && \
chown -R user:user /app
# Switch to non-root user
USER user
# Set environment
ENV HOME=/home/user \
PYTHONUNBUFFERED=1 \
PYTHONPATH=/app \
PATH="/app/.venv/bin:$PATH"
# Expose port
EXPOSE 7860
# Run the application from backend directory
WORKDIR /app/backend
CMD ["bash", "start.sh"] |