Files
Phantom/release/docker-compose.yml

285 lines
7.1 KiB
YAML

# Docker Compose для развертывания сети Phantom Protocol
# Создает сеть из нескольких узлов для тестирования анонимной маршрутизации
version: '3.8'
# Определение сетей
networks:
phantom-network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
gateway: 172.20.0.1
# Определение томов для постоянного хранения данных
volumes:
phantom-node1-data:
driver: local
phantom-node2-data:
driver: local
phantom-node3-data:
driver: local
phantom-node4-data:
driver: local
phantom-node5-data:
driver: local
# Определение сервисов
services:
# Bootstrap узел - первый узел в сети
phantom-bootstrap:
build:
context: .
dockerfile: Dockerfile
container_name: phantom-bootstrap
hostname: phantom-bootstrap
networks:
phantom-network:
ipv4_address: 172.20.0.10
ports:
- "8080:8080" # Основной порт
- "8081:8081" # Kademlia DHT
volumes:
- phantom-node1-data:/home/phantom/data
- ./logs:/home/phantom/logs
environment:
- PHANTOM_NODE_NAME=bootstrap
- PHANTOM_PORT=8080
- PHANTOM_KAD_PORT=8081
- PHANTOM_LOG_LEVEL=INFO
- PHANTOM_NXNODES=3
- PHANTOM_NYNODES=3
- PHANTOM_NKEYS=3
- PHANTOM_MAX_CONNECTIONS=50
- PHANTOM_SETUP_IPTABLES=false
devices:
- /dev/net/tun:/dev/net/tun
cap_add:
- NET_ADMIN
restart: unless-stopped
healthcheck:
test: ["/usr/local/bin/healthcheck.sh"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
# Узел 2 - подключается к bootstrap
phantom-node2:
build:
context: .
dockerfile: Dockerfile
container_name: phantom-node2
hostname: phantom-node2
networks:
phantom-network:
ipv4_address: 172.20.0.11
ports:
- "8082:8080"
- "8083:8081"
volumes:
- phantom-node2-data:/home/phantom/data
- ./logs:/home/phantom/logs
environment:
- PHANTOM_NODE_NAME=node2
- PHANTOM_PORT=8080
- PHANTOM_KAD_PORT=8081
- PHANTOM_LOG_LEVEL=INFO
- PHANTOM_BOOTSTRAP_NODES=172.20.0.10:8081
- PHANTOM_WAIT_FOR_PEERS=phantom-bootstrap
- PHANTOM_NXNODES=3
- PHANTOM_NYNODES=3
- PHANTOM_NKEYS=3
devices:
- /dev/net/tun:/dev/net/tun
cap_add:
- NET_ADMIN
depends_on:
- phantom-bootstrap
restart: unless-stopped
healthcheck:
test: ["/usr/local/bin/healthcheck.sh"]
interval: 30s
timeout: 10s
retries: 3
start_period: 90s
# Узел 3
phantom-node3:
build:
context: .
dockerfile: Dockerfile
container_name: phantom-node3
hostname: phantom-node3
networks:
phantom-network:
ipv4_address: 172.20.0.12
ports:
- "8084:8080"
- "8085:8081"
volumes:
- phantom-node3-data:/home/phantom/data
- ./logs:/home/phantom/logs
environment:
- PHANTOM_NODE_NAME=node3
- PHANTOM_PORT=8080
- PHANTOM_KAD_PORT=8081
- PHANTOM_LOG_LEVEL=INFO
- PHANTOM_BOOTSTRAP_NODES=172.20.0.10:8081,172.20.0.11:8081
- PHANTOM_WAIT_FOR_PEERS=phantom-bootstrap,phantom-node2
- PHANTOM_NXNODES=3
- PHANTOM_NYNODES=3
- PHANTOM_NKEYS=3
devices:
- /dev/net/tun:/dev/net/tun
cap_add:
- NET_ADMIN
depends_on:
- phantom-bootstrap
- phantom-node2
restart: unless-stopped
healthcheck:
test: ["/usr/local/bin/healthcheck.sh"]
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
# Узел 4
phantom-node4:
build:
context: .
dockerfile: Dockerfile
container_name: phantom-node4
hostname: phantom-node4
networks:
phantom-network:
ipv4_address: 172.20.0.13
ports:
- "8086:8080"
- "8087:8081"
volumes:
- phantom-node4-data:/home/phantom/data
- ./logs:/home/phantom/logs
environment:
- PHANTOM_NODE_NAME=node4
- PHANTOM_PORT=8080
- PHANTOM_KAD_PORT=8081
- PHANTOM_LOG_LEVEL=INFO
- PHANTOM_BOOTSTRAP_NODES=172.20.0.10:8081,172.20.0.11:8081,172.20.0.12:8081
- PHANTOM_WAIT_FOR_PEERS=phantom-bootstrap,phantom-node2,phantom-node3
- PHANTOM_NXNODES=3
- PHANTOM_NYNODES=3
- PHANTOM_NKEYS=3
devices:
- /dev/net/tun:/dev/net/tun
cap_add:
- NET_ADMIN
depends_on:
- phantom-bootstrap
- phantom-node2
- phantom-node3
restart: unless-stopped
healthcheck:
test: ["/usr/local/bin/healthcheck.sh"]
interval: 30s
timeout: 10s
retries: 3
start_period: 150s
# Узел 5
phantom-node5:
build:
context: .
dockerfile: Dockerfile
container_name: phantom-node5
hostname: phantom-node5
networks:
phantom-network:
ipv4_address: 172.20.0.14
ports:
- "8088:8080"
- "8089:8081"
volumes:
- phantom-node5-data:/home/phantom/data
- ./logs:/home/phantom/logs
environment:
- PHANTOM_NODE_NAME=node5
- PHANTOM_PORT=8080
- PHANTOM_KAD_PORT=8081
- PHANTOM_LOG_LEVEL=INFO
- PHANTOM_BOOTSTRAP_NODES=172.20.0.10:8081,172.20.0.11:8081,172.20.0.12:8081,172.20.0.13:8081
- PHANTOM_WAIT_FOR_PEERS=phantom-bootstrap,phantom-node2,phantom-node3,phantom-node4
- PHANTOM_NXNODES=3
- PHANTOM_NYNODES=3
- PHANTOM_NKEYS=3
devices:
- /dev/net/tun:/dev/net/tun
cap_add:
- NET_ADMIN
depends_on:
- phantom-bootstrap
- phantom-node2
- phantom-node3
- phantom-node4
restart: unless-stopped
healthcheck:
test: ["/usr/local/bin/healthcheck.sh"]
interval: 30s
timeout: 10s
retries: 3
start_period: 180s
# Мониторинг и управление
phantom-monitor:
image: nginx:alpine
container_name: phantom-monitor
hostname: phantom-monitor
networks:
phantom-network:
ipv4_address: 172.20.0.100
ports:
- "8090:80"
volumes:
- ./docker/monitor:/usr/share/nginx/html:ro
- ./logs:/var/log/phantom:ro
environment:
- NGINX_HOST=phantom-monitor
- NGINX_PORT=80
depends_on:
- phantom-bootstrap
- phantom-node2
- phantom-node3
- phantom-node4
- phantom-node5
restart: unless-stopped
# Утилита для тестирования сети
phantom-tester:
build:
context: .
dockerfile: Dockerfile
container_name: phantom-tester
hostname: phantom-tester
networks:
phantom-network:
ipv4_address: 172.20.0.200
volumes:
- ./docker/test-scripts:/home/phantom/test-scripts:ro
- ./logs:/home/phantom/logs
environment:
- PHANTOM_NODE_NAME=tester
- PHANTOM_TEST_MODE=true
- PHANTOM_BOOTSTRAP_NODES=172.20.0.10:8081
command: ["bash", "-c", "sleep infinity"]
depends_on:
- phantom-bootstrap
- phantom-node2
- phantom-node3
- phantom-node4
- phantom-node5
restart: unless-stopped