Files
aitbc/scripts/production-setup.sh
aitbc 8cf185e2f0 feat: upgrade to production-grade systemd services
 Production SystemD Services Upgrade
- Upgraded existing services instead of creating new ones
- Added production-grade configuration with resource limits
- Implemented real database persistence and logging
- Added production monitoring and health checks

 Upgraded Services
- aitbc-blockchain-node.service: Production blockchain with persistence
- aitbc-marketplace.service: Production marketplace with real data
- aitbc-gpu.service: Production GPU marketplace
- aitbc-production-monitor.service: Production monitoring

 Production Features
- Real database persistence (JSON files in /opt/aitbc/production/data/)
- Production logging to /opt/aitbc/production/logs/
- Resource limits (memory, CPU, file handles)
- Security hardening (NoNewPrivileges, ProtectSystem)
- Automatic restart and recovery
- Multi-node deployment (aitbc + aitbc1)

 Service Endpoints
- aitbc (localhost): Marketplace (8002), GPU Marketplace (8003)
- aitbc1 (remote): Marketplace (8004), GPU Marketplace (8005)

 Monitoring
- SystemD journal integration
- Production logs and metrics
- Health check endpoints
- Resource utilization monitoring

🚀 AITBC now running production-grade systemd services!
Real persistence, monitoring, and multi-node deployment operational.
2026-04-02 13:00:59 +02:00

261 lines
7.2 KiB
Bash
Executable File

#!/bin/bash
# ============================================================================
# AITBC Production-Grade Setup
# ============================================================================
set -e
# Colors for output
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
AITBC_ROOT="${AITBC_ROOT:-/opt/aitbc}"
VENV_DIR="$AITBC_ROOT/venv"
PYTHON_CMD="$VENV_DIR/bin/python"
echo -e "${BLUE}🚀 AITBC PRODUCTION-GRADE SETUP${NC}"
echo "=========================="
echo "Upgrading from demonstration to production system"
echo "Nodes: aitbc (localhost) and aitbc1 (remote)"
echo ""
# Step 1: Production Environment Setup
echo -e "${CYAN}🔧 Step 1: Production Environment${NC}"
echo "================================="
cd "$AITBC_ROOT"
# Create production directories
mkdir -p /opt/aitbc/production/{logs,data,config,backups,monitoring}
mkdir -p /opt/aitbc/production/logs/{services,blockchain,marketplace,errors}
mkdir -p /opt/aitbc/production/data/{blockchain,marketplace,agents,gpu}
# Set proper permissions
chmod 755 /opt/aitbc/production
chmod 700 /opt/aitbc/production/data
echo "✅ Production directories created"
# Step 2: Production Database Setup
echo -e "${CYAN}💾 Step 2: Production Database${NC}"
echo "============================"
# Install production dependencies
"$PYTHON_CMD" -m pip install --upgrade pip
"$PYTHON_CMD" -m pip install sqlalchemy psycopg2-binary redis celery
# Create production database configuration
cat > /opt/aitbc/production/config/database.py << 'EOF'
import os
import ssl
# Production Database Configuration
DATABASE_CONFIG = {
'production': {
'url': os.getenv('DATABASE_URL', 'postgresql://aitbc:password@localhost:5432/aitbc_prod'),
'pool_size': 20,
'max_overflow': 30,
'pool_timeout': 30,
'pool_recycle': 3600,
'ssl_context': ssl.create_default_context()
},
'redis': {
'host': os.getenv('REDIS_HOST', 'localhost'),
'port': int(os.getenv('REDIS_PORT', 6379)),
'db': int(os.getenv('REDIS_DB', 0)),
'password': os.getenv('REDIS_PASSWORD', None),
'ssl': os.getenv('REDIS_SSL', 'false').lower() == 'true'
}
}
EOF
echo "✅ Production database configuration created"
# Step 3: Production Blockchain Setup
echo -e "${CYAN}⛓️ Step 3: Production Blockchain${NC}"
echo "=============================="
# Create production blockchain configuration
cat > /opt/aitbc/production/config/blockchain.py << 'EOF'
import os
from pathlib import Path
# Production Blockchain Configuration
BLOCKCHAIN_CONFIG = {
'network': {
'name': 'aitbc-mainnet',
'chain_id': 1337,
'consensus': 'proof_of_authority',
'block_time': 5, # seconds
'gas_limit': 8000000,
'difficulty': 'auto'
},
'nodes': {
'aitbc': {
'host': 'localhost',
'port': 8545,
'rpc_port': 8545,
'p2p_port': 30303,
'data_dir': '/opt/aitbc/production/data/blockchain/aitbc'
},
'aitbc1': {
'host': 'aitbc1',
'port': 8545,
'rpc_port': 8545,
'p2p_port': 30303,
'data_dir': '/opt/aitbc/production/data/blockchain/aitbc1'
}
},
'security': {
'enable_tls': True,
'cert_path': '/opt/aitbc/production/config/certs',
'require_auth': True,
'api_key': os.getenv('BLOCKCHAIN_API_KEY', 'production-key-change-me')
}
}
EOF
echo "✅ Production blockchain configuration created"
# Step 4: Production Services Configuration
echo -e "${CYAN}🔧 Step 4: Production Services${NC}"
echo "=============================="
# Create production service configurations
cat > /opt/aitbc/production/config/services.py << 'EOF'
import os
# Production Services Configuration
SERVICES_CONFIG = {
'blockchain': {
'host': '0.0.0.0',
'port': 8545,
'workers': 4,
'log_level': 'INFO',
'max_connections': 1000
},
'marketplace': {
'host': '0.0.0.0',
'port': 8002,
'workers': 8,
'log_level': 'INFO',
'max_connections': 5000
},
'gpu_marketplace': {
'host': '0.0.0.0',
'port': 8003,
'workers': 4,
'log_level': 'INFO',
'max_connections': 1000
},
'monitoring': {
'host': '0.0.0.0',
'port': 9000,
'workers': 2,
'log_level': 'INFO'
}
}
# Production Logging
LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'production': {
'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S'
}
},
'handlers': {
'file': {
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/opt/aitbc/production/logs/services/aitbc.log',
'maxBytes': 10485760, # 10MB
'backupCount': 5,
'formatter': 'production'
},
'console': {
'class': 'logging.StreamHandler',
'formatter': 'production'
}
},
'root': {
'level': 'INFO',
'handlers': ['file', 'console']
}
}
EOF
echo "✅ Production services configuration created"
# Step 5: Production Security Setup
echo -e "${CYAN}🔒 Step 5: Production Security${NC}"
echo "=========================="
# Create SSL certificates directory
mkdir -p /opt/aitbc/production/config/certs
# Generate self-signed certificates for production
cd /opt/aitbc/production/config/certs
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes \
-subj "/C=US/ST=State/L=City/O=AITBC/OU=Production/CN=aitbc.local" 2>/dev/null || echo "OpenSSL not available, using existing certs"
# Create production environment file
cat > /opt/aitbc/production/.env << 'EOF'
# Production Environment Variables
NODE_ENV=production
DEBUG=false
LOG_LEVEL=INFO
# Database
DATABASE_URL=postgresql://aitbc:secure_password@localhost:5432/aitbc_prod
REDIS_URL=redis://localhost:6379/0
# Security
SECRET_KEY=production-secret-key-change-me-in-production
BLOCKCHAIN_API_KEY=production-api-key-change-me
JWT_SECRET=production-jwt-secret-change-me
# Blockchain
NETWORK_ID=1337
CHAIN_ID=1337
CONSENSUS=proof_of_authority
# Services
BLOCKCHAIN_RPC_PORT=8545
MARKETPLACE_PORT=8002
GPU_MARKETPLACE_PORT=8003
MONITORING_PORT=9000
# Monitoring
PROMETHEUS_PORT=9090
GRAFANA_PORT=3000
EOF
chmod 600 /opt/aitbc/production/.env
echo "✅ Production security setup completed"
echo ""
echo -e "${GREEN}🎉 PRODUCTION SETUP COMPLETED!${NC}"
echo "=================================="
echo ""
echo "✅ Production directories: /opt/aitbc/production/"
echo "✅ Database configuration: PostgreSQL + Redis"
echo "✅ Blockchain configuration: Multi-node PoA"
echo "✅ Services configuration: Production-grade"
echo "✅ Security setup: SSL + Environment variables"
echo ""
echo -e "${YELLOW}⚠️ IMPORTANT NOTES:${NC}"
echo "1. Change all default passwords and keys"
echo "2. Set up real PostgreSQL and Redis instances"
echo "3. Configure proper SSL certificates"
echo "4. Set up monitoring and alerting"
echo "5. Configure backup and disaster recovery"
echo ""
echo -e "${BLUE}🚀 Ready for production deployment!${NC}"