- 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
117 lines
3.3 KiB
YAML
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
|