Files
aitbc/docker-compose.yml
oib 15427c96c0 chore: update file permissions to executable across repository
- 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
2026-03-06 22:17:54 +01:00

432 lines
12 KiB
YAML

version: '3.8'
services:
# Database Services
postgres:
image: postgres:15
environment:
POSTGRES_DB: aitbc
POSTGRES_USER: aitbc
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-aitbc123}
volumes:
- postgres_data:/var/lib/postgresql/data
- ./scripts/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U aitbc"]
interval: 30s
timeout: 10s
retries: 5
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 5
# Core Blockchain Services
blockchain-node:
build:
context: ./apps/blockchain-node
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- REDIS_URL=redis://redis:6379/0
ports:
- "8007:8007"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
volumes:
- ./data/blockchain:/app/data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8007/health"]
interval: 30s
timeout: 10s
retries: 5
consensus-node:
build:
context: ./apps/consensus-node
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- BLOCKCHAIN_URL=http://blockchain-node:8007
ports:
- "8002:8002"
depends_on:
- blockchain-node
volumes:
- ./data/consensus:/app/data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8002/health"]
interval: 30s
timeout: 10s
retries: 5
network-node:
build:
context: ./apps/network-node
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- CONSENSUS_URL=http://consensus-node:8002
ports:
- "8008:8008"
depends_on:
- consensus-node
volumes:
- ./data/network:/app/data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8008/health"]
interval: 30s
timeout: 10s
retries: 5
# Coordinator Services
coordinator-api:
build:
context: ./apps/coordinator-api
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- REDIS_URL=redis://redis:6379/0
- BLOCKCHAIN_URL=http://blockchain-node:8007
- CONSENSUS_URL=http://consensus-node:8002
- NETWORK_URL=http://network-node:8008
ports:
- "8001:8001"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
blockchain-node:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8001/health"]
interval: 30s
timeout: 10s
retries: 5
# Production Services
exchange-integration:
build:
context: ./apps/exchange-integration
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- REDIS_URL=redis://redis:6379/0
- COORDINATOR_URL=http://coordinator-api:8001
ports:
- "8010:8010"
depends_on:
- coordinator-api
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8010/health"]
interval: 30s
timeout: 10s
retries: 5
compliance-service:
build:
context: ./apps/compliance-service
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- REDIS_URL=redis://redis:6379/0
- COORDINATOR_URL=http://coordinator-api:8001
ports:
- "8011:8011"
depends_on:
- coordinator-api
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8011/health"]
interval: 30s
timeout: 10s
retries: 5
trading-engine:
build:
context: ./apps/trading-engine
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- REDIS_URL=redis://redis:6379/0
- EXCHANGE_URL=http://exchange-integration:8010
- COORDINATOR_URL=http://coordinator-api:8001
ports:
- "8012:8012"
depends_on:
- exchange-integration
- coordinator-api
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8012/health"]
interval: 30s
timeout: 10s
retries: 5
# Plugin Ecosystem
plugin-registry:
build:
context: ./apps/plugin-registry
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- REDIS_URL=redis://redis:6379/0
- COORDINATOR_URL=http://coordinator-api:8001
ports:
- "8013:8013"
depends_on:
- coordinator-api
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8013/health"]
interval: 30s
timeout: 10s
retries: 5
plugin-marketplace:
build:
context: ./apps/plugin-marketplace
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- REDIS_URL=redis://redis:6379/0
- PLUGIN_REGISTRY_URL=http://plugin-registry:8013
- COORDINATOR_URL=http://coordinator-api:8001
ports:
- "8014:8014"
depends_on:
- plugin-registry
- coordinator-api
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8014/health"]
interval: 30s
timeout: 10s
retries: 5
plugin-security:
build:
context: ./apps/plugin-security
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- REDIS_URL=redis://redis:6379/0
- PLUGIN_REGISTRY_URL=http://plugin-registry:8013
- COORDINATOR_URL=http://coordinator-api:8001
ports:
- "8015:8015"
depends_on:
- plugin-registry
- coordinator-api
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8015/health"]
interval: 30s
timeout: 10s
retries: 5
plugin-analytics:
build:
context: ./apps/plugin-analytics
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- REDIS_URL=redis://redis:6379/0
- PLUGIN_REGISTRY_URL=http://plugin-registry:8013
- PLUGIN_MARKETPLACE_URL=http://plugin-marketplace:8014
- COORDINATOR_URL=http://coordinator-api:8001
ports:
- "8016:8016"
depends_on:
- plugin-registry
- plugin-marketplace
- coordinator-api
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8016/health"]
interval: 30s
timeout: 10s
retries: 5
# Global Infrastructure
global-infrastructure:
build:
context: ./apps/global-infrastructure
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- REDIS_URL=redis://redis:6379/0
- COORDINATOR_URL=http://coordinator-api:8001
ports:
- "8017:8017"
depends_on:
- coordinator-api
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8017/health"]
interval: 30s
timeout: 10s
retries: 5
global-ai-agents:
build:
context: ./apps/global-ai-agents
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- REDIS_URL=redis://redis:6379/0
- COORDINATOR_URL=http://coordinator-api:8001
- GLOBAL_INFRASTRUCTURE_URL=http://global-infrastructure:8017
ports:
- "8018:8018"
depends_on:
- coordinator-api
- global-infrastructure
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8018/health"]
interval: 30s
timeout: 10s
retries: 5
multi-region-load-balancer:
build:
context: ./apps/multi-region-load-balancer
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- REDIS_URL=redis://redis:6379/0
- GLOBAL_INFRASTRUCTURE_URL=http://global-infrastructure:8017
- COORDINATOR_URL=http://coordinator-api:8001
ports:
- "8019:8019"
depends_on:
- global-infrastructure
- coordinator-api
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8019/health"]
interval: 30s
timeout: 10s
retries: 5
# Explorer
explorer:
build:
context: ./apps/explorer
dockerfile: Dockerfile
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://aitbc:${POSTGRES_PASSWORD:-aitbc123}@postgres:5432/aitbc
- BLOCKCHAIN_URL=http://blockchain-node:8007
- NETWORK_URL=http://network-node:8008
- COORDINATOR_URL=http://coordinator-api:8001
ports:
- "8020:8020"
depends_on:
- blockchain-node
- network-node
- coordinator-api
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8020/health"]
interval: 30s
timeout: 10s
retries: 5
# CLI Container
aitbc-cli:
build:
context: .
dockerfile: Dockerfile
target: production
environment:
- NODE_ENV=production
- COORDINATOR_URL=http://coordinator-api:8001
- BLOCKCHAIN_URL=http://blockchain-node:8007
- EXCHANGE_URL=http://exchange-integration:8010
- COMPLIANCE_URL=http://compliance-service:8011
depends_on:
- coordinator-api
- blockchain-node
- exchange-integration
- compliance-service
volumes:
- ./data/cli:/home/aitbc/.aitbc
entrypoint: ["tail", "-f", "/dev/null"]
# Monitoring
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.retention.time=200h'
- '--web.enable-lifecycle'
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin}
volumes:
- grafana_data:/var/lib/grafana
- ./monitoring/grafana/dashboards:/etc/grafana/provisioning/dashboards
- ./monitoring/grafana/datasources:/etc/grafana/provisioning/datasources
# Reverse Proxy
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/ssl:/etc/nginx/ssl
depends_on:
- coordinator-api
- exchange-integration
- plugin-marketplace
- explorer
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 5
volumes:
postgres_data:
redis_data:
prometheus_data:
grafana_data:
networks:
default:
driver: bridge