feat: Add complete Docker containerization for v4

Production & Development Setup:
- Multi-stage Dockerfile with optimized build (node:20-alpine)
- docker-compose.yml for production with PostgreSQL
- docker-compose.dev.yml for development with hot reload
- Dockerfile.dev for development environment
- .dockerignore to reduce build context

Features:
- Health checks for both app and database
- Non-root user security (nextjs:nodejs)
- Resource limits (CPU/memory)
- Volume persistence for logs and database
- PostgreSQL 16 with automatic initialization
- Network isolation with custom bridge network

Helper Scripts:
- docker-build.sh - Build production image
- docker-start.sh - Start all services
- docker-stop.sh - Stop containers safely
- docker-logs.sh - View real-time logs

Documentation:
- DOCKER.md - Complete deployment guide with:
  * Quick start commands
  * Production deployment steps
  * Development hot reload setup
  * Configuration examples
  * Docker commands reference
  * Troubleshooting guide
  * Best practices for security & performance

Configuration:
- Environment-based configuration via .env
- Safe defaults for testing ($50 positions)
- Separate dev/prod compose files
- Debug mode with Node.js inspector (port 9229)
- Log rotation and resource monitoring

Ready for deployment with:
  cd v4 && ./docker-start.sh
This commit is contained in:
mindesbunister
2025-10-23 14:57:49 +02:00
parent 3859bb31f0
commit 8bb2f64568
10 changed files with 1134 additions and 0 deletions

132
v4/.dockerignore Normal file
View File

@@ -0,0 +1,132 @@
# Trading Bot v4 - Docker Ignore File
# Reduces build context size and prevents sensitive data from being copied
# Dependencies
node_modules
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Next.js
.next/
out/
build/
dist/
# Environment files (NEVER copy these!)
.env
.env.*
!.env.example
.env.local
.env.development
.env.test
.env.production
# Private keys and secrets
*.pem
*.key
*.p12
*.pfx
*-key.json
secrets/
credentials/
# Testing
coverage/
.nyc_output/
*.test.js
*.spec.js
__tests__/
test/
# Logs
logs/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# OS files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
*~
# IDE files
.vscode/
.idea/
*.swp
*.swo
*.swn
.vs/
# Git
.git/
.gitignore
.gitattributes
# Docker
Dockerfile*
docker-compose*.yml
.dockerignore
# CI/CD
.github/
.gitlab-ci.yml
.travis.yml
azure-pipelines.yml
# Documentation (optional - uncomment if you want to exclude)
# *.md
# docs/
# Development tools
.eslintrc*
.prettierrc*
.editorconfig
tsconfig.tsbuildinfo
# Database files
*.sqlite
*.sqlite3
*.db
# Prisma migrations (include if needed)
prisma/migrations/
# Screenshots and media
screenshots/
*.png
*.jpg
*.jpeg
*.gif
*.mp4
*.mov
# Temporary files
tmp/
temp/
*.tmp
# Backup files
*.bak
*.backup
*~
# Python
__pycache__/
*.py[cod]
*.pyo
*.pyd
.Python
*.so
# Large files
*.zip
*.tar
*.tar.gz
*.rar

557
v4/DOCKER.md Normal file
View File

@@ -0,0 +1,557 @@
# Trading Bot v4 - Docker Deployment Guide
Complete guide for containerized deployment with Docker and Docker Compose.
---
## 📋 Table of Contents
1. [Quick Start](#quick-start)
2. [Production Deployment](#production-deployment)
3. [Development Setup](#development-setup)
4. [Configuration](#configuration)
5. [Docker Commands](#docker-commands)
6. [Troubleshooting](#troubleshooting)
7. [Best Practices](#best-practices)
---
## 🚀 Quick Start
### Prerequisites
```bash
# Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Install Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Verify installation
docker --version
docker-compose --version
```
### Minimal Setup (Production)
```bash
# 1. Navigate to v4 directory
cd v4
# 2. Create .env file from template
cp .env.example .env
# 3. Edit .env with your credentials
nano .env # or vim, code, etc.
# 4. Build and start
docker-compose up -d
# 5. View logs
docker-compose logs -f trading-bot
# 6. Check status
docker-compose ps
```
---
## 🏭 Production Deployment
### Step 1: Prepare Environment
```bash
cd v4
# Create production .env file
cp .env.example .env
# Edit required fields (minimum required)
DRIFT_WALLET_PRIVATE_KEY=your_base58_private_key
SOLANA_RPC_URL=https://mainnet.helius-rpc.com/?api-key=YOUR_KEY
API_SECRET_KEY=$(openssl rand -hex 32)
PYTH_HERMES_URL=https://hermes.pyth.network
# Trading config (safe defaults)
MAX_POSITION_SIZE_USD=50
LEVERAGE=10
DRY_RUN=false
# Database password (if using PostgreSQL)
POSTGRES_PASSWORD=$(openssl rand -hex 16)
```
### Step 2: Build Image
```bash
# Build with cache
docker-compose build
# Build without cache (clean build)
docker-compose build --no-cache
# Build with progress output
docker-compose build --progress=plain
```
### Step 3: Start Services
```bash
# Start all services in background
docker-compose up -d
# Start specific service
docker-compose up -d trading-bot
# Start with recreation (force restart)
docker-compose up -d --force-recreate
```
### Step 4: Verify Deployment
```bash
# Check running containers
docker-compose ps
# View logs
docker-compose logs -f trading-bot
# Check health
docker-compose exec trading-bot wget -qO- http://localhost:3000/api/health
# Test API
curl -H "Authorization: Bearer YOUR_API_KEY" \
http://localhost:3000/api/trading/positions
```
### Step 5: Monitor
```bash
# Follow logs in real-time
docker-compose logs -f
# View resource usage
docker stats
# Check container details
docker inspect trading-bot-v4
```
---
## 🔧 Development Setup
### Hot Reload Development
```bash
cd v4
# Create dev .env
cp .env.example .env
# Set to devnet for safety
echo "DRIFT_ENV=devnet" >> .env
echo "DRY_RUN=true" >> .env
echo "MAX_POSITION_SIZE_USD=10" >> .env
# Start development container
docker-compose -f docker-compose.dev.yml up
# Rebuild on code changes
docker-compose -f docker-compose.dev.yml up --build
```
### Debug Mode
```bash
# Start with Node.js debugger
docker-compose -f docker-compose.dev.yml up
# Attach debugger in VS Code:
# 1. Open Debug panel (Ctrl+Shift+D)
# 2. Select "Attach to Docker"
# 3. Set breakpoints
# 4. Start debugging
# Or use Chrome DevTools:
# Open: chrome://inspect
# Click: "Configure" → Add localhost:9229
```
### Run Tests in Container
```bash
# Execute tests
docker-compose exec trading-bot npm test
# Run specific test
docker-compose exec trading-bot npx tsx v4/test-price-monitor.ts
# Shell access for manual testing
docker-compose exec trading-bot sh
```
---
## ⚙️ Configuration
### Environment Variables
Create `.env` file in `v4/` directory:
```env
# Required
DRIFT_WALLET_PRIVATE_KEY=your_key
SOLANA_RPC_URL=your_rpc
API_SECRET_KEY=your_secret
# Optional overrides
MAX_POSITION_SIZE_USD=50
LEVERAGE=10
LOG_LEVEL=info
```
See `.env.example` for complete list.
### Docker Compose Override
Create `docker-compose.override.yml` for local customizations:
```yaml
version: '3.9'
services:
trading-bot:
ports:
- "3001:3000" # Use different port
environment:
LOG_LEVEL: debug # More verbose logging
volumes:
- ./custom-config:/app/config # Custom config directory
```
### Resource Limits
Edit `docker-compose.yml`:
```yaml
deploy:
resources:
limits:
cpus: '2' # Max 2 CPU cores
memory: 2G # Max 2GB RAM
reservations:
cpus: '1' # Reserve 1 core
memory: 1G # Reserve 1GB
```
---
## 🎮 Docker Commands Reference
### Container Management
```bash
# Start services
docker-compose up -d
# Stop services
docker-compose stop
# Stop and remove containers
docker-compose down
# Restart specific service
docker-compose restart trading-bot
# View container status
docker-compose ps
# View resource usage
docker stats trading-bot-v4
```
### Logs & Debugging
```bash
# View all logs
docker-compose logs
# Follow logs in real-time
docker-compose logs -f trading-bot
# Last 100 lines
docker-compose logs --tail=100 trading-bot
# Logs since timestamp
docker-compose logs --since 2024-10-23T10:00:00
# Shell access
docker-compose exec trading-bot sh
# Run command in container
docker-compose exec trading-bot node -v
```
### Database Operations
```bash
# Access PostgreSQL CLI
docker-compose exec postgres psql -U postgres -d trading_bot_v4
# Backup database
docker-compose exec postgres pg_dump -U postgres trading_bot_v4 > backup.sql
# Restore database
docker-compose exec -T postgres psql -U postgres trading_bot_v4 < backup.sql
# View database logs
docker-compose logs postgres
```
### Cleanup
```bash
# Stop and remove containers
docker-compose down
# Remove containers and volumes
docker-compose down -v
# Remove everything including images
docker-compose down --rmi all -v
# Clean up unused Docker resources
docker system prune -a
```
### Image Management
```bash
# Build image
docker-compose build
# Rebuild without cache
docker-compose build --no-cache
# Pull latest base images
docker-compose pull
# View images
docker images | grep trading-bot
# Remove old images
docker rmi trading-bot-v4:old
```
---
## 🔍 Troubleshooting
### Container Won't Start
```bash
# Check logs for errors
docker-compose logs trading-bot
# Verify environment variables
docker-compose config
# Check if port is already in use
sudo lsof -i :3000
# Rebuild from scratch
docker-compose down -v
docker-compose build --no-cache
docker-compose up -d
```
### Connection Issues
```bash
# Test internal network
docker-compose exec trading-bot ping postgres
# Check exposed ports
docker-compose port trading-bot 3000
# Verify RPC connection
docker-compose exec trading-bot wget -qO- $SOLANA_RPC_URL
# Test Pyth connection
docker-compose exec trading-bot wget -qO- https://hermes.pyth.network
```
### Performance Issues
```bash
# Check resource usage
docker stats
# View container processes
docker top trading-bot-v4
# Increase resources in docker-compose.yml
deploy:
resources:
limits:
cpus: '2'
memory: 2G
# Restart with new limits
docker-compose up -d
```
### Database Issues
```bash
# Check database health
docker-compose exec postgres pg_isready
# View database connections
docker-compose exec postgres psql -U postgres -c "SELECT * FROM pg_stat_activity"
# Reset database
docker-compose down -v postgres
docker-compose up -d postgres
```
### Permission Issues
```bash
# Fix volume permissions
sudo chown -R 1001:1001 ./logs
sudo chmod -R 755 ./logs
# Run as root (not recommended)
docker-compose run --user root trading-bot sh
```
---
## ✅ Best Practices
### Security
1. **Never commit .env files**
```bash
echo ".env" >> .gitignore
echo ".env.*" >> .gitignore
```
2. **Use secrets for sensitive data**
```yaml
services:
trading-bot:
secrets:
- drift_private_key
secrets:
drift_private_key:
file: ./secrets/drift_key.txt
```
3. **Run as non-root user** (already configured in Dockerfile)
4. **Limit container capabilities**
```yaml
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
```
### Performance
1. **Use multi-stage builds** (already configured)
2. **Mount volumes for persistence**
```yaml
volumes:
- ./logs:/app/logs
- postgres-data:/var/lib/postgresql/data
```
3. **Set resource limits**
```yaml
deploy:
resources:
limits:
memory: 1G
```
4. **Use BuildKit for faster builds**
```bash
DOCKER_BUILDKIT=1 docker-compose build
```
### Monitoring
1. **Health checks** (already configured)
2. **Log rotation**
```yaml
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
```
3. **Metrics collection**
```bash
# Export container metrics
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
```
### Deployment
1. **Use tagged images**
```bash
docker tag trading-bot-v4:latest trading-bot-v4:1.0.0
```
2. **Automated backups**
```bash
# Backup script
docker-compose exec postgres pg_dump -U postgres trading_bot_v4 | \
gzip > backup-$(date +%Y%m%d).sql.gz
```
3. **Blue-green deployment**
```bash
# Start new version on different port
docker-compose -f docker-compose.blue.yml up -d
# Test new version
curl http://localhost:3001/api/health
# Switch traffic (nginx/traefik)
# Stop old version
docker-compose -f docker-compose.green.yml down
```
---
## 🔗 Additional Resources
- **Docker Docs**: https://docs.docker.com
- **Docker Compose**: https://docs.docker.com/compose
- **Node.js Docker**: https://nodejs.org/en/docs/guides/nodejs-docker-webapp
- **Next.js Docker**: https://nextjs.org/docs/deployment#docker-image
---
## 📞 Support
For issues specific to:
- **Docker setup**: Check this guide first
- **Trading bot**: See `../TRADING_BOT_V4_MANUAL.md`
- **Phase 2 features**: See `PHASE_2_COMPLETE.md`
- **Testing**: See `TESTING.md`
---
**Ready to deploy! 🚀**

93
v4/Dockerfile Normal file
View File

@@ -0,0 +1,93 @@
# Trading Bot v4 - Production Docker Image
# Multi-stage build for optimal size and security
# ================================
# Stage 1: Dependencies
# ================================
FROM node:20-alpine AS deps
# Install system dependencies for native modules
RUN apk add --no-cache \
python3 \
make \
g++ \
libc6-compat
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm ci --only=production && \
npm cache clean --force
# ================================
# Stage 2: Builder
# ================================
FROM node:20-alpine AS builder
WORKDIR /app
# Copy dependencies from deps stage
COPY --from=deps /app/node_modules ./node_modules
# Copy source code
COPY . .
# Build Next.js application
ENV NEXT_TELEMETRY_DISABLED 1
ENV NODE_ENV production
RUN npm run build
# ================================
# Stage 3: Runner (Production)
# ================================
FROM node:20-alpine AS runner
# Install dumb-init for proper signal handling
RUN apk add --no-cache dumb-init
WORKDIR /app
# Create non-root user
RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 nextjs
# Copy necessary files from builder
COPY --from=builder /app/next.config.ts ./
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/public ./public
# Copy v4 directory
COPY --from=builder --chown=nextjs:nodejs /app/v4 ./v4
# Copy Next.js build output
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
# Copy node_modules
COPY --from=deps --chown=nextjs:nodejs /app/node_modules ./node_modules
# Set environment variables
ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1
ENV PORT 3000
ENV HOSTNAME "0.0.0.0"
# Expose port
EXPOSE 3000
# Switch to non-root user
USER nextjs
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
CMD node -e "require('http').get('http://localhost:3000/api/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
# Use dumb-init to handle signals properly
ENTRYPOINT ["dumb-init", "--"]
# Start the application
CMD ["node", "server.js"]

34
v4/Dockerfile.dev Normal file
View File

@@ -0,0 +1,34 @@
# Trading Bot v4 - Development Docker Image
# With hot reload and debugging enabled
FROM node:20-alpine
# Install system dependencies
RUN apk add --no-cache \
python3 \
make \
g++ \
curl \
libc6-compat
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install all dependencies (including dev dependencies)
RUN npm install && \
npm cache clean --force
# Copy source code (will be overridden by volume mount)
COPY . .
# Expose ports
EXPOSE 3000 9229
# Set environment
ENV NODE_ENV=development
ENV NEXT_TELEMETRY_DISABLED=1
# Start development server with hot reload
CMD ["npm", "run", "dev"]

36
v4/docker-build.sh Executable file
View File

@@ -0,0 +1,36 @@
#!/bin/bash
# Trading Bot v4 - Docker Build Script
# Builds production-ready Docker image
set -e
echo "🐳 Building Trading Bot v4 Docker Image..."
echo ""
# Navigate to v4 directory
cd "$(dirname "$0")"
# Check if .env exists
if [ ! -f ".env" ]; then
echo "⚠️ Warning: .env file not found!"
echo " Creating from .env.example..."
cp .env.example .env
echo " ✅ .env created. Please edit it with your credentials."
echo ""
fi
# Build with BuildKit for better performance
export DOCKER_BUILDKIT=1
echo "📦 Building image with BuildKit..."
docker-compose build --progress=plain
echo ""
echo "✅ Build complete!"
echo ""
echo "Next steps:"
echo " 1. Edit .env file with your credentials"
echo " 2. Run: docker-compose up -d"
echo " 3. Check logs: docker-compose logs -f"
echo ""

66
v4/docker-compose.dev.yml Normal file
View File

@@ -0,0 +1,66 @@
# Trading Bot v4 - Development Docker Compose
# Hot reload enabled, debug logging, no database required
version: '3.9'
services:
# ================================
# Trading Bot (Development)
# ================================
trading-bot-dev:
build:
context: ..
dockerfile: v4/Dockerfile.dev
args:
NODE_ENV: development
container_name: trading-bot-v4-dev
restart: unless-stopped
ports:
- "3001:3000" # Use different port to avoid conflicts
- "9229:9229" # Node.js debugger
environment:
NODE_ENV: development
PORT: 3000
LOG_LEVEL: debug
DEBUG: "*"
# Load from .env file
DRIFT_WALLET_PRIVATE_KEY: ${DRIFT_WALLET_PRIVATE_KEY}
DRIFT_ENV: ${DRIFT_ENV:-devnet} # Use devnet by default in development
API_SECRET_KEY: ${API_SECRET_KEY:-dev-secret-key}
SOLANA_RPC_URL: ${SOLANA_RPC_URL}
PYTH_HERMES_URL: ${PYTH_HERMES_URL:-https://hermes.pyth.network}
# Safe defaults for development
MAX_POSITION_SIZE_USD: ${MAX_POSITION_SIZE_USD:-10}
LEVERAGE: ${LEVERAGE:-10}
DRY_RUN: ${DRY_RUN:-true} # Dry run by default in dev
# Notifications (optional in dev)
TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN:-}
TELEGRAM_CHAT_ID: ${TELEGRAM_CHAT_ID:-}
volumes:
# Hot reload - mount source code
- ..:/app:cached
- /app/node_modules
- /app/.next
# Mount logs
- ./logs:/app/logs
networks:
- trading-net-dev
command: npm run dev
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
networks:
trading-net-dev:
driver: bridge

135
v4/docker-compose.yml Normal file
View File

@@ -0,0 +1,135 @@
# Trading Bot v4 - Docker Compose Configuration
# Production-ready setup with PostgreSQL and monitoring
version: '3.9'
services:
# ================================
# Trading Bot Application
# ================================
trading-bot:
build:
context: ..
dockerfile: v4/Dockerfile
container_name: trading-bot-v4
restart: unless-stopped
ports:
- "3000: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 for hot reload in development (comment out in production)
# - ./v4:/app/v4:ro
networks:
- trading-net
depends_on:
postgres:
condition: service_healthy
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
start_period: 40s
# Resource limits (adjust based on your needs)
deploy:
resources:
limits:
cpus: '1'
memory: 1G
reservations:
cpus: '0.5'
memory: 512M
# ================================
# 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
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
# ================================
# Networks
# ================================
networks:
trading-net:
driver: bridge
ipam:
config:
- subnet: 172.25.0.0/16
# ================================
# Volumes
# ================================
volumes:
postgres-data:
driver: local

14
v4/docker-logs.sh Executable file
View File

@@ -0,0 +1,14 @@
#!/bin/bash
# Trading Bot v4 - Docker Logs Script
# Shows real-time logs from all containers
set -e
cd "$(dirname "$0")"
echo "📋 Trading Bot v4 Logs"
echo "Press Ctrl+C to exit"
echo ""
docker-compose logs -f --tail=100 trading-bot

43
v4/docker-start.sh Executable file
View File

@@ -0,0 +1,43 @@
#!/bin/bash
# Trading Bot v4 - Docker Start Script
# Starts the trading bot in production mode
set -e
echo "🚀 Starting Trading Bot v4..."
echo ""
# Navigate to v4 directory
cd "$(dirname "$0")"
# Check if .env exists
if [ ! -f ".env" ]; then
echo "❌ Error: .env file not found!"
echo " Run: cp .env.example .env"
echo " Then edit .env with your credentials"
exit 1
fi
# Check if image exists
if ! docker images | grep -q "trading-bot"; then
echo "📦 Image not found. Building..."
./docker-build.sh
fi
# Start services
echo "🐳 Starting containers..."
docker-compose up -d
echo ""
echo "✅ Trading Bot started!"
echo ""
echo "Status:"
docker-compose ps
echo ""
echo "View logs:"
echo " docker-compose logs -f trading-bot"
echo ""
echo "Stop bot:"
echo " docker-compose down"
echo ""

24
v4/docker-stop.sh Executable file
View File

@@ -0,0 +1,24 @@
#!/bin/bash
# Trading Bot v4 - Docker Stop Script
# Safely stops all containers
set -e
echo "🛑 Stopping Trading Bot v4..."
echo ""
cd "$(dirname "$0")"
# Stop containers
docker-compose stop
echo ""
echo "✅ Containers stopped"
echo ""
echo "To remove containers:"
echo " docker-compose down"
echo ""
echo "To remove containers and volumes:"
echo " docker-compose down -v"
echo ""