422 lines
12 KiB
Markdown
422 lines
12 KiB
Markdown
# MY Network v2.0 - Distributed Content Protocol
|
||
|
||
## 🌐 Обзор
|
||
|
||
MY Network - это распределенная система для управления и синхронизации контента между нодами. Протокол обеспечивает:
|
||
|
||
- **P2P сеть** для обмена данными между нодами
|
||
- **Автоматическую синхронизацию** контента
|
||
- **Load balancing** на основе метрик нагрузки
|
||
- **Веб-интерфейс мониторинга** в хакерском стиле
|
||
- **Совместимость** с существующей инфраструктурой
|
||
|
||
## 🚀 Быстрый запуск
|
||
|
||
### Минимальный запуск для тестирования:
|
||
|
||
```bash
|
||
# 1. Установить зависимости
|
||
pip install -r requirements_new.txt
|
||
|
||
# 2. Запустить минимальный сервер
|
||
python start_my_network.py
|
||
```
|
||
|
||
Откройте http://localhost:8000/api/my/monitor/ для мониторинга.
|
||
|
||
### Запуск с существующей системой:
|
||
|
||
```bash
|
||
# 1. Использовать совместимые файлы
|
||
cp docker-compose.compatible.yml docker-compose.yml
|
||
cp .env.compatible .env
|
||
|
||
# 2. Запустить через Docker
|
||
docker-compose up -d
|
||
|
||
# 3. MY Network автоматически интегрируется
|
||
```
|
||
|
||
## 🏗️ Продакшен развертывание
|
||
|
||
### Автоматическое развертывание:
|
||
|
||
```bash
|
||
# Сохранить переменные окружения
|
||
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
|
||
|
||
### Ручное развертывание:
|
||
|
||
```bash
|
||
# 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
|
||
```
|
||
|
||
## 📊 Мониторинг и управление
|
||
|
||
### Веб-интерфейс:
|
||
- **Основной мониторинг**: http://your-domain/api/my/monitor/
|
||
- **ASCII статус**: http://your-domain/api/my/monitor/ascii
|
||
- **API документация**: http://your-domain/api/docs
|
||
|
||
### API эндпоинты:
|
||
|
||
#### Информация о ноде:
|
||
```bash
|
||
# Статус ноды
|
||
curl http://localhost:8000/api/my/node/info
|
||
|
||
# Подключенные пиры
|
||
curl http://localhost:8000/api/my/node/peers
|
||
|
||
# Статус синхронизации
|
||
curl http://localhost:8000/api/my/sync/status
|
||
```
|
||
|
||
#### Управление пирами:
|
||
```bash
|
||
# Подключиться к пиру
|
||
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
|
||
```
|
||
|
||
#### Синхронизация:
|
||
```bash
|
||
# Запустить синхронизацию
|
||
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"]}'
|
||
```
|
||
|
||
### Системные команды:
|
||
|
||
```bash
|
||
# Управление сервисом
|
||
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):
|
||
|
||
```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):
|
||
|
||
```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 правила** для ограничения доступа
|
||
|
||
### Рекомендации:
|
||
|
||
```bash
|
||
# Настроить 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:
|
||
|
||
```bash
|
||
# 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 интеграция:
|
||
|
||
```yaml
|
||
# prometheus.yml
|
||
scrape_configs:
|
||
- job_name: 'my-network'
|
||
static_configs:
|
||
- targets: ['localhost:9090']
|
||
metrics_path: '/metrics'
|
||
```
|
||
|
||
## 🐛 Устранение неисправностей
|
||
|
||
### Частые проблемы:
|
||
|
||
#### 1. Нода не подключается к пирам:
|
||
```bash
|
||
# Проверить сетевые соединения
|
||
netstat -tulpn | grep 8001
|
||
|
||
# Проверить firewall
|
||
sudo ufw status
|
||
|
||
# Проверить логи
|
||
tail -f /var/log/my-network/app.log
|
||
```
|
||
|
||
#### 2. Синхронизация не работает:
|
||
```bash
|
||
# Проверить статус синхронизации
|
||
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. Высокое использование ресурсов:
|
||
```bash
|
||
# Проверить использование CPU/памяти
|
||
docker stats my-network-app
|
||
|
||
# Ограничить ресурсы
|
||
docker update --memory=2g --cpus=2 my-network-app
|
||
|
||
# Настроить параметры синхронизации
|
||
echo "SYNC_MAX_CONCURRENT=2" >> .env
|
||
```
|
||
|
||
### Диагностические команды:
|
||
|
||
```bash
|
||
# Проверить все компоненты
|
||
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:
|
||
|
||
```bash
|
||
# 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
|
||
```
|
||
|
||
### Миграция данных:
|
||
|
||
```bash
|
||
# Экспорт данных
|
||
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:
|
||
|
||
```bash
|
||
# 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* |