- Change file mode from 644 to 755 for all project files - Add chain_id parameter to get_balance RPC endpoint with default "ait-devnet" - Rename Miner.extra_meta_data to extra_metadata for consistency
12 KiB
12 KiB
AITBC Production Deployment Guide
🚀 Production Deployment Readiness Checklist
✅ Pre-Deployment Requirements
- All development tasks completed
- All tests passing (unit, integration, performance, security)
- CI/CD pipeline configured and tested
- Infrastructure provisioned (servers, databases, networking)
- Security certificates and SSL configured
- Monitoring and alerting systems set up
- Backup and disaster recovery plans in place
- Team training and documentation complete
📋 Production Deployment Steps
Phase 1: Infrastructure Preparation
1.1 Server Infrastructure
# Production servers (minimum requirements)
# Application Servers: 4x 8-core, 16GB RAM, 500GB SSD
# Database Servers: 2x 16-core, 64GB RAM, 1TB SSD (primary + replica)
# Load Balancers: 2x 4-core, 8GB RAM
# Monitoring: 1x 4-core, 8GB RAM, 200GB SSD
# Network Configuration
# - Load balancer with SSL termination
# - Application servers behind load balancer
# - Database in private network
# - Redis cluster for caching
# - CDN for static assets
1.2 Database Setup
# PostgreSQL Production Setup
sudo -u postgres psql
CREATE DATABASE aitbc_prod;
CREATE USER aitbc_user WITH PASSWORD 'secure_password';
GRANT ALL PRIVILEGES ON DATABASE aitbc_prod TO aitbc_user;
# Redis Production Setup
redis-server --port 6379 --requirepass 'redis_password' --maxmemory 4gb --maxmemory-policy allkeys-lru
1.3 SSL Certificates
# Generate SSL certificates (Let's Encrypt)
sudo certbot --nginx -d aitbc.dev -d api.aitbc.dev -d marketplace.aitbc.dev
Phase 2: Application Deployment
2.1 Deploy Core Services
# Clone production branch
git clone https://github.com/aitbc/aitbc.git /opt/aitbc
cd /opt/aitbc
git checkout production
# Set environment variables
export NODE_ENV=production
export DATABASE_URL=postgresql://aitbc_user:secure_password@localhost:5432/aitbc_prod
export REDIS_URL=redis://localhost:6379/0
export JWT_SECRET=your_jwt_secret_here
export ENCRYPTION_KEY=your_encryption_key_here
# Build and deploy services
./scripts/deploy.sh production latest us-east-1
2.2 Service Configuration
# docker-compose.prod.yml
version: '3.8'
services:
postgres:
image: postgres:15
environment:
POSTGRES_DB: aitbc_prod
POSTGRES_USER: aitbc_user
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
- ./backups:/backups
restart: unless-stopped
redis:
image: redis:7-alpine
command: redis-server --requirepass ${REDIS_PASSWORD}
volumes:
- redis_data:/data
restart: unless-stopped
blockchain-node:
image: aitbc/blockchain-node:latest
environment:
- NODE_ENV=production
- DATABASE_URL=${DATABASE_URL}
- REDIS_URL=${REDIS_URL}
ports:
- "8007:8007"
depends_on:
- postgres
- redis
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8007/health"]
interval: 30s
timeout: 10s
retries: 3
# ... other services
2.3 Load Balancer Configuration
# /etc/nginx/sites-available/aitbc-prod
upstream aitbc_api {
server 10.0.1.10:8001 max_fails=3 fail_timeout=30s;
server 10.0.1.11:8001 max_fails=3 fail_timeout=30s;
}
upstream aitbc_exchange {
server 10.0.1.10:8010 max_fails=3 fail_timeout=30s;
server 10.0.1.11:8010 max_fails=3 fail_timeout=30s;
}
server {
listen 443 ssl http2;
server_name api.aitbc.dev;
ssl_certificate /etc/letsencrypt/live/api.aitbc.dev/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.aitbc.dev/privkey.pem;
location / {
proxy_pass http://aitbc_api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Phase 3: Monitoring Setup
3.1 Prometheus Configuration
# prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'aitbc-services'
static_configs:
- targets:
- 'localhost:8001' # coordinator-api
- 'localhost:8010' # exchange-integration
- 'localhost:8012' # trading-engine
- 'localhost:8013' # plugin-registry
- 'localhost:8014' # plugin-marketplace
- 'localhost:8017' # global-infrastructure
- 'localhost:8018' # ai-agents
3.2 Grafana Dashboards
# Import pre-configured dashboards
curl -X POST \
-H "Authorization: Bearer $GRAFANA_API_KEY" \
-H "Content-Type: application/json" \
-d @monitoring/grafana/dashboards/aitbc-overview.json \
http://localhost:3000/api/dashboards/db
Phase 4: Security Configuration
4.1 Firewall Setup
# UFW Configuration
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow from 10.0.0.0/8 to any port 5432 # Database access
sudo ufw allow from 10.0.0.0/8 to any port 6379 # Redis access
sudo ufw enable
4.2 Application Security
# Set secure file permissions
chmod 600 /opt/aitbc/.env
chmod 700 /opt/aitbc/.aitbc
chown -R aitbc:aitbc /opt/aitbc
# Configure log rotation
sudo tee /etc/logrotate.d/aitbc << EOF
/opt/aitbc/logs/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 644 aitbc aitbc
postrotate
systemctl reload aitbc-services
endscript
}
EOF
Phase 5: Backup Strategy
5.1 Database Backups
#!/bin/bash
# /opt/aitbc/scripts/backup-db.sh
BACKUP_DIR="/opt/aitbc/backups"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="aitbc_prod"
# Create backup
pg_dump -h localhost -U aitbc_user -d $DB_NAME | gzip > $BACKUP_DIR/aitbc_backup_$DATE.sql.gz
# Keep only last 30 days
find $BACKUP_DIR -name "aitbc_backup_*.sql.gz" -mtime +30 -delete
# Upload to cloud storage (AWS S3 example)
aws s3 cp $BACKUP_DIR/aitbc_backup_$DATE.sql.gz s3://aitbc-backups/database/
5.2 Application Backups
#!/bin/bash
# /opt/aitbc/scripts/backup-app.sh
BACKUP_DIR="/opt/aitbc/backups"
DATE=$(date +%Y%m%d_%H%M%S)
# Backup application data
tar -czf $BACKUP_DIR/aitbc_app_backup_$DATE.tar.gz \
/opt/aitbc/data \
/opt/aitbc/.aitbc \
/opt/aitbc/config
# Upload to cloud storage
aws s3 cp $BACKUP_DIR/aitbc_app_backup_$DATE.tar.gz s3://aitbc-backups/application/
Phase 6: Health Checks and Monitoring
6.1 Service Health Check Script
#!/bin/bash
# /opt/aitbc/scripts/health-check.sh
services=(
"coordinator-api:8001"
"exchange-integration:8010"
"trading-engine:8012"
"plugin-registry:8013"
"plugin-marketplace:8014"
"global-infrastructure:8017"
"ai-agents:8018"
)
for service in "${services[@]}"; do
name=$(echo $service | cut -d: -f1)
port=$(echo $service | cut -d: -f2)
if curl -f -s http://localhost:$port/health > /dev/null; then
echo "✅ $name is healthy"
else
echo "❌ $name is unhealthy"
# Send alert
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"🚨 AITBC Alert: '$name' is unhealthy"}' \
$SLACK_WEBHOOK_URL
fi
done
6.2 Performance Monitoring
#!/bin/bash
# /opt/aitbc/scripts/performance-monitor.sh
# Monitor CPU and memory
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
memory_usage=$(free | grep Mem | awk '{printf("%.1f", $3/$2 * 100.0)}')
# Monitor disk space
disk_usage=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
# Send alerts if thresholds exceeded
if (( $(echo "$cpu_usage > 80" | bc -l) )); then
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"🚨 High CPU usage: '$cpu_usage'%"}' \
$SLACK_WEBHOOK_URL
fi
if (( $(echo "$memory_usage > 85" | bc -l) )); then
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"🚨 High memory usage: '$memory_usage'%"}' \
$SLACK_WEBHOOK_URL
fi
if (( disk_usage > 90 )); then
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"🚨 High disk usage: '$disk_usage'%"}' \
$SLACK_WEBHOOK_URL
fi
Phase 7: Deployment Automation
7.1 Zero-Downtime Deployment
#!/bin/bash
# /opt/aitbc/scripts/zero-downtime-deploy.sh
NEW_VERSION=$1
CURRENT_VERSION=$(docker service ls --format '{{.Image}}' | head -1 | cut -d: -f2)
echo "Deploying version: $NEW_VERSION"
echo "Current version: $CURRENT_VERSION"
# Pull new images
docker pull aitbc/coordinator-api:$NEW_VERSION
docker pull aitbc/exchange-integration:$NEW_VERSION
docker pull aitbc/trading-engine:$NEW_VERSION
# Update services one by one
services=("coordinator-api" "exchange-integration" "trading-engine")
for service in "${services[@]}"; do
echo "Updating $service..."
# Scale up to ensure availability
docker service scale $service=2
# Update one instance
docker service update \
--image aitbc/$service:$NEW_VERSION \
--update-parallelism 1 \
--update-delay 30s \
$service
# Wait for update to complete
docker service ps $service --format "{{.CurrentState}}" | grep -q "Running"
# Scale back down
docker service scale $service=1
echo "$service updated successfully"
done
echo "Deployment completed!"
Phase 8: Post-Deployment Verification
8.1 Smoke Tests
#!/bin/bash
# /opt/aitbc/scripts/smoke-tests.sh
echo "Running smoke tests..."
# Test API endpoints
endpoints=(
"http://api.aitbc.dev/health"
"http://api.aitbc.dev/api/v1/pairs"
"http://marketplace.aitbc.dev/api/v1/marketplace/featured"
"http://api.aitbc.dev/api/v1/network/dashboard"
)
for endpoint in "${endpoints[@]}"; do
if curl -f -s $endpoint > /dev/null; then
echo "✅ $endpoint is responding"
else
echo "❌ $endpoint is not responding"
exit 1
fi
done
# Test CLI functionality
docker exec aitbc-cli python -m aitbc_cli.main --version > /dev/null
if [ $? -eq 0 ]; then
echo "✅ CLI is working"
else
echo "❌ CLI is not working"
exit 1
fi
echo "All smoke tests passed!"
8.2 Load Testing
#!/bin/bash
# /opt/aitbc/scripts/load-test.sh
echo "Running load tests..."
# Test API load
ab -n 1000 -c 10 http://api.aitbc.dev/health
# Test marketplace load
ab -n 500 -c 5 http://marketplace.aitbc.dev/api/v1/marketplace/featured
echo "Load tests completed!"
📊 Production Deployment Success Metrics
Key Performance Indicators
- Uptime: > 99.9%
- Response Time: < 200ms (95th percentile)
- Error Rate: < 0.1%
- Throughput: > 1000 requests/second
- Database Performance: < 100ms query time
- Memory Usage: < 80% of available memory
- CPU Usage: < 70% of available CPU
Monitoring Alerts
- Service Health: All services healthy
- Performance: Response times within SLA
- Security: No security incidents
- Resources: Resource usage within limits
- Backups: Daily backups successful
🎯 Production Deployment Complete!
🚀 AITBC is now running in production!
What's Next?
- Monitor System Performance: Keep an eye on all metrics
- User Onboarding: Start bringing users to the platform
- Plugin Marketplace: Launch plugin ecosystem
- Community Building: Grow the developer community
- Continuous Improvement: Monitor, optimize, and enhance
Support Channels
- Technical Support: support@aitbc.dev
- Documentation: docs.aitbc.dev
- Status Page: status.aitbc.dev
- Community: community.aitbc.dev
🎊 Congratulations! AITBC is now live in production!