Files
Phantom/release/docker-compose.tld-infrastructure.yml

466 lines
12 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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