Download Dockerfile from RayMelius/StockEx: direct link, hf CLI and curl.
- Browser
- Download file 3.7 kB
-
https://huggingface.co/spaces/RayMelius/StockEx/resolve/main/Dockerfile
- Command line
-
hf download hf://spaces/RayMelius/StockEx/Dockerfile
-
curl -L -o Dockerfile https://huggingface.co/spaces/RayMelius/StockEx/resolve/main/Dockerfile
3.7 kB
| # HuggingFace Spaces β StockEx Trading Demo | |
| # Single container: Kafka (KRaft) + Matcher + MD Feeder + Dashboard + FIX OEG + FIX UI Client | |
| FROM python:3.11-slim | |
| ENV DEBIAN_FRONTEND=noninteractive | |
| ENV PYTHONUNBUFFERED=1 | |
| # Limit Kafka JVM heap to fit free-tier RAM | |
| ENV KAFKA_HEAP_OPTS="-Xmx400m -Xms256m" | |
| # Install Java (required by Kafka) + wget + nginx + C++ build tools (for QuickFIX) | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| default-jre-headless \ | |
| wget \ | |
| nginx \ | |
| build-essential \ | |
| libssl-dev \ | |
| zlib1g-dev \ | |
| libbz2-dev \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Download Apache Kafka 3.7.0 (KRaft mode β no ZooKeeper needed) | |
| ARG KAFKA_VERSION=3.7.0 | |
| RUN wget -q \ | |
| "https://archive.apache.org/dist/kafka/${KAFKA_VERSION}/kafka_2.13-${KAFKA_VERSION}.tgz" \ | |
| -O /tmp/kafka.tgz \ | |
| && tar -xzf /tmp/kafka.tgz -C /opt \ | |
| && mv /opt/kafka_2.13-${KAFKA_VERSION} /opt/kafka \ | |
| && rm /tmp/kafka.tgz | |
| # Install Python dependencies (quickfix compiles from source β allow extra time) | |
| # v2.0.3: force rebuild 2026-03-08 | |
| RUN pip install --no-cache-dir \ | |
| kafka-python==2.0.2 \ | |
| Flask==2.2.5 \ | |
| requests==2.31.0 \ | |
| quickfix \ | |
| "numpy<2.0" \ | |
| pandas==2.2.3 \ | |
| scikit-learn==1.6.1 \ | |
| stable-baselines3==2.4.1 \ | |
| huggingface_hub==0.28.1 \ | |
| && echo "pip-v2.0.3" | |
| # ββ Application code (flat layout matching /app container paths) ββββββββββββββ | |
| WORKDIR /app | |
| COPY shared/ /app/shared/ | |
| RUN mkdir -p /app/data | |
| # Also expose schedule path via env so dashboard finds it | |
| ENV SCHEDULE_FILE=/app/shared/data/market_schedule.txt | |
| # Matcher service | |
| COPY matcher/matcher.py /app/matcher.py | |
| COPY matcher/database.py /app/database.py | |
| # MD Feeder service | |
| COPY md_feeder/mdf_simulator.py /app/mdf_simulator.py | |
| # Dashboard service | |
| COPY dashboard/dashboard.py /app/dashboard.py | |
| COPY dashboard/templates/ /app/templates/ | |
| # Frontend (order entry) service | |
| COPY frontend/frontend.py /app/frontend.py | |
| COPY frontend/templates/ /app/frontend_templates/ | |
| # FIX OEG (Order Entry Gateway) | |
| COPY fix_oeg/fix_oeg_server.py /app/fix_oeg/fix_oeg_server.py | |
| COPY fix_oeg/FIX44.xml /app/fix_oeg/FIX44.xml | |
| # Use HF-specific config (localhost paths instead of container service names) | |
| COPY fix_server_hf.cfg /app/fix_oeg/fix_server.cfg | |
| # FIX UI Client | |
| COPY fix-ui-client/fix-ui-client.py /app/fix_ui/fix_ui_client.py | |
| COPY fix-ui-client/templates/ /app/fix_ui/templates/ | |
| COPY client_hf.cfg /app/fix_ui/client_hf.cfg | |
| # AI Analyst service | |
| COPY ai_analyst/ai_analyst.py /app/ai_analyst.py | |
| # Clearing House service | |
| COPY clearing_house/ /app/clearing_house/ | |
| # ββ Kafka KRaft configuration βββββββββββββββββββββββββββββββββββββββββββββββββ | |
| COPY kafka-kraft.properties /opt/kafka/config/kraft/server.properties | |
| # ββ nginx configuration βββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| COPY nginx.conf /etc/nginx/nginx.conf | |
| # ββ Startup script ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| COPY entrypoint.sh /entrypoint.sh | |
| RUN chmod +x /entrypoint.sh | |
| EXPOSE 7860 | |
| CMD ["/entrypoint.sh"] | |