# Phantom TLD Infrastructure - Полная децентрализованная система доменов # Поддерживает миллиарды доменов с высокой доступностью и производительностью version: '3.8' services: # Основные TLD узлы tld-node-1: build: context: . dockerfile: docker/Dockerfile.tld-system container_name: phantom-tld-node-1 hostname: tld-node-1 restart: unless-stopped ports: - "53:53/udp" # DNS - "53:53/tcp" # DNS TCP - "8053:8053" # TLD System API - "8054:8054" # Consensus - "8055:8055" # Metrics - "8056:8056" # Health Check volumes: - tld-node-1-data:/var/lib/phantom - tld-node-1-logs:/opt/phantom/logs - ./config/tld-node-1.conf:/opt/phantom/config/tld-system.conf:ro environment: - PHANTOM_NODE_ID=tld-node-1 - PHANTOM_NODE_TYPE=primary - PHANTOM_CONSENSUS_ROLE=validator - PHANTOM_DNS_ENABLED=true - PHANTOM_BOOTSTRAP_NODES=tld-node-2:8054,tld-node-3:8054 networks: phantom-tld: ipv4_address: 172.20.0.10 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8056/health"] interval: 30s timeout: 10s retries: 3 start_period: 60s deploy: resources: limits: cpus: '2.0' memory: 4G reservations: cpus: '1.0' memory: 2G tld-node-2: build: context: . dockerfile: docker/Dockerfile.tld-system container_name: phantom-tld-node-2 hostname: tld-node-2 restart: unless-stopped ports: - "8153:53/udp" # DNS (альтернативный порт) - "8153:53/tcp" # DNS TCP - "8063:8053" # TLD System API - "8064:8054" # Consensus - "8065:8055" # Metrics - "8066:8056" # Health Check volumes: - tld-node-2-data:/var/lib/phantom - tld-node-2-logs:/opt/phantom/logs - ./config/tld-node-2.conf:/opt/phantom/config/tld-system.conf:ro environment: - PHANTOM_NODE_ID=tld-node-2 - PHANTOM_NODE_TYPE=secondary - PHANTOM_CONSENSUS_ROLE=validator - PHANTOM_DNS_ENABLED=true - PHANTOM_BOOTSTRAP_NODES=tld-node-1:8054,tld-node-3:8054 networks: phantom-tld: ipv4_address: 172.20.0.11 depends_on: - tld-node-1 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8056/health"] interval: 30s timeout: 10s retries: 3 start_period: 60s deploy: resources: limits: cpus: '2.0' memory: 4G reservations: cpus: '1.0' memory: 2G tld-node-3: build: context: . dockerfile: docker/Dockerfile.tld-system container_name: phantom-tld-node-3 hostname: tld-node-3 restart: unless-stopped ports: - "8253:53/udp" # DNS (альтернативный порт) - "8253:53/tcp" # DNS TCP - "8073:8053" # TLD System API - "8074:8054" # Consensus - "8075:8055" # Metrics - "8076:8056" # Health Check volumes: - tld-node-3-data:/var/lib/phantom - tld-node-3-logs:/opt/phantom/logs - ./config/tld-node-3.conf:/opt/phantom/config/tld-system.conf:ro environment: - PHANTOM_NODE_ID=tld-node-3 - PHANTOM_NODE_TYPE=secondary - PHANTOM_CONSENSUS_ROLE=validator - PHANTOM_DNS_ENABLED=true - PHANTOM_BOOTSTRAP_NODES=tld-node-1:8054,tld-node-2:8054 networks: phantom-tld: ipv4_address: 172.20.0.12 depends_on: - tld-node-1 - tld-node-2 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8056/health"] interval: 30s timeout: 10s retries: 3 start_period: 60s deploy: resources: limits: cpus: '2.0' memory: 4G reservations: cpus: '1.0' memory: 2G # Дополнительные DNS узлы для масштабирования dns-resolver-1: build: context: . dockerfile: docker/Dockerfile.tld-system container_name: phantom-dns-resolver-1 hostname: dns-resolver-1 restart: unless-stopped ports: - "8353:53/udp" # DNS - "8353:53/tcp" # DNS TCP - "8083:8055" # Metrics - "8086:8056" # Health Check volumes: - dns-resolver-1-logs:/opt/phantom/logs - ./config/dns-resolver-1.conf:/opt/phantom/config/tld-system.conf:ro environment: - PHANTOM_NODE_ID=dns-resolver-1 - PHANTOM_NODE_TYPE=dns-only - PHANTOM_CONSENSUS_ROLE=observer - PHANTOM_DNS_ENABLED=true - PHANTOM_TLD_NODES=tld-node-1:8053,tld-node-2:8063,tld-node-3:8073 networks: phantom-tld: ipv4_address: 172.20.0.20 depends_on: - tld-node-1 - tld-node-2 - tld-node-3 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8056/health"] interval: 30s timeout: 10s retries: 3 start_period: 30s deploy: resources: limits: cpus: '1.0' memory: 2G reservations: cpus: '0.5' memory: 1G dns-resolver-2: build: context: . dockerfile: docker/Dockerfile.tld-system container_name: phantom-dns-resolver-2 hostname: dns-resolver-2 restart: unless-stopped ports: - "8453:53/udp" # DNS - "8453:53/tcp" # DNS TCP - "8093:8055" # Metrics - "8096:8056" # Health Check volumes: - dns-resolver-2-logs:/opt/phantom/logs - ./config/dns-resolver-2.conf:/opt/phantom/config/tld-system.conf:ro environment: - PHANTOM_NODE_ID=dns-resolver-2 - PHANTOM_NODE_TYPE=dns-only - PHANTOM_CONSENSUS_ROLE=observer - PHANTOM_DNS_ENABLED=true - PHANTOM_TLD_NODES=tld-node-1:8053,tld-node-2:8063,tld-node-3:8073 networks: phantom-tld: ipv4_address: 172.20.0.21 depends_on: - tld-node-1 - tld-node-2 - tld-node-3 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8056/health"] interval: 30s timeout: 10s retries: 3 start_period: 30s deploy: resources: limits: cpus: '1.0' memory: 2G reservations: cpus: '0.5' memory: 1G # Балансировщик нагрузки DNS dns-load-balancer: image: nginx:alpine container_name: phantom-dns-lb restart: unless-stopped ports: - "5353:53/udp" # Основной DNS порт для клиентов volumes: - ./config/nginx-dns.conf:/etc/nginx/nginx.conf:ro networks: phantom-tld: ipv4_address: 172.20.0.30 depends_on: - tld-node-1 - tld-node-2 - tld-node-3 - dns-resolver-1 - dns-resolver-2 deploy: resources: limits: cpus: '0.5' memory: 512M reservations: cpus: '0.2' memory: 256M # Система мониторинга prometheus: image: prom/prometheus:latest container_name: phantom-prometheus restart: unless-stopped ports: - "9090:9090" volumes: - ./config/prometheus.yml:/etc/prometheus/prometheus.yml:ro - 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=30d' - '--web.enable-lifecycle' networks: phantom-tld: ipv4_address: 172.20.0.40 depends_on: - tld-node-1 - tld-node-2 - tld-node-3 deploy: resources: limits: cpus: '1.0' memory: 2G reservations: cpus: '0.5' memory: 1G grafana: image: grafana/grafana:latest container_name: phantom-grafana restart: unless-stopped ports: - "3000:3000" volumes: - grafana-data:/var/lib/grafana - ./config/grafana/dashboards:/etc/grafana/provisioning/dashboards:ro - ./config/grafana/datasources:/etc/grafana/provisioning/datasources:ro environment: - GF_SECURITY_ADMIN_PASSWORD=phantom123 - GF_USERS_ALLOW_SIGN_UP=false - GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource networks: phantom-tld: ipv4_address: 172.20.0.41 depends_on: - prometheus deploy: resources: limits: cpus: '0.5' memory: 1G reservations: cpus: '0.2' memory: 512M # Центральный мониторинг TLD системы tld-monitor: build: context: . dockerfile: docker/Dockerfile.tld-system container_name: phantom-tld-monitor restart: unless-stopped ports: - "8080:8080" # Веб-интерфейс мониторинга volumes: - ./config/monitor.conf:/opt/phantom/config/monitor.conf:ro environment: - PHANTOM_MONITOR_MODE=true - PHANTOM_TLD_NODES=tld-node-1:8055,tld-node-2:8065,tld-node-3:8075 - PHANTOM_DNS_NODES=dns-resolver-1:8083,dns-resolver-2:8093 command: ["python3", "/opt/phantom/scripts/monitor.py"] networks: phantom-tld: ipv4_address: 172.20.0.50 depends_on: - tld-node-1 - tld-node-2 - tld-node-3 deploy: resources: limits: cpus: '0.5' memory: 1G reservations: cpus: '0.2' memory: 512M # Тестовый клиент для нагрузочного тестирования load-tester: build: context: . dockerfile: docker/Dockerfile.tld-system container_name: phantom-load-tester restart: "no" volumes: - ./test-results:/opt/phantom/test-results environment: - PHANTOM_TEST_MODE=true - PHANTOM_DNS_SERVERS=172.20.0.10:53,172.20.0.11:53,172.20.0.12:53 - PHANTOM_TLD_APIS=172.20.0.10:8053,172.20.0.11:8063,172.20.0.12:8073 command: ["sleep", "infinity"] # Запускается вручную для тестов networks: phantom-tld: ipv4_address: 172.20.0.60 depends_on: - tld-node-1 - tld-node-2 - tld-node-3 deploy: resources: limits: cpus: '1.0' memory: 1G reservations: cpus: '0.5' memory: 512M # Redis для кэширования и координации redis: image: redis:7-alpine container_name: phantom-redis restart: unless-stopped ports: - "6379:6379" volumes: - redis-data:/data - ./config/redis.conf:/usr/local/etc/redis/redis.conf:ro command: redis-server /usr/local/etc/redis/redis.conf networks: phantom-tld: ipv4_address: 172.20.0.70 deploy: resources: limits: cpus: '0.5' memory: 1G reservations: cpus: '0.2' memory: 512M # PostgreSQL для аналитики и отчетности postgres: image: postgres:15-alpine container_name: phantom-postgres restart: unless-stopped ports: - "5432:5432" volumes: - postgres-data:/var/lib/postgresql/data - ./config/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql:ro environment: - POSTGRES_DB=phantom_tld - POSTGRES_USER=phantom - POSTGRES_PASSWORD=phantom123 networks: phantom-tld: ipv4_address: 172.20.0.80 deploy: resources: limits: cpus: '1.0' memory: 2G reservations: cpus: '0.5' memory: 1G networks: phantom-tld: driver: bridge ipam: config: - subnet: 172.20.0.0/16 gateway: 172.20.0.1 volumes: # Данные TLD узлов tld-node-1-data: driver: local tld-node-2-data: driver: local tld-node-3-data: driver: local # Логи tld-node-1-logs: driver: local tld-node-2-logs: driver: local tld-node-3-logs: driver: local dns-resolver-1-logs: driver: local dns-resolver-2-logs: driver: local # Мониторинг prometheus-data: driver: local grafana-data: driver: local # Базы данных redis-data: driver: local postgres-data: driver: local