#!/bin/bash # MY Network User Setup - без sudo, только для пользователя service # Запуск MY Network в пользовательском пространстве set -e echo "🚀 MY Network User Setup (без sudo)" echo "===================================" echo "Пользователь: $(whoami)" echo "Директория: $(pwd)" echo "" # Переход в my-uploader-bot if [[ -d "my-uploader-bot" ]]; then cd my-uploader-bot echo "✅ Директория my-uploader-bot найдена" else echo "❌ Директория my-uploader-bot не найдена!" echo "Содержимое текущей директории:" ls -la exit 1 fi # Создание Python venv echo "🐍 Создание Python окружения..." python3 -m venv venv source venv/bin/activate # Обновление pip echo "📦 Обновление pip..." pip install --upgrade pip # Установка базовых пакетов echo "📦 Установка Python пакетов..." pip install fastapi uvicorn sanic requests python-dotenv # Создание директорий mkdir -p app/api mkdir -p logs # Создание упрощенного MY Network приложения echo "🏗️ Создание MY Network приложения..." cat > app/main.py << 'EOF' #!/usr/bin/env python3 """MY Network Bootstrap Node - User Space Version""" import os import json import asyncio from datetime import datetime from fastapi import FastAPI from fastapi.responses import JSONResponse, HTMLResponse from fastapi.middleware.cors import CORSMiddleware import uvicorn import logging # Настройка логирования logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('logs/my-network.log'), logging.StreamHandler() ] ) logger = logging.getLogger("MY-Network") app = FastAPI( title="MY Network Bootstrap Node", description="MY Network v2.0 Bootstrap Node - User Space", version="2.0.0" ) # CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) NODE_ID = f"bootstrap-user-{int(datetime.now().timestamp())}" DOMAIN = "my-public-node-3.projscale.dev" PORT = 15100 @app.on_event("startup") async def startup(): logger.info(f"🚀 MY Network Bootstrap Node запущен") logger.info(f"Node ID: {NODE_ID}") logger.info(f"Domain: {DOMAIN}") logger.info(f"Port: {PORT}") @app.get("/") async def root(): return {"message": "MY Network Bootstrap Node v2.0 - User Space", "status": "active"} @app.get("/api/my/health") async def health_check(): return JSONResponse({ "status": "healthy", "node_id": NODE_ID, "node_type": "bootstrap", "domain": DOMAIN, "port": PORT, "mode": "user-space", "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": PORT, "ssl": False, "public": True, "region": "eu-central", "capacity": "medium", "mode": "user-space", "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": PORT, "ssl": False, "public": True, "region": "eu-central", "capacity": "medium", "mode": "user-space", "services": ["api", "monitor"], "last_seen": datetime.utcnow().isoformat() } ], "network_config": { "protocol_version": "2.0", "max_peers": 50, "sync_interval": 300 }, "api_endpoints": { "base_url": f"http://{DOMAIN}:{PORT}", "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"""
Node ID: {NODE_ID}
Domain: {DOMAIN}
Port: {PORT}
Type: Bootstrap Primary
Version: 2.0.0
Mode: User Space
Services: API, Monitor
Last Update: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
Protocol Version: 2.0
Max Peers: 50
Public Access: Enabled
SSL: Disabled (User Space Mode)
Сервис запущен в пользовательском режиме
Для полной функциональности требуются root права
Доступ: http://{DOMAIN}:{PORT}