Files
trading_bot_v4/docker-compose.yml
mindesbunister 26864c10f2 feat: Add container restart functionality from web UI
- Added restart button to settings page
- Created /api/restart endpoint (file-flag based)
- Implemented watch-restart.sh daemon
- Added systemd service for restart watcher
- Updated README with restart setup instructions
- Container automatically restarts when settings changed

Settings flow:
1. User edits settings in web UI
2. Click 'Save Settings' to persist to .env
3. Click 'Restart Bot' to apply changes
4. Watcher detects flag and restarts container
5. New settings loaded automatically
2025-10-24 15:06:26 +02:00

117 lines
3.3 KiB
YAML

# 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_2_PERCENT: ${TAKE_PROFIT_2_PERCENT:-1.5}
# 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 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