advanced-rag-api / Dockerfile
Ashutosh1975270's picture
deploy: add root Dockerfile and .dockerignore for Hugging Face Spaces Docker SDK
c938505
Raw
History Blame Contribute Delete
2.24 kB
FROM python:3.11-slim AS base
# Prevent Python from writing .pyc files and enable unbuffered logging
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1
WORKDIR /app
# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libpq-dev \
curl \
wget \
procps \
default-jre \
&& rm -rf /var/lib/apt/lists/*
# Install python dependencies
COPY backend/requirements.txt /app/
RUN pip install --no-cache-dir --upgrade pip && \
pip install --no-cache-dir -r requirements.txt
# Copy backend codebase
COPY backend/ /app/
# Create volume directories so they exist with the correct permissions in the image
RUN mkdir -p /app/chroma_db /app/uploaded_documents /app/logs /app/db /app/db/neo4j_data
# Download and setup Neo4j Community Edition
RUN wget -q -O neo4j.tar.gz "https://neo4j.com/artifact.php?name=neo4j-community-5.23.0-unix.tar.gz" \
&& tar -xf neo4j.tar.gz \
&& mv neo4j-community-5.23.0 /app/neo4j \
&& rm neo4j.tar.gz
# Configure Neo4j to run within resource limits and set directories
RUN echo "server.directories.data=/app/db/neo4j_data" >> /app/neo4j/conf/neo4j.conf \
&& echo "server.memory.heap.initial_size=512m" >> /app/neo4j/conf/neo4j.conf \
&& echo "server.memory.heap.max_size=1G" >> /app/neo4j/conf/neo4j.conf \
&& echo "server.memory.pagecache.size=1G" >> /app/neo4j/conf/neo4j.conf
# Set default password (matches backend settings)
RUN /app/neo4j/bin/neo4j-admin dbms set-initial-password "password"
# Ensure start script is executable
RUN chmod +x /app/start.sh
# Collect static files (no-op if no static files, but ready for future)
RUN python manage.py collectstatic --noinput 2>/dev/null || true
# Create non-root user for security
RUN groupadd -r appuser && useradd -r -g appuser -d /app -s /sbin/nologin appuser \
&& chown -R appuser:appuser /app
# Switch to non-root user
USER appuser
EXPOSE 8000
# Health check against the /api/health/ endpoint
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
CMD curl -f http://localhost:8000/api/health/ || exit 1
# Production command using custom startup script to run both Neo4j and Gunicorn
CMD ["/app/start.sh"]