uploader-bot/scripts/setup_server_direct.sh

320 lines
8.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"""
<!DOCTYPE html>
<html>
<head>
<title>MY Network Bootstrap Monitor</title>
<meta charset="utf-8">
<style>
body {{ font-family: 'Courier New', monospace; background: #000; color: #0f0; padding: 20px; }}
h1 {{ color: #ff0; text-align: center; }}
.box {{ border: 1px solid #0f0; padding: 15px; margin: 10px 0; }}
.status {{ color: #0f0; }}
.info {{ color: #00f; }}
</style>
</head>
<body>
<h1>🚀 MY Network Bootstrap Node Monitor</h1>
<div class="box">
<h3 class="status">Node Status: ACTIVE</h3>
<p class="info">Node ID: {NODE_ID}</p>
<p class="info">Domain: {DOMAIN}</p>
<p class="info">Type: Bootstrap Primary</p>
<p class="info">Version: 2.0.0</p>
<p class="info">Services: API, Monitor</p>
<p class="info">Last Update: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}</p>
</div>
<div class="box">
<h3 class="status">Network Configuration</h3>
<p class="info">Protocol Version: 2.0</p>
<p class="info">Max Peers: 100</p>
<p class="info">Public Access: Enabled</p>
<p class="info">SSL: Required</p>
</div>
<script>
setTimeout(() => location.reload(), 30000);
</script>
</body>
</html>
"""
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 узел готов к работе!"