Maaroufabousaleh
Refactor Docker and entrypoint configurations; update NLTK data handling and logging paths
4b5719e
###############################
# 1) ─── Python builder ───
###############################
FROM python:3.11-slim AS builder
WORKDIR /app
RUN apt-get update && apt-get install -y --no-install-recommends gcc g++ git curl wget \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip wheel --no-cache-dir --wheel-dir=/app/wheels -r requirements.txt
###############################
# 2) ─── Runtime image ───
###############################
FROM python:3.11-slim
WORKDIR /app
# OS runtime deps (minimal for memory optimization)
RUN apt-get update && apt-get install -y --no-install-recommends \
libgomp1 \
nginx \
supervisor \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# Python deps
COPY --from=builder /app/wheels /wheels
COPY requirements.txt .
# Install Python dependencies (with cleanup for memory optimization)
RUN pip install --no-cache-dir --no-index --find-links=/wheels -r requirements.txt \
&& rm -rf /wheels \
&& pip cache purge
# Install Playwright system dependencies and browsers
# && python -m playwright install-deps \
# && python -m playwright install chromium firefox webkit
# Create necessary directories with proper permissions for root
RUN mkdir -p /data/advisorai-data/archive \
&& mkdir -p /data/advisorai-data/features \
&& mkdir -p /data/advisorai-data/temp \
&& mkdir -p /data/advisorai-data/train \
&& mkdir -p /data/advisorai-data/warehouse \
&& mkdir -p /data/alpaca/archive \
&& mkdir -p /data/alpaca/features \
&& mkdir -p /data/alpaca/temp \
&& mkdir -p /data/alpaca/train \
&& mkdir -p /data/crypto-bubbles/archive \
&& mkdir -p /data/crypto-bubbles/features \
&& mkdir -p /data/crypto-bubbles/temp \
&& mkdir -p /data/crypto-bubbles/train \
&& mkdir -p /data/finnhub/archive \
&& mkdir -p /data/finnhub/features \
&& mkdir -p /data/finnhub/temp \
&& mkdir -p /data/finnhub/train \
&& mkdir -p /data/finviz/archive \
&& mkdir -p /data/finviz/features \
&& mkdir -p /data/finviz/temp \
&& mkdir -p /data/finviz/train \
&& mkdir -p /data/marketaux/archive \
&& mkdir -p /data/marketaux/features \
&& mkdir -p /data/marketaux/temp \
&& mkdir -p /data/marketaux/train \
&& mkdir -p /data/merged/archive \
&& mkdir -p /data/merged/features \
&& mkdir -p /data/merged/temp \
&& mkdir -p /data/merged/train \
&& mkdir -p /data/merged/raw \
&& mkdir -p /data/logs \
&& mkdir -p /data/nltk_data \
&& mkdir -p /tmp/nginx/body \
&& mkdir -p /tmp/nginx/proxy \
&& mkdir -p /tmp/nginx/fastcgi \
&& chmod -R 777 /data /tmp/nginx
# ─── Application code ───
COPY . .
# Set executable permissions for entrypoint
RUN chmod +x /app/deployment/entrypoint.sh /app/deployment/gradio_entrypoint.sh
# PYTHONPATH for FastAPI
ENV PYTHONPATH=/app:/app/src:/app/src/api:/app/src/data_cloud:/app/src/fetchers:/app/src/merge
# Nginx config
RUN rm -f /etc/nginx/conf.d/default.conf
COPY deployment/nginx.conf /etc/nginx/conf.d/app.conf
COPY deployment/nginx.main.conf /etc/nginx/nginx.conf
# Set resource limits for memory optimization (512MB limit)
ENV PYTHONUNBUFFERED=1
ENV PYTHONIOENCODING=utf-8
ENV MAX_MEMORY_MB=450
ENV MALLOC_TRIM_THRESHOLD_=100000
ENV MALLOC_MMAP_THRESHOLD_=131072
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONHASHSEED=random
ENV NLTK_DATA=/data/nltk_data
# Supervisord config
COPY deployment/supervisord.conf /etc/supervisord.conf
ENTRYPOINT ["/app/deployment/gradio_entrypoint.sh"]
# Ports
EXPOSE 7860
CMD ["supervisord", "-c", "/etc/supervisord.conf"]