#!/bin/bash # MY Network Direct Setup - для работы с файлами в /home/service # Упрощенная версия без лишних проверок set -e echo "🚀 MY Network Direct Setup" echo "=========================" echo "Работаем с файлами в /home/service" echo "Домен: my-public-node-3.projscale.dev" echo "" # Проверка что мы root if [[ $EUID -ne 0 ]]; then echo "❌ Запустите от root: sudo bash setup_server_direct.sh" exit 1 fi DOMAIN="my-public-node-3.projscale.dev" EMAIL="admin@projscale.dev" # Переход в директорию проекта cd /home/service echo "📁 Содержимое /home/service:" ls -la # Обновление системы быстро echo "🔄 Быстрое обновление системы..." apt update # Установка только необходимого echo "📦 Установка базовых пакетов..." apt install -y \ python3 \ python3-pip \ python3-venv \ nginx \ ufw \ curl \ wget # Переход в my-uploader-bot если есть if [[ -d "my-uploader-bot" ]]; then cd my-uploader-bot echo "✅ Найдена директория my-uploader-bot" else echo "❌ Директория my-uploader-bot не найдена!" echo "Содержимое /home/service:" ls -la /home/service/ exit 1 fi # Создание Python venv echo "🐍 Создание Python окружения..." python3 -m venv venv source venv/bin/activate # Установка базовых пакетов Python echo "📦 Установка Python пакетов..." pip install --upgrade pip pip install fastapi uvicorn sanic requests python-dotenv # Создание минимального приложения MY Network echo "🏗️ Создание минимального MY Network приложения..." mkdir -p app/api # Простое FastAPI приложение cat > app/main.py << 'EOF' #!/usr/bin/env python3 """MY Network Bootstrap Node - Minimal Version""" import os import json from datetime import datetime from fastapi import FastAPI from fastapi.responses import JSONResponse, HTMLResponse from fastapi.middleware.cors import CORSMiddleware import uvicorn app = FastAPI( title="MY Network Bootstrap Node", description="MY Network v2.0 Bootstrap Node - Minimal", version="2.0.0" ) # CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) NODE_ID = f"bootstrap-{int(datetime.now().timestamp())}" DOMAIN = "my-public-node-3.projscale.dev" @app.get("/") async def root(): return {"message": "MY Network Bootstrap Node v2.0", "status": "active"} @app.get("/api/my/health") async def health_check(): return JSONResponse({ "status": "healthy", "node_id": NODE_ID, "node_type": "bootstrap", "domain": DOMAIN, "timestamp": datetime.utcnow().isoformat(), "services": ["api", "monitor"], "version": "2.0.0" }) @app.get("/api/my/node/info") async def node_info(): return JSONResponse({ "node_id": NODE_ID, "node_type": "bootstrap", "domain": DOMAIN, "port": 443, "ssl": True, "public": True, "region": "eu-central", "capacity": "high", "services": ["api", "monitor"], "protocol_version": "2.0", "last_seen": datetime.utcnow().isoformat() }) @app.get("/api/my/bootstrap/config") async def bootstrap_config(): config = { "version": "2.0", "network_id": "my-network-main", "bootstrap_nodes": [ { "id": NODE_ID, "host": DOMAIN, "port": 443, "ssl": True, "public": True, "region": "eu-central", "capacity": "high", "services": ["api", "monitor"], "last_seen": datetime.utcnow().isoformat() } ], "network_config": { "protocol_version": "2.0", "max_peers": 100, "sync_interval": 300 }, "api_endpoints": { "base_url": f"https://{DOMAIN}", "health": "/api/my/health", "node_info": "/api/my/node/info", "bootstrap": "/api/my/bootstrap/config" } } return JSONResponse(config) @app.get("/api/my/monitor/") async def monitor_dashboard(): html = f""" MY Network Bootstrap Monitor

🚀 MY Network Bootstrap Node Monitor

Node Status: ACTIVE

Node ID: {NODE_ID}

Domain: {DOMAIN}

Type: Bootstrap Primary

Version: 2.0.0

Services: API, Monitor

Last Update: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}

Network Configuration

Protocol Version: 2.0

Max Peers: 100

Public Access: Enabled

SSL: Required

""" return HTMLResponse(content=html) if __name__ == "__main__": print(f"🚀 Starting MY Network Bootstrap Node") print(f"Domain: {DOMAIN}") print(f"Node ID: {NODE_ID}") uvicorn.run(app, host="0.0.0.0", port=15100) EOF # Создание systemd сервиса echo "⚙️ Создание systemd сервиса..." cat > /etc/systemd/system/my-network.service << EOF [Unit] Description=MY Network Bootstrap Node After=network.target [Service] Type=simple User=service Group=service WorkingDirectory=/home/service/my-uploader-bot Environment=PATH=/home/service/my-uploader-bot/venv/bin ExecStart=/home/service/my-uploader-bot/venv/bin/python app/main.py Restart=always RestartSec=5 [Install] WantedBy=multi-user.target EOF # Права доступа chown -R service:service /home/service/ # Настройка nginx echo "🌐 Настройка nginx..." cat > /etc/nginx/sites-available/my-network << EOF server { listen 80; server_name $DOMAIN; return 301 https://\$server_name\$request_uri; } server { listen 443 ssl http2; server_name $DOMAIN; # Временный самоподписанный сертификат ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; # Security headers add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-MY-Network-Version "2.0"; server_tokens off; # Main application location / { proxy_pass http://127.0.0.1:15100; proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto \$scheme; # CORS add_header Access-Control-Allow-Origin "*"; add_header Access-Control-Allow-Methods "GET, POST, OPTIONS"; add_header Access-Control-Allow-Headers "Content-Type, Authorization"; } } EOF # Активация сайта ln -sf /etc/nginx/sites-available/my-network /etc/nginx/sites-enabled/ rm -f /etc/nginx/sites-enabled/default # Проверка nginx nginx -t # Простой firewall echo "🔥 Настройка firewall..." ufw --force reset ufw default deny incoming ufw default allow outgoing # SSH ufw allow 22/tcp comment 'SSH' # HTTP/HTTPS ufw allow 80/tcp comment 'HTTP' ufw allow 443/tcp comment 'HTTPS' ufw --force enable # Запуск сервисов echo "🚀 Запуск сервисов..." systemctl daemon-reload systemctl enable my-network systemctl start my-network systemctl enable nginx systemctl start nginx # Проверка sleep 5 echo "" echo "✅ MY Network Bootstrap Node запущен!" echo "==================================" echo "🌐 Домен: https://$DOMAIN" echo "🔌 Локальный порт: 15100" echo "" echo "🔍 Проверка:" echo "systemctl status my-network" echo "curl http://localhost:15100/api/my/health" echo "" echo "🎯 Bootstrap узел готов к работе!"