# 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