FROM python:3.11-slim # Install uv COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ WORKDIR /app # Copy dependency files first (changes rarely) COPY pyproject.toml uv.lock ./ # Put venv outside of /app so it won't be affected by volume mounts ENV UV_PROJECT_ENVIRONMENT=/opt/venv # Install dependencies (this will now create venv at /opt/venv) RUN uv sync --locked --no-group docs --no-group notebook # Create a non-root user RUN useradd -m appuser # Copy all source code COPY . . # Set ownership of writable dirs RUN mkdir -p /app/memory && chown -R appuser:appuser /app/memory # Switch to non-root user USER appuser # Set environment variables ENV PYTHONUNBUFFERED=1 # Default command - use uv run to execute with the virtual environment CMD ["bash", "-c", "set -e && uv run modal deploy -m src.modal_services.entry && uv run main.py"] # CMD ["uv", "run", "main.py"]