mirror of
https://github.com/triqbit/mt5-ai-xauusd-trader.git
synced 2026-11-02 06:56:15 +00:00
feat: implement multi-stage multi-arch Docker infrastructure (#758)
- Refactored Dockerfile into builder and runtime stages for minimal image size. - Added support for linux/amd64 and linux/arm64 architectures with specific PyTorch handling. - Implemented virtual environment isolation and TA-Lib C library compilation. - Added docker-compose.yml for local development with persistent logging and secure .env mounts. - Synchronized requirements-docker.txt with enterprise production standards. - Optimized build performance with BuildKit cache mounts. - Enhanced security with non-root user execution. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: triqbit <242833443+triqbit@users.noreply.github.com>
This commit is contained in:
co-authored by
google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
triqbit
parent
c93366b3b3
commit
72352bc536
+22
-12
@@ -28,17 +28,24 @@ RUN wget -q https://github.com/ta-lib/ta-lib/releases/download/v0.6.4/ta-lib-0.6
|
||||
COPY requirements-docker.txt .
|
||||
|
||||
# Architecture-specific adjustments for PyTorch
|
||||
# amd64: uses extra-index-url for CPU wheels
|
||||
# arm64: uses standard PyPI wheels (no +cpu suffix)
|
||||
RUN if [ "$TARGETARCH" = "arm64" ]; then \
|
||||
# ARM64 (Apple Silicon / AWS Graviton): PyPI provides valid CPU wheels
|
||||
sed -i '/--extra-index-url/d' requirements-docker.txt && \
|
||||
sed -i 's/+cpu//g' requirements-docker.txt; \
|
||||
else \
|
||||
# AMD64: Explicitly use the CPU-optimized wheels from PyTorch's dedicated index
|
||||
sed -i 's/torch==2.3.1/torch==2.3.1+cpu/g' requirements-docker.txt && \
|
||||
sed -i 's/torchvision==0.18.1/torchvision==0.18.1+cpu/g' requirements-docker.txt; \
|
||||
fi
|
||||
|
||||
# Install Python dependencies into a separate prefix for easy copying
|
||||
# Initialize virtual environment for isolation
|
||||
RUN python -m venv /opt/venv
|
||||
ENV PATH="/opt/venv/bin:$PATH"
|
||||
|
||||
# Install Python dependencies
|
||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||
pip install --upgrade pip && \
|
||||
pip install --no-cache-dir --prefix=/install -r requirements-docker.txt
|
||||
pip install --upgrade pip setuptools wheel && \
|
||||
pip install --no-cache-dir -r requirements-docker.txt
|
||||
|
||||
# --- Stage 2: runtime ------------------------------------------
|
||||
FROM python:3.11-slim AS runtime
|
||||
@@ -58,8 +65,9 @@ COPY --from=builder /usr/lib/libta_lib* /usr/lib/
|
||||
COPY --from=builder /usr/include/ta-lib /usr/include/ta-lib
|
||||
RUN ldconfig
|
||||
|
||||
# Copy compiled Python packages from builder
|
||||
COPY --from=builder /install /usr/local
|
||||
# Copy virtual environment from builder
|
||||
COPY --from=builder /opt/venv /opt/venv
|
||||
ENV PATH="/opt/venv/bin:$PATH"
|
||||
|
||||
# Copy application source and assets
|
||||
COPY src/ ./src/
|
||||
@@ -67,12 +75,14 @@ COPY migrations/ ./migrations/
|
||||
COPY main.py .
|
||||
COPY alembic.ini .
|
||||
|
||||
# Create log directory with proper permissions
|
||||
RUN mkdir -p /app/logs && chmod 755 /app/logs
|
||||
|
||||
# Setup non-root user for production security
|
||||
RUN useradd -m -u 1000 trader && \
|
||||
chown -R trader:trader /app
|
||||
RUN useradd -m -u 1000 trader
|
||||
|
||||
# Create log directory and ensure correct ownership
|
||||
RUN mkdir -p /app/logs && \
|
||||
chown -R trader:trader /app && \
|
||||
chmod 755 /app/logs
|
||||
|
||||
USER trader
|
||||
|
||||
# Expose ports for Prometheus (8000) and Dash (8050)
|
||||
|
||||
@@ -5,6 +5,8 @@ services:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
TARGETARCH: amd64 # Default for local dev, Buildx handles this in CI
|
||||
container_name: xauusd_trader
|
||||
ports:
|
||||
- "8000:8000" # Prometheus metrics / API
|
||||
@@ -12,10 +14,12 @@ services:
|
||||
volumes:
|
||||
- ./.env:/app/.env:ro
|
||||
- ./logs:/app/logs
|
||||
- ./models:/app/models:ro
|
||||
environment:
|
||||
- MODE=${MODE:-demo}
|
||||
- ALGO=${ALGO:-ensemble}
|
||||
- LOG_LEVEL=${LOG_LEVEL:-INFO}
|
||||
- PYTHONUNBUFFERED=1
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "python", "-c", "import src.core.config; print('healthy')"]
|
||||
|
||||
+26
-22
@@ -3,62 +3,66 @@
|
||||
# requirements-docker.txt -- Linux Docker-safe dependencies
|
||||
# ============================================================
|
||||
|
||||
# -- Core numeric / data -------------------------------------------
|
||||
# -- Core ML / RL --------------------------------------------
|
||||
--extra-index-url https://download.pytorch.org/whl/cpu
|
||||
torch==2.3.1
|
||||
torchvision==0.18.1
|
||||
stable-baselines3==2.8.0
|
||||
gymnasium==0.29.1
|
||||
numpy==2.2.6
|
||||
scipy==1.13.0
|
||||
scikit-learn==1.7.2
|
||||
pandas==2.2.3
|
||||
pandas==2.3.2
|
||||
|
||||
# -- Technical Analysis --------------------------------------------
|
||||
# -- Deep Learning Extras ------------------------------------
|
||||
transformers==5.0.0rc3
|
||||
timm==1.0.26
|
||||
einops==0.8.2
|
||||
|
||||
# -- Technical Analysis --------------------------------------
|
||||
TA-Lib==0.6.4
|
||||
pandas-ta==0.4.71b0
|
||||
mplfinance==0.12.10b0
|
||||
|
||||
# -- Data Acquisition ----------------------------------------------
|
||||
# -- Data Acquisition ----------------------------------------
|
||||
yfinance==1.3.0
|
||||
requests==2.33.1
|
||||
aiohttp==3.13.4
|
||||
httpx==0.28.0
|
||||
|
||||
# -- Database ------------------------------------------------------
|
||||
# -- Database ------------------------------------------------
|
||||
psycopg2-binary==2.9.9
|
||||
sqlalchemy==2.0.49
|
||||
alembic==1.13.1
|
||||
redis==5.0.4
|
||||
|
||||
# -- Monitoring & Logging ------------------------------------------
|
||||
# -- Monitoring & Logging ------------------------------------
|
||||
starlette==0.49.1
|
||||
prometheus-client==0.25.0
|
||||
structlog==25.5.0
|
||||
rich==13.9.4
|
||||
tqdm==4.67.1
|
||||
|
||||
# -- Notifications -------------------------------------------------
|
||||
python-telegram-bot==22.7
|
||||
|
||||
# -- Dashboard / API -----------------------------------------------
|
||||
fastapi==0.115.4
|
||||
# -- Dashboard / API -----------------------------------------
|
||||
jinja2==3.1.6
|
||||
fastapi==0.136.1
|
||||
uvicorn[standard]==0.34.0
|
||||
dash==4.1.0
|
||||
plotly==5.22.0
|
||||
|
||||
# -- Configuration -------------------------------------------------
|
||||
# -- Configuration -------------------------------------------
|
||||
python-dotenv==1.2.2
|
||||
pydantic==2.10.6
|
||||
pydantic-settings==2.7.1
|
||||
tomli==2.4.1
|
||||
|
||||
# -- Utilities -----------------------------------------------------
|
||||
# -- Utilities -----------------------------------------------
|
||||
python-dateutil==2.9.0.post0
|
||||
nest-asyncio==1.6.0
|
||||
pytz==2024.1
|
||||
click==8.3.3
|
||||
tabulate==0.10.0
|
||||
joblib==1.5.3
|
||||
|
||||
# -- ML / RL (CPU-only torch; no CUDA wheels pulled) ---------------
|
||||
--extra-index-url https://download.pytorch.org/whl/cpu
|
||||
torch==2.3.1
|
||||
torchvision==0.18.1+cpu
|
||||
stable-baselines3==2.8.0
|
||||
gymnasium==0.29.1
|
||||
optuna==4.8.0
|
||||
python-telegram-bot==22.7
|
||||
psutil==7.2.2
|
||||
starlette==0.49.1
|
||||
optuna==4.8.0
|
||||
|
||||
Reference in New Issue
Block a user