EA_strat_optimizer / Dockerfile
TheQuantEd's picture
deploy: AMD EA Strategy Optimizer — Neo4j + FastAPI + Streamlit
6252f54
FROM python:3.12-slim
WORKDIR /app
# ── System deps ───────────────────────────────────────────────────────────────
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential curl supervisor netcat-openbsd gnupg \
openjdk-21-jre-headless && \
rm -rf /var/lib/apt/lists/*
# ── Neo4j 5.x Community + cypher-shell (official Debian repo) ────────────────
RUN curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key \
| gpg --dearmor -o /usr/share/keyrings/neo4j.gpg && \
echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable 5" \
> /etc/apt/sources.list.d/neo4j.list && \
apt-get update && apt-get install -y neo4j cypher-shell && \
rm -rf /var/lib/apt/lists/*
# ── Python deps (CPU-only torch keeps image lean) ────────────────────────────
COPY requirements.backend.txt requirements.frontend.txt ./
RUN pip install --no-cache-dir \
"torch>=2.1.0" --index-url https://download.pytorch.org/whl/cpu
RUN pip install --no-cache-dir -r requirements.backend.txt
RUN pip install --no-cache-dir -r requirements.frontend.txt
# Pre-download embedding model into image (avoids cold-start network hit)
RUN python -c "\
from sentence_transformers import SentenceTransformer; \
SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')"
# ── Application code ──────────────────────────────────────────────────────────
COPY backend/ ./backend/
COPY frontend/ ./frontend/
COPY pipeline/knowledge_sources/ ./pipeline/knowledge_sources/
COPY pipeline/embed_nodes.py ./pipeline/embed_nodes.py
COPY pipeline/__init__.py ./pipeline/__init__.py
# ── Graph seed (full enriched export: 44 domains, 1416 caps, training data) ──
COPY neo4j_backup/seed_graph.cypher ./neo4j_backup/seed_graph.cypher
RUN mkdir -p backend/drl/checkpoints
# ── Neo4j memory tuning (fits HF free tier 16 GB RAM comfortably) ─────────────
RUN { \
echo 'server.memory.heap.initial_size=256m'; \
echo 'server.memory.heap.max_size=512m'; \
echo 'server.memory.pagecache.size=128m'; \
echo 'server.bolt.listen_address=0.0.0.0:7687'; \
echo 'server.http.listen_address=0.0.0.0:7474'; \
echo 'dbms.security.procedures.unrestricted=apoc.*'; \
} >> /etc/neo4j/neo4j.conf
# ── Supervisor + entrypoint ───────────────────────────────────────────────────
COPY supervisord.conf /etc/supervisor/conf.d/app.conf
COPY entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh && \
mkdir -p /var/log/supervisor /var/log/neo4j
ENV PYTHONPATH=/app
ENV PYTHONUNBUFFERED=1
ENV BACKEND_URL=http://localhost:8080
EXPOSE 7860
CMD ["/app/entrypoint.sh"]