# Phantom TLD System - Децентрализованная система доменов первого уровня # Поддерживает миллиарды доменов с высокой производительностью FROM ubuntu:22.04 LABEL maintainer="Phantom Protocol Team 2025" LABEL description="Phantom TLD System - Decentralized Top-Level Domain System" LABEL version="1.0.0" # Установка зависимостей RUN apt-get update && apt-get install -y \ build-essential \ gcc \ g++ \ make \ cmake \ pkg-config \ libssl-dev \ libxml2-dev \ libprotobuf-dev \ protobuf-compiler \ libsqlite3-dev \ libevent-dev \ libcurl4-openssl-dev \ libjson-c-dev \ libmicrohttpd-dev \ python3 \ python3-pip \ curl \ wget \ htop \ iotop \ net-tools \ tcpdump \ dnsutils \ && rm -rf /var/lib/apt/lists/* # Установка Python зависимостей для мониторинга RUN pip3 install \ psutil \ requests \ flask \ prometheus_client \ pyyaml # Создание пользователя phantom RUN useradd -r -s /bin/false -d /opt/phantom phantom # Создание директорий RUN mkdir -p /opt/phantom/bin \ /opt/phantom/config \ /opt/phantom/data \ /opt/phantom/logs \ /opt/phantom/scripts \ /opt/phantom/monitoring \ /var/lib/phantom/domains \ /var/lib/phantom/consensus \ /var/lib/phantom/cache # Копирование исходного кода COPY src/ /opt/phantom/src/ COPY protos/ /opt/phantom/protos/ COPY docker/tld-system/ /opt/phantom/scripts/ # Сборка проекта WORKDIR /opt/phantom/src RUN make clean && make tld-system # Копирование бинарных файлов RUN cp phantom-tld-system /opt/phantom/bin/ && \ cp phantom-dns-resolver /opt/phantom/bin/ && \ cp phantom-consensus /opt/phantom/bin/ && \ cp phantom-domain-registry /opt/phantom/bin/ # Создание конфигурационных файлов RUN cat > /opt/phantom/config/tld-system.conf << 'EOF' # Phantom TLD System Configuration [general] node_id = auto data_directory = /var/lib/phantom log_level = info log_file = /opt/phantom/logs/tld-system.log [network] bind_address = 0.0.0.0 port = 8053 max_connections = 10000 worker_threads = 16 [dns] dns_port = 53 cache_size = 1000000 max_ttl = 86400 upstream_servers = 8.8.8.8,1.1.1.1 [consensus] consensus_port = 8054 min_validators = 3 block_time = 30 epoch_length = 100 [domains] max_domains_per_shard = 10000000 shard_count = 256 cache_size = 100000 index_size = 1000000 [monitoring] metrics_port = 8055 health_check_port = 8056 prometheus_enabled = true [security] enable_rate_limiting = true max_queries_per_second = 10000 max_queries_per_ip = 100 blacklist_file = /opt/phantom/config/blacklist.txt EOF # Создание скрипта запуска RUN cat > /opt/phantom/scripts/start-tld-system.sh << 'EOF' #!/bin/bash set -e echo "Запуск Phantom TLD System..." # Проверка конфигурации if [ ! -f /opt/phantom/config/tld-system.conf ]; then echo "Ошибка: файл конфигурации не найден" exit 1 fi # Создание директорий данных mkdir -p /var/lib/phantom/domains/shards mkdir -p /var/lib/phantom/consensus mkdir -p /var/lib/phantom/cache mkdir -p /opt/phantom/logs # Установка прав доступа chown -R phantom:phantom /var/lib/phantom chown -R phantom:phantom /opt/phantom/logs # Генерация ключей валидатора если не существуют if [ ! -f /var/lib/phantom/consensus/validator.key ]; then echo "Генерация ключей валидатора..." /opt/phantom/bin/phantom-consensus --generate-keys \ --output /var/lib/phantom/consensus/validator.key chown phantom:phantom /var/lib/phantom/consensus/validator.key chmod 600 /var/lib/phantom/consensus/validator.key fi # Инициализация базы данных доменов if [ ! -f /var/lib/phantom/domains/registry.db ]; then echo "Инициализация реестра доменов..." /opt/phantom/bin/phantom-domain-registry --init \ --data-dir /var/lib/phantom/domains \ --config /opt/phantom/config/tld-system.conf fi # Запуск компонентов в фоновом режиме echo "Запуск реестра доменов..." su phantom -s /bin/bash -c "/opt/phantom/bin/phantom-domain-registry \ --config /opt/phantom/config/tld-system.conf \ --daemon" & sleep 2 echo "Запуск системы консенсуса..." su phantom -s /bin/bash -c "/opt/phantom/bin/phantom-consensus \ --config /opt/phantom/config/tld-system.conf \ --validator-key /var/lib/phantom/consensus/validator.key \ --daemon" & sleep 2 echo "Запуск DNS resolver..." su phantom -s /bin/bash -c "/opt/phantom/bin/phantom-dns-resolver \ --config /opt/phantom/config/tld-system.conf \ --daemon" & sleep 2 echo "Запуск основной TLD системы..." exec su phantom -s /bin/bash -c "/opt/phantom/bin/phantom-tld-system \ --config /opt/phantom/config/tld-system.conf" EOF # Создание скрипта мониторинга RUN cat > /opt/phantom/scripts/monitor.py << 'EOF' #!/usr/bin/env python3 """ Phantom TLD System Monitor Мониторинг производительности и состояния TLD системы """ import time import json import psutil import requests from flask import Flask, jsonify, render_template_string app = Flask(__name__) class TLDSystemMonitor: def __init__(self): self.start_time = time.time() def get_system_stats(self): """Получение системной статистики""" return { 'cpu_percent': psutil.cpu_percent(interval=1), 'memory_percent': psutil.virtual_memory().percent, 'disk_usage': psutil.disk_usage('/').percent, 'network_io': psutil.net_io_counters()._asdict(), 'uptime': time.time() - self.start_time } def get_tld_stats(self): """Получение статистики TLD системы""" try: response = requests.get('http://localhost:8055/metrics', timeout=5) if response.status_code == 200: return response.json() except: pass return {} def get_dns_stats(self): """Получение статистики DNS resolver""" try: response = requests.get('http://localhost:8055/dns/stats', timeout=5) if response.status_code == 200: return response.json() except: pass return {} def get_consensus_stats(self): """Получение статистики консенсуса""" try: response = requests.get('http://localhost:8055/consensus/stats', timeout=5) if response.status_code == 200: return response.json() except: pass return {} monitor = TLDSystemMonitor() @app.route('/') def dashboard(): """Главная страница мониторинга""" template = '''
Мониторинг децентрализованной системы доменов первого уровня