uploader-bot/docs/MY_NETWORK_README.md

12 KiB
Raw Blame History

MY Network v2.0 - Distributed Content Protocol

🌐 Обзор

MY Network - это распределенная система для управления и синхронизации контента между нодами. Протокол обеспечивает:

  • P2P сеть для обмена данными между нодами
  • Автоматическую синхронизацию контента
  • Load balancing на основе метрик нагрузки
  • Веб-интерфейс мониторинга в хакерском стиле
  • Совместимость с существующей инфраструктурой

🚀 Быстрый запуск

Минимальный запуск для тестирования:

# 1. Установить зависимости
pip install -r requirements_new.txt

# 2. Запустить минимальный сервер
python start_my_network.py

Откройте http://localhost:8000/api/my/monitor/ для мониторинга.

Запуск с существующей системой:

# 1. Использовать совместимые файлы
cp docker-compose.compatible.yml docker-compose.yml
cp .env.compatible .env

# 2. Запустить через Docker
docker-compose up -d

# 3. MY Network автоматически интегрируется

🏗️ Продакшен развертывание

Автоматическое развертывание:

# Сохранить переменные окружения
export DOMAIN="your-domain.com"
export EMAIL="admin@your-domain.com"

# Запустить скрипт развертывания (требует root)
sudo bash deploy_my_network.sh

Скрипт автоматически установит:

  • Nginx с SSL (Let's Encrypt)
  • Docker и Docker Compose
  • Firewall и безопасность
  • Systemd сервисы
  • Мониторинг и health checks

Ручное развертывание:

# 1. Создать production .env
cp .env.example .env.production
# Отредактировать настройки

# 2. Запустить продакшен контейнеры
docker-compose -f docker-compose.prod.yml up -d

# 3. Настроить nginx
sudo cp nginx.conf /etc/nginx/sites-available/my-network
sudo ln -s /etc/nginx/sites-available/my-network /etc/nginx/sites-enabled/
sudo systemctl restart nginx

📊 Мониторинг и управление

Веб-интерфейс:

API эндпоинты:

Информация о ноде:

# Статус ноды
curl http://localhost:8000/api/my/node/info

# Подключенные пиры
curl http://localhost:8000/api/my/node/peers

# Статус синхронизации
curl http://localhost:8000/api/my/sync/status

Управление пирами:

# Подключиться к пиру
curl -X POST http://localhost:8000/api/my/node/peers/connect \
  -H "Content-Type: application/json" \
  -d '{"address": "http://peer-node:8001"}'

# Отключиться от пира
curl -X DELETE http://localhost:8000/api/my/node/peers/PEER_ID

Синхронизация:

# Запустить синхронизацию
curl -X POST http://localhost:8000/api/my/sync/start

# Реплицировать контент
curl -X POST http://localhost:8000/api/my/content/HASH/replicate \
  -H "Content-Type: application/json" \
  -d '{"target_nodes": ["node1", "node2"]}'

Системные команды:

# Управление сервисом
sudo systemctl start my-network
sudo systemctl stop my-network
sudo systemctl restart my-network
sudo systemctl status my-network

# Просмотр логов
sudo journalctl -u my-network -f
tail -f /var/log/my-network/app.log

# Проверка здоровья
/opt/my-network/health_check.sh

# Docker команды
docker-compose logs -f my-network-app
docker-compose ps

🔧 Конфигурация

Основные настройки (.env):

# MY Network Configuration
MY_NETWORK_ENABLED=True
MY_NETWORK_NODE_ID=unique-node-id
MY_NETWORK_P2P_PORT=8001
MY_NETWORK_API_PORT=8000

# Bootstrap ноды (JSON массив)
MY_NETWORK_BOOTSTRAP_NODES=["http://bootstrap1:8001", "http://bootstrap2:8001"]

# Настройки синхронизации
SYNC_MAX_CONCURRENT=5
SYNC_TIMEOUT=300
SYNC_RETRY_ATTEMPTS=3

# Настройки пиров
PEER_HEALTH_CHECK_INTERVAL=60
PEER_CONNECTION_TIMEOUT=30
MAX_PEER_CONNECTIONS=50

Bootstrap конфигурация (bootstrap.json):

{
  "version": "2.0",
  "network_id": "my-network-main",
  "bootstrap_nodes": [
    {
      "node_id": "bootstrap-1",
      "address": "https://bootstrap1.my-network.com:8001",
      "public_key": "...",
      "trusted": true
    }
  ],
  "consensus": {
    "algorithm": "raft",
    "election_timeout": 5000,
    "heartbeat_interval": 1000
  }
}

🌍 Архитектура сети

Компоненты:

  1. Node Service - основной сервис ноды
  2. Peer Manager - управление подключениями
  3. Sync Manager - синхронизация контента
  4. Bootstrap Manager - управление bootstrap конфигурацией

Протокол взаимодействия:

Нода A                    Нода B
   |                         |
   |--- Handshake ---------> |
   |<-- Auth Response ------- |
   |                         |
   |--- Content List ------> |
   |<-- Missing Content ---- |
   |                         |
   |--- File Transfer -----> |
   |<-- Confirmation ------- |

Состояния контента:

  • Local - только на текущей ноде
  • Syncing - в процессе синхронизации
  • Replicated - скопирован на другие ноды
  • Verified - проверена целостность

🔒 Безопасность

Встроенные механизмы:

  • TLS шифрование для всех соединений
  • Проверка хешей для целостности файлов
  • Аутентификация пиров через public key
  • Rate limiting для предотвращения DDoS
  • Firewall правила для ограничения доступа

Рекомендации:

# Настроить firewall
sudo ufw allow 8000:8010/tcp
sudo ufw allow 8000:8010/udp

# Включить fail2ban
sudo systemctl enable fail2ban

# Регулярные бэкапы
0 2 * * * /opt/my-network/backup.sh

📈 Мониторинг и алерты

Метрики:

  • Количество подключенных пиров
  • Статус синхронизации
  • Использование ресурсов
  • Время отклика
  • Ошибки сети

Health checks:

# HTTP health check
curl -f http://localhost:8000/health

# MY Network specific
curl -f http://localhost:8000/api/my/health

# Detailed status
curl http://localhost:8000/api/my/network/stats

Prometheus интеграция:

# prometheus.yml
scrape_configs:
  - job_name: 'my-network'
    static_configs:
      - targets: ['localhost:9090']
    metrics_path: '/metrics'

🐛 Устранение неисправностей

Частые проблемы:

1. Нода не подключается к пирам:

# Проверить сетевые соединения
netstat -tulpn | grep 8001

# Проверить firewall
sudo ufw status

# Проверить логи
tail -f /var/log/my-network/app.log

2. Синхронизация не работает:

# Проверить статус синхронизации
curl http://localhost:8000/api/my/sync/status

# Перезапустить синхронизацию
curl -X POST http://localhost:8000/api/my/sync/start

# Проверить доступность целевых нод
curl http://target-node:8001/api/my/health

3. Высокое использование ресурсов:

# Проверить использование CPU/памяти
docker stats my-network-app

# Ограничить ресурсы
docker update --memory=2g --cpus=2 my-network-app

# Настроить параметры синхронизации
echo "SYNC_MAX_CONCURRENT=2" >> .env

Диагностические команды:

# Проверить все компоненты
curl http://localhost:8000/api/my/health | jq

# Список активных соединений
curl http://localhost:8000/api/my/node/peers | jq

# Статистика сети
curl http://localhost:8000/api/my/network/stats | jq

# ASCII статус (для консоли)
curl http://localhost:8000/api/my/monitor/ascii

🔄 Обновление системы

Обновление без downtime:

# 1. Подготовить новую версию
git pull origin main

# 2. Собрать новый образ
docker-compose build my-network-app

# 3. Rolling update
docker-compose up -d --no-deps my-network-app

# 4. Проверить статус
curl http://localhost:8000/health

Миграция данных:

# Экспорт данных
docker exec my-network-db mysqldump -u root -p mymusic > backup.sql

# Миграция схемы (если нужно)
docker exec my-network-app python -m alembic upgrade head

# Импорт данных
docker exec -i my-network-db mysql -u root -p mymusic < backup.sql

📚 Дополнительная документация

  • MY_ARCHITECTURE.md - детальная архитектура системы
  • MY_PROTOCOL.md - спецификация протокола
  • MY_NODE_SPEC.md - технические характеристики нод
  • MY_MONITORING.md - руководство по мониторингу

🤝 Вклад в проект

Структура проекта:

my-uploader-bot/
├── app/
│   ├── core/
│   │   └── my_network/          # MY Network компоненты
│   │       ├── node_service.py
│   │       ├── peer_manager.py
│   │       ├── sync_manager.py
│   │       └── bootstrap_manager.py
│   ├── api/
│   │   └── routes/              # API маршруты
│   │       ├── my_network_routes.py
│   │       └── my_monitoring.py
│   └── templates/               # Web интерфейс
│       └── my_network_monitor.html
├── bootstrap.json               # Bootstrap конфигурация
├── start_my_network.py         # Быстрый запуск
└── deploy_my_network.sh        # Продакшен деплой

Development workflow:

# 1. Создать ветку для фичи
git checkout -b feature/my-feature

# 2. Разработка с hot reload
python start_my_network.py --debug

# 3. Тестирование
pytest tests/test_my_network.py

# 4. Создать pull request
git push origin feature/my-feature

📞 Поддержка

Если у вас возникли вопросы или проблемы:

  1. Проверьте Troubleshooting
  2. Посмотрите логи: tail -f /var/log/my-network/app.log
  3. Проверьте health check: curl http://localhost:8000/api/my/health
  4. Создайте issue с подробным описанием проблемы

MY Network v2.0 - Distributed Content Protocol Decentralized content distribution made simple