diff --git a/Dockerfile.simple b/Dockerfile.simple new file mode 100644 index 000000000..d3e9fa75e --- /dev/null +++ b/Dockerfile.simple @@ -0,0 +1,21 @@ +FROM rust:1.83-slim-bookworm AS builder + +RUN apt-get update && apt-get install -y \ + pkg-config \ + libssl-dev \ + protobuf-compiler \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /build +COPY . . + +RUN cargo build --release -p api_gateway + +FROM debian:bookworm-slim +RUN apt-get update && apt-get install -y \ + ca-certificates \ + libssl3 \ + && rm -rf /var/lib/apt/lists/* + +COPY --from=builder /build/target/release/api_gateway /usr/local/bin/ +CMD ["/usr/local/bin/api_gateway"] diff --git a/docker-compose.yml b/docker-compose.yml index 1c9c0ccd2..16462617e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ version: '3.8' services: # PostgreSQL - Primary database for SQLx compilation and app data postgres: - image: postgres:16-alpine + image: timescale/timescaledb:latest-pg16 container_name: foxhunt-postgres environment: POSTGRES_DB: foxhunt diff --git a/services/api_gateway/Dockerfile b/services/api_gateway/Dockerfile index 4cbe4e0af..5e0d4218f 100644 --- a/services/api_gateway/Dockerfile +++ b/services/api_gateway/Dockerfile @@ -42,16 +42,28 @@ COPY services/backtesting_service ./services/backtesting_service COPY services/ml_training_service ./services/ml_training_service # Build dependencies first (layer caching optimization) +# Create dummy main.rs files for all workspace members to cache dependencies RUN mkdir -p services/api_gateway/src && \ echo "fn main() {}" > services/api_gateway/src/main.rs && \ - cargo build --release -p api_gateway && \ - rm -rf services/api_gateway/src + mkdir -p common/src && echo "pub fn dummy() {}" > common/src/lib.rs && \ + mkdir -p config/src && echo "pub fn dummy() {}" > config/src/lib.rs && \ + mkdir -p trading_engine/src && echo "pub fn dummy() {}" > trading_engine/src/lib.rs && \ + mkdir -p storage/src && echo "pub fn dummy() {}" > storage/src/lib.rs && \ + mkdir -p database/src && echo "pub fn dummy() {}" > database/src/lib.rs && \ + cargo build --release -p api_gateway 2>&1 | grep -E '(Compiling|Finished|error)' && \ + find target/release -type f -executable -delete && \ + rm -rf common/src config/src trading_engine/src storage/src database/src services/api_gateway/src -# Copy actual source code +# Copy actual source code for all required crates +COPY common/src ./common/src +COPY config/src ./config/src +COPY trading_engine/src ./trading_engine/src +COPY storage/src ./storage/src +COPY database/src ./database/src COPY services/api_gateway/src ./services/api_gateway/src COPY services/api_gateway/build.rs ./services/api_gateway/build.rs -# Build the application +# Build the application (dependencies already cached) RUN cargo build --release -p api_gateway # ============================================================================= diff --git a/services/backtesting_service/Dockerfile b/services/backtesting_service/Dockerfile index d6ff4d322..121fdc26c 100644 --- a/services/backtesting_service/Dockerfile +++ b/services/backtesting_service/Dockerfile @@ -42,16 +42,30 @@ COPY services/backtesting_service ./services/backtesting_service COPY services/ml_training_service ./services/ml_training_service # Build dependencies first (layer caching optimization) +# Create dummy main.rs files for all workspace members to cache dependencies RUN mkdir -p services/backtesting_service/src && \ echo "fn main() {}" > services/backtesting_service/src/main.rs && \ - cargo build --release -p backtesting_service && \ - rm -rf services/backtesting_service/src + mkdir -p common/src && echo "pub fn dummy() {}" > common/src/lib.rs && \ + mkdir -p config/src && echo "pub fn dummy() {}" > config/src/lib.rs && \ + mkdir -p trading_engine/src && echo "pub fn dummy() {}" > trading_engine/src/lib.rs && \ + mkdir -p backtesting/src && echo "pub fn dummy() {}" > backtesting/src/lib.rs && \ + mkdir -p storage/src && echo "pub fn dummy() {}" > storage/src/lib.rs && \ + mkdir -p database/src && echo "pub fn dummy() {}" > database/src/lib.rs && \ + cargo build --release -p backtesting_service 2>&1 | grep -E '(Compiling|Finished|error)' && \ + find target/release -type f -executable -delete && \ + rm -rf common/src config/src trading_engine/src backtesting/src storage/src database/src services/backtesting_service/src -# Copy actual source code +# Copy actual source code for all required crates +COPY common/src ./common/src +COPY config/src ./config/src +COPY trading_engine/src ./trading_engine/src +COPY backtesting/src ./backtesting/src +COPY storage/src ./storage/src +COPY database/src ./database/src COPY services/backtesting_service/src ./services/backtesting_service/src COPY services/backtesting_service/build.rs ./services/backtesting_service/build.rs 2>/dev/null || true -# Build the application +# Build the application (dependencies already cached) RUN cargo build --release -p backtesting_service # ============================================================================= diff --git a/services/ml_training_service/Dockerfile b/services/ml_training_service/Dockerfile index e49ad42c5..3de36fcc4 100644 --- a/services/ml_training_service/Dockerfile +++ b/services/ml_training_service/Dockerfile @@ -1,16 +1,28 @@ # Multi-stage build for Foxhunt ML Training Service -# Wave 71 Agent 8: Production-optimized Docker image +# Wave 112 Agent 18: CUDA-enabled production Docker image # ============================================================================= -# Builder Stage +# Builder Stage with CUDA Support # ============================================================================= -FROM rust:1.83-slim-bookworm AS builder +FROM nvidia/cuda:12.3.0-devel-ubuntu22.04 AS builder -# Install build dependencies +# Install Rust +RUN apt-get update && apt-get install -y \ + curl \ + build-essential \ + && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \ + && . $HOME/.cargo/env \ + && rustup default stable \ + && rustup component add rustfmt clippy + +ENV PATH="/root/.cargo/bin:${PATH}" + +# Install build dependencies including CUDA toolkit RUN apt-get update && apt-get install -y \ pkg-config \ libssl-dev \ protobuf-compiler \ + nvidia-cuda-toolkit \ && rm -rf /var/lib/apt/lists/* # Set working directory @@ -42,22 +54,34 @@ COPY services/backtesting_service ./services/backtesting_service COPY services/ml_training_service ./services/ml_training_service # Build dependencies first (layer caching optimization) +# Create dummy main.rs files for all workspace members to cache dependencies RUN mkdir -p services/ml_training_service/src && \ echo "fn main() {}" > services/ml_training_service/src/main.rs && \ - cargo build --release -p ml_training_service && \ - rm -rf services/ml_training_service/src + mkdir -p common/src && echo "pub fn dummy() {}" > common/src/lib.rs && \ + mkdir -p config/src && echo "pub fn dummy() {}" > config/src/lib.rs && \ + mkdir -p ml/src && echo "pub fn dummy() {}" > ml/src/lib.rs && \ + mkdir -p storage/src && echo "pub fn dummy() {}" > storage/src/lib.rs && \ + mkdir -p database/src && echo "pub fn dummy() {}" > database/src/lib.rs && \ + cargo build --release -p ml_training_service --features cuda 2>&1 | grep -E '(Compiling|Finished|error)' && \ + find target/release -type f -executable -delete && \ + rm -rf common/src config/src ml/src storage/src database/src services/ml_training_service/src -# Copy actual source code +# Copy actual source code for all required crates +COPY common/src ./common/src +COPY config/src ./config/src +COPY ml/src ./ml/src +COPY storage/src ./storage/src +COPY database/src ./database/src COPY services/ml_training_service/src ./services/ml_training_service/src COPY services/ml_training_service/build.rs ./services/ml_training_service/build.rs 2>/dev/null || true -# Build the application -RUN cargo build --release -p ml_training_service +# Build the application with CUDA support (dependencies already cached) +RUN cargo build --release -p ml_training_service --features cuda # ============================================================================= -# Runtime Stage +# Runtime Stage with CUDA Runtime # ============================================================================= -FROM debian:bookworm-slim +FROM nvidia/cuda:12.3.0-runtime-ubuntu22.04 # Install runtime dependencies RUN apt-get update && apt-get install -y \ diff --git a/services/trading_service/Dockerfile b/services/trading_service/Dockerfile index 9f8453195..aa2c384e8 100644 --- a/services/trading_service/Dockerfile +++ b/services/trading_service/Dockerfile @@ -42,16 +42,30 @@ COPY services/backtesting_service ./services/backtesting_service COPY services/ml_training_service ./services/ml_training_service # Build dependencies first (layer caching optimization) +# Create dummy main.rs files for all workspace members to cache dependencies RUN mkdir -p services/trading_service/src && \ echo "fn main() {}" > services/trading_service/src/main.rs && \ - cargo build --release -p trading_service && \ - rm -rf services/trading_service/src + mkdir -p common/src && echo "pub fn dummy() {}" > common/src/lib.rs && \ + mkdir -p config/src && echo "pub fn dummy() {}" > config/src/lib.rs && \ + mkdir -p trading_engine/src && echo "pub fn dummy() {}" > trading_engine/src/lib.rs && \ + mkdir -p risk/src && echo "pub fn dummy() {}" > risk/src/lib.rs && \ + mkdir -p storage/src && echo "pub fn dummy() {}" > storage/src/lib.rs && \ + mkdir -p database/src && echo "pub fn dummy() {}" > database/src/lib.rs && \ + cargo build --release -p trading_service 2>&1 | grep -E '(Compiling|Finished|error)' && \ + find target/release -type f -executable -delete && \ + rm -rf common/src config/src trading_engine/src risk/src storage/src database/src services/trading_service/src -# Copy actual source code +# Copy actual source code for all required crates +COPY common/src ./common/src +COPY config/src ./config/src +COPY trading_engine/src ./trading_engine/src +COPY risk/src ./risk/src +COPY storage/src ./storage/src +COPY database/src ./database/src COPY services/trading_service/src ./services/trading_service/src COPY services/trading_service/build.rs ./services/trading_service/build.rs 2>/dev/null || true -# Build the application +# Build the application (dependencies already cached) RUN cargo build --release -p trading_service # =============================================================================