# Trading Bot v4 - Docker Compose Configuration # Production-ready setup with PostgreSQL and monitoring services: # ================================ # Trading Bot Application # ================================ trading-bot: build: context: . dockerfile: Dockerfile container_name: trading-bot-v4 restart: unless-stopped ports: - "3001:3000" environment: # Node environment NODE_ENV: production PORT: 3000 # Load from .env file (create from .env.example) DRIFT_WALLET_PRIVATE_KEY: ${DRIFT_WALLET_PRIVATE_KEY} DRIFT_ENV: ${DRIFT_ENV:-mainnet-beta} API_SECRET_KEY: ${API_SECRET_KEY} SOLANA_RPC_URL: ${SOLANA_RPC_URL} PYTH_HERMES_URL: ${PYTH_HERMES_URL:-https://hermes.pyth.network} # Trading configuration MAX_POSITION_SIZE_USD: ${MAX_POSITION_SIZE_USD:-50} LEVERAGE: ${LEVERAGE:-10} STOP_LOSS_PERCENT: ${STOP_LOSS_PERCENT:--1.5} TAKE_PROFIT_1_PERCENT: ${TAKE_PROFIT_1_PERCENT:-0.7} TAKE_PROFIT_1_SIZE_PERCENT: ${TAKE_PROFIT_1_SIZE_PERCENT:-50} TAKE_PROFIT_2_PERCENT: ${TAKE_PROFIT_2_PERCENT:-1.5} TAKE_PROFIT_2_SIZE_PERCENT: ${TAKE_PROFIT_2_SIZE_PERCENT:-50} # Database (if using PostgreSQL) DATABASE_URL: ${DATABASE_URL:-postgresql://postgres:postgres@postgres:5432/trading_bot_v4} # Notifications TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN:-} TELEGRAM_CHAT_ID: ${TELEGRAM_CHAT_ID:-} DISCORD_WEBHOOK_URL: ${DISCORD_WEBHOOK_URL:-} # n8n integration N8N_WEBHOOK_URL: ${N8N_WEBHOOK_URL:-} TRADINGVIEW_WEBHOOK_SECRET: ${TRADINGVIEW_WEBHOOK_SECRET:-} # Monitoring LOG_LEVEL: ${LOG_LEVEL:-info} DRY_RUN: ${DRY_RUN:-false} volumes: # Mount .env file for settings persistence - ./.env:/app/.env # Mount logs directory - ./logs:/app/logs # Mount Docker socket for container restart capability - /var/run/docker.sock:/var/run/docker.sock # Mount for hot reload in development (comment out in production) # - ./v4:/app/v4:ro networks: - trading-net depends_on: - postgres healthcheck: test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000/api/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"] interval: 30s timeout: 10s retries: 3 # ================================ # PostgreSQL Database (Optional) # ================================ postgres: image: postgres:16-alpine container_name: trading-bot-postgres restart: unless-stopped ports: - "5432:5432" environment: POSTGRES_DB: trading_bot_v4 POSTGRES_USER: postgres POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=en_US.UTF-8" volumes: # Persist database data - postgres-data:/var/lib/postgresql/data # Custom initialization scripts (optional) - ./prisma/init.sql:/docker-entrypoint-initdb.d/init.sql:ro networks: - trading-net healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 # ================================ # Networks # ================================ networks: trading-net: driver: bridge ipam: config: - subnet: 172.28.0.0/16 # ================================ # Volumes # ================================ volumes: postgres-data: driver: local