############################### | |
# Gradio-optimized Dockerfile | |
############################### | |
FROM python:3.11-slim | |
WORKDIR /app | |
# Install system dependencies | |
RUN apt-get update && apt-get install -y --no-install-recommends \ | |
gcc \ | |
libgomp1 \ | |
supervisor \ | |
&& rm -rf /var/lib/apt/lists/* \ | |
&& apt-get clean | |
# Copy requirements and install Python dependencies | |
COPY requirements.txt . | |
RUN pip install --no-cache-dir -r requirements.txt \ | |
&& pip cache purge | |
# Create necessary directories | |
RUN mkdir -p /data/logs \ | |
&& mkdir -p /data/merged/features \ | |
&& mkdir -p /data/merged/train \ | |
&& mkdir -p /data/alpaca \ | |
&& mkdir -p /data/advisorai-data \ | |
&& mkdir -p /data/nltk_data \ | |
&& chmod -R 777 /data | |
# Copy application code | |
COPY . . | |
# Set executable permissions | |
RUN chmod +x /app/deployment/gradio_entrypoint.sh | |
# Set environment variables | |
ENV PYTHONPATH=/app:/app/src | |
ENV PYTHONUNBUFFERED=1 | |
ENV PYTHONIOENCODING=utf-8 | |
ENV NLTK_DATA=/data/nltk_data | |
# Create simplified supervisord config for Gradio | |
RUN echo '[supervisord]\n\ | |
nodaemon=true\n\ | |
logfile=/dev/stdout\n\ | |
logfile_maxbytes=0\n\ | |
pidfile=/tmp/supervisord.pid\n\ | |
loglevel=info\n\ | |
\n\ | |
[program:gradio]\n\ | |
command=python /app/app.py\n\ | |
directory=/app\n\ | |
autostart=true\n\ | |
autorestart=true\n\ | |
stdout_logfile=/dev/stdout\n\ | |
stderr_logfile=/dev/stderr\n\ | |
stdout_logfile_maxbytes=0\n\ | |
stderr_logfile_maxbytes=0\n\ | |
startsecs=10\n\ | |
startretries=3\n\ | |
stopwaitsecs=30\n\ | |
killasgroup=true\n\ | |
stopasgroup=true\n\ | |
environment=PYTHONPATH="/app:/app/src"\n\ | |
\n\ | |
[program:scheduler]\n\ | |
command=/bin/sh -c "sleep 180 && python /app/deployment/scheduler.py"\n\ | |
directory=/app\n\ | |
autostart=true\n\ | |
autorestart=true\n\ | |
startsecs=0\n\ | |
stdout_logfile=/dev/stdout\n\ | |
stderr_logfile=/dev/stderr\n\ | |
stdout_logfile_maxbytes=0\n\ | |
stderr_logfile_maxbytes=0\n\ | |
startretries=3\n\ | |
stopwaitsecs=60\n\ | |
killasgroup=true\n\ | |
stopasgroup=true' > /etc/supervisord_gradio.conf | |
ENTRYPOINT ["/app/deployment/gradio_entrypoint.sh"] | |
# Expose Gradio port | |
EXPOSE 7860 | |
CMD ["supervisord", "-c", "/etc/supervisord_gradio.conf"] | |