FROM python:3.11-slim # ── System dependencies ─────────────────────────────── RUN apt-get update && apt-get install -y \ curl wget git ca-certificates \ tesseract-ocr tesseract-ocr-eng \ poppler-utils \ libgl1 libglib2.0-0 libsm6 libxext6 \ build-essential gfortran \ && rm -rf /var/lib/apt/lists/* # ── Install Julia 1.11 (executable-stack fix vs 1.10) ──────────────────────────── ENV JULIA_VERSION=1.11.4 RUN wget -q https://julialang-s3.julialang.org/bin/linux/x64/1.11/julia-${JULIA_VERSION}-linux-x86_64.tar.gz \ && tar -xzf julia-${JULIA_VERSION}-linux-x86_64.tar.gz \ && mv julia-${JULIA_VERSION} /usr/local/julia \ && ln -s /usr/local/julia/bin/julia /usr/local/bin/julia \ && rm julia-${JULIA_VERSION}-linux-x86_64.tar.gz \ && julia --version # ── Julia / app environment ─────────────────────────── ENV JULIA_DEPOT_PATH=/app/.julia ENV JULIA_NUM_THREADS=4 ENV JULIA_BINDIR=/usr/local/julia/bin ENV PYTHON_JULIAPKG_OFFLINE=yes WORKDIR /app # ── Python dependencies ─────────────────────────────── COPY requirements.txt /tmp/requirements.txt RUN pip install --no-cache-dir -r /tmp/requirements.txt # ── Copy project files ──────────────────────────────── COPY . . # ── Step 1: Warmup — JIT-compile all hot paths (non-fatal) ──── RUN julia /app/src/warmup.jl || true # ── Step 3: Pre-warm juliacall Python↔Julia bridge (non-fatal) ──── RUN python3 /app/src/warmup_bridge.py || true # ── Runtime ─────────────────────────────────────────── ENV GRADIO_SERVER_NAME=0.0.0.0 ENV GRADIO_SERVER_PORT=7860 ENV JULIA_DEPOT_PATH=/app/.julia ENV JULIA_BINDIR=/usr/local/julia/bin ENV PYTHON_JULIAPKG_OFFLINE=yes EXPOSE 7860 CMD ["python", "app.py"]