trading-algo/deploy.sh
Gal Podlipnik 761e595389 docker
2025-07-17 02:43:19 +02:00

250 lines
5.6 KiB
Bash
Executable File

#!/bin/bash
# Trading System Deployment Script
# Usage: ./deploy.sh [start|stop|restart|logs|status|backup]
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Helper functions
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Check if .env file exists
check_env() {
if [ ! -f .env ]; then
log_warning ".env file not found. Creating from template..."
if [ -f .env.production ]; then
cp .env.production .env
log_info "Please edit .env file with your actual API keys"
log_info "nano .env"
exit 1
else
log_error "No .env template found!"
exit 1
fi
fi
}
# Validate environment
validate_env() {
log_info "Validating environment configuration..."
# Source the .env file
export $(grep -v '^#' .env | xargs)
# Check required variables
if [ -z "$ALPACA_API_KEY" ] || [ "$ALPACA_API_KEY" = "your_paper_api_key_here" ]; then
log_error "ALPACA_API_KEY not set in .env file"
exit 1
fi
if [ -z "$ALPACA_SECRET_KEY" ] || [ "$ALPACA_SECRET_KEY" = "your_paper_secret_key_here" ]; then
log_error "ALPACA_SECRET_KEY not set in .env file"
exit 1
fi
# Warn about live trading
if [ "$TRADING_MODE" = "live" ]; then
log_warning "⚠️ LIVE TRADING MODE ENABLED! ⚠️"
log_warning "This will use real money. Are you sure? (y/N)"
read -r response
if [[ ! "$response" =~ ^[Yy]$ ]]; then
log_info "Switching to paper trading mode for safety"
sed -i.bak 's/TRADING_MODE=live/TRADING_MODE=paper/' .env
fi
fi
log_success "Environment validation passed"
}
# Start the trading system
start_system() {
log_info "Starting trading system..."
check_env
validate_env
# Create logs directory
mkdir -p logs
# Build and start containers
docker compose build
docker compose up -d
log_success "Trading system started!"
log_info "View logs with: ./deploy.sh logs"
log_info "Check status with: ./deploy.sh status"
}
# Stop the trading system
stop_system() {
log_info "Stopping trading system..."
docker compose down
log_success "Trading system stopped"
}
# Restart the trading system
restart_system() {
log_info "Restarting trading system..."
stop_system
sleep 2
start_system
}
# Show logs
show_logs() {
if [ "$2" = "live" ]; then
log_info "Following live logs (Ctrl+C to exit)..."
docker compose logs -f trading-bot
else
log_info "Recent logs:"
docker compose logs --tail=50 trading-bot
fi
}
# Show system status
show_status() {
log_info "Trading system status:"
echo
# Container status
docker compose ps
echo
# Recent performance
log_info "Recent performance (last 5 entries):"
if [ -f logs/performance.log ]; then
tail -5 logs/performance.log
else
log_warning "No performance data yet"
fi
echo
# Recent trades
log_info "Recent trades (last 3 entries):"
if [ -f logs/trades.log ]; then
tail -3 logs/trades.log
else
log_warning "No trades yet"
fi
echo
# Risk events
log_info "Recent risk events:"
if [ -f logs/risk.log ]; then
tail -3 logs/risk.log
else
log_success "No risk events"
fi
}
# Backup logs and data
backup_data() {
log_info "Creating backup..."
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_DIR="backups/backup_$TIMESTAMP"
mkdir -p "$BACKUP_DIR"
# Backup logs
if [ -d logs ]; then
cp -r logs "$BACKUP_DIR/"
fi
# Backup configuration
cp .env "$BACKUP_DIR/.env.backup" 2>/dev/null || true
cp docker-compose.yml "$BACKUP_DIR/"
log_success "Backup created: $BACKUP_DIR"
}
# Update system
update_system() {
log_info "Updating trading system..."
# Stop system
stop_system
# Backup current state
backup_data
# Rebuild containers
docker compose build --no-cache
# Start system
start_system
log_success "System updated successfully"
}
# Main script logic
case "${1:-help}" in
start)
start_system
;;
stop)
stop_system
;;
restart)
restart_system
;;
logs)
show_logs "$@"
;;
status)
show_status
;;
backup)
backup_data
;;
update)
update_system
;;
help|*)
echo "Trading System Deployment Script"
echo
echo "Usage: $0 [command]"
echo
echo "Commands:"
echo " start - Start the trading system"
echo " stop - Stop the trading system"
echo " restart - Restart the trading system"
echo " logs - Show recent logs"
echo " logs live - Follow live logs"
echo " status - Show system status and performance"
echo " backup - Backup logs and configuration"
echo " update - Update and restart system"
echo " help - Show this help message"
echo
echo "Examples:"
echo " $0 start # Start trading"
echo " $0 logs live # Watch live logs"
echo " $0 status # Check performance"
echo
;;
esac