krinya's picture
refactor: Update Dockerfile and README, remove unused files, and enhance agent configuration
fb4a4b8
Raw
History Blame Contribute Delete
2.05 kB
# Start from a minimal Python image. Slim reduces size while keeping Python.
FROM python:3.12-slim
# Make Python output unbuffered (better real-time logs)
ENV PYTHONUNBUFFERED=1
# Create a non-root user to run the app (security best-practice).
RUN useradd --create-home --shell /bin/bash app
# Set working directory for subsequent commands and the container runtime.
WORKDIR /app
# Install system dependencies needed to build Python packages and tooling.
# --no-install-recommends keeps the image smaller by avoiding extra packages.
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
g++ \
curl \
&& rm -rf /var/lib/apt/lists/*
# Upgrade pip and related build tools, and install uv (project's runtime manager).
# --no-cache-dir avoids leaving pip cache in the image.
RUN python -m pip install --upgrade pip setuptools wheel && \
pip install --no-cache-dir uv
# Copy project files into the image.
COPY . .
# Ensure the non-root user owns the app directory so it can run/install files there.
RUN chown -R app:app /app
# Switch to the non-root user for better security for subsequent steps.
USER app
# Set uv cache dir to somewhere writable by the app user. This avoids permission errors
# when uv manages its own cache during `uv sync` or runtime.
ENV UV_CACHE_DIR=/app/.uv-cache
# Install application dependencies using uv. Running this as the non-root `app` user
# keeps the image consistent with runtime permissions. `--frozen` ensures deterministic installs.
RUN uv sync --frozen
# Expose the port Gradio uses (default in the project). This is informational and
# useful for container orchestration and documentation.
EXPOSE 7860
# Set Gradio environment variables so the app binds to all interfaces in containers.
ENV GRADIO_SERVER_NAME="0.0.0.0"
ENV GRADIO_SERVER_PORT=7860
# Default command: run the Gradio app via uv. Using uv run keeps the environment consistent
# with development workflows that rely on uv.
CMD ["uv", "run", "python", "src/sales_assistant/ui_dashboard/gradio_app.py"]