466 lines
12 KiB
YAML
466 lines
12 KiB
YAML
# 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
|
||
|