Spaces:
Running
Running
| FROM python:3.10-slim | |
| # System deps — nginx added for reverse-proxying FastAPI + Streamlit | |
| RUN apt-get update && apt-get install -y \ | |
| nginx \ | |
| poppler-utils \ | |
| supervisor \ | |
| libgl1 \ | |
| libglib2.0-0 \ | |
| libjpeg-dev \ | |
| libpng-dev \ | |
| libwebp-dev \ | |
| tesseract-ocr \ | |
| tesseract-ocr-eng \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Create non-root user | |
| RUN useradd -m -u 1000 appuser | |
| WORKDIR /app | |
| # Install Python deps | |
| COPY requirements.txt . | |
| RUN pip install --no-cache-dir --upgrade pip && \ | |
| pip install --no-cache-dir -r requirements.txt | |
| # Copy app | |
| COPY --chown=appuser:appuser . . | |
| # nginx config — port 7860 routes /api/* → FastAPI:7861, else → Streamlit:8501 | |
| COPY nginx.conf /etc/nginx/nginx.conf | |
| RUN mkdir -p /var/log/nginx /var/lib/nginx/body /run && \ | |
| chown -R appuser:appuser /var/log/nginx /var/lib/nginx /run /etc/nginx | |
| # Writable dirs | |
| RUN mkdir -p /app/chroma_db /app/sample_docs /app/logs /tmp/chroma_db && \ | |
| chown -R appuser:appuser /app/chroma_db /app/sample_docs /app/logs /tmp/chroma_db | |
| # Supervisor config — runs nginx, Streamlit (8501), and FastAPI (7861) | |
| RUN mkdir -p /app/supervisor && \ | |
| printf '[supervisord]\n\ | |
| nodaemon=true\n\ | |
| logfile=/app/logs/supervisord.log\n\ | |
| pidfile=/app/logs/supervisord.pid\n\ | |
| \n\ | |
| [program:nginx]\n\ | |
| command=nginx -g "daemon off;"\n\ | |
| autostart=true\n\ | |
| autorestart=true\n\ | |
| stdout_logfile=/app/logs/nginx.log\n\ | |
| stderr_logfile=/app/logs/nginx_err.log\n\ | |
| \n\ | |
| [program:streamlit]\n\ | |
| command=streamlit run app.py --server.port=8501 --server.address=0.0.0.0 --server.headless=true --server.enableCORS=false --server.enableXsrfProtection=false --browser.gatherUsageStats=false\n\ | |
| directory=/app\n\ | |
| autostart=true\n\ | |
| autorestart=true\n\ | |
| stdout_logfile=/app/logs/streamlit.log\n\ | |
| stderr_logfile=/app/logs/streamlit_err.log\n\ | |
| \n\ | |
| [program:fastapi]\n\ | |
| command=uvicorn api:app --host=0.0.0.0 --port=7861\n\ | |
| directory=/app\n\ | |
| autostart=true\n\ | |
| autorestart=true\n\ | |
| stdout_logfile=/app/logs/fastapi.log\n\ | |
| stderr_logfile=/app/logs/fastapi_err.log\n\ | |
| ' > /app/supervisor/supervisord.conf && \ | |
| chown -R appuser:appuser /app/supervisor | |
| USER appuser | |
| EXPOSE 7860 | |
| CMD ["/usr/bin/supervisord", "-c", "/app/supervisor/supervisord.conf"] | |