sirus / Dockerfile
ranilmukesh's picture
Deploy SiRUS SQL Agent backend
947935e
# ==========================================
# Stage 1: Build Backend (Python deps)
# ==========================================
FROM python:3.11-slim AS backend-builder
ENV PYTHONUNBUFFERED=1 PIP_NO_CACHE_DIR=1
WORKDIR /app
# Install build dependencies for MySQL/PostgreSQL C libraries
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
build-essential gcc pkg-config \
default-libmysqlclient-dev \
libmariadb-dev-compat \
libssl-dev libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# Install Python dependencies
COPY backend/requirements-hf.txt /tmp/requirements.txt
RUN pip install --upgrade pip setuptools wheel \
&& pip install -r /tmp/requirements.txt
# ==========================================
# Stage 2: Final Runtime
# ==========================================
FROM python:3.11-slim
WORKDIR /app
# Install runtime dependencies: Redis, Nginx, Supervisor
RUN apt-get update && apt-get install -y --no-install-recommends \
redis-server \
nginx \
supervisor \
curl \
libmariadb3 \
libssl3 \
libpq5 \
&& rm -rf /var/lib/apt/lists/*
# Install MinIO server binary
RUN set -eux; \
arch="$(dpkg --print-architecture)"; \
case "$arch" in \
amd64) minio_arch="amd64" ;; \
arm64) minio_arch="arm64" ;; \
*) echo "Unsupported architecture: $arch"; exit 1 ;; \
esac; \
curl -fsSL "https://dl.min.io/server/minio/release/linux-${minio_arch}/minio" -o /usr/local/bin/minio; \
chmod +x /usr/local/bin/minio
# Copy Python packages from builder stage
COPY --from=backend-builder /usr/local/bin /usr/local/bin
COPY --from=backend-builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
# Copy backend modules required by unified HF app
COPY backend/__init__.py /app/backend/
COPY backend/SQL_Agent/ /app/backend/SQL_Agent/
COPY backend/data_sources/ /app/backend/data_sources/
COPY backend/tenant_files/ /app/backend/tenant_files/
COPY backend/excel_module/ /app/backend/excel_module/
COPY backend/ml_module/ /app/backend/ml_module/
COPY backend/core/ /app/backend/core/
COPY backend/shared/ /app/backend/shared/
COPY backend/unified/ /app/backend/unified/
COPY backend/.env /app/backend/.env
# Copy HF Space configuration files
COPY supervisord.conf /app/supervisord.conf
COPY nginx.conf /app/nginx.conf
#uncomment this for local deployment
# COPY hf-space/supervisord.conf /app/supervisord.conf
# COPY hf-space/nginx.conf /app/nginx.conf
# Set Python path so imports like `backend.data_sources.api` work
ENV PYTHONPATH=/app:/app/backend
# Create temp directories
RUN mkdir -p /tmp/redis-data /tmp/minio-data /app/data /app/logs
# ── HF Spaces user setup (UID 1000 required) ─────────────────
RUN useradd -m -u 1000 user \
&& chown -R user:user /app /tmp
USER user
ENV HOME=/home/user
ENV PATH=/home/user/.local/bin:$PATH
EXPOSE 7860
CMD ["supervisord", "-c", "/app/supervisord.conf"]