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:
Leo
2026-05-06 14:25:01 +00:00
committed by GitHub
co-authored by google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> triqbit
parent c93366b3b3
commit 72352bc536
3 changed files with 52 additions and 34 deletions
+22 -12
View File
@@ -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)
+4
View File
@@ -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
View File
@@ -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