uploader-bot/install_service.sh

214 lines
5.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 - Установка сервиса (Шаг 1 из 2)
# Устанавливает базовый сервис без защиты
# Для защиты используйте: bash secure_service.sh
set -e
echo "🚀 MY Network - Установка сервиса"
echo "================================="
# Проверка прав root
if [[ $EUID -ne 0 ]]; then
echo "❌ Этот скрипт должен запускаться от root"
echo "Используйте: sudo bash install_service.sh"
exit 1
fi
# Получение домена
read -p "🌐 Введите домен (например: my-network.example.com): " DOMAIN
if [[ -z "$DOMAIN" ]]; then
echo "❌ Домен обязателен!"
exit 1
fi
# Получение email для SSL
read -p "📧 Введите email для SSL сертификата: " EMAIL
if [[ -z "$EMAIL" ]]; then
echo "❌ Email обязателен для SSL!"
exit 1
fi
echo "📋 Настройки:"
echo " Домен: $DOMAIN"
echo " Email: $EMAIL"
echo " Порт: 15100"
echo ""
# Обновление системы
echo "🔄 Обновление системы..."
apt update && apt upgrade -y
# Установка основных пакетов
echo "📦 Установка пакетов..."
apt install -y \
docker.io \
docker-compose \
git \
curl \
wget \
unzip \
python3 \
python3-pip \
python3-venv \
htop \
tree \
nano \
ufw
# Запуск Docker
systemctl enable docker
systemctl start docker
# Добавление пользователя в группу docker
usermod -aG docker $USER
# Создание директории проекта
PROJECT_DIR="/opt/my-network"
mkdir -p $PROJECT_DIR
cd $PROJECT_DIR
# Клонирование или копирование проекта
if [[ -d "my-uploader-bot" ]]; then
echo "📁 Проект уже существует, обновляем..."
cd my-uploader-bot
git pull 2>/dev/null || echo "Git pull failed, продолжаем..."
cd ..
else
echo "📥 Копирование проекта..."
# Если запускается из директории проекта, копируем
if [[ -f "../pyproject.toml" ]]; then
cp -r ../ ./my-uploader-bot/
else
echo "❌ Не найден файл проекта. Убедитесь что скрипт запускается из директории проекта."
exit 1
fi
fi
cd my-uploader-bot
# Создание .env файла
echo "📝 Создание конфигурации..."
cat > .env << EOF
# MY Network Configuration
NODE_ID=node-$(date +%s)
NODE_PORT=15100
DOMAIN=$DOMAIN
EMAIL=$EMAIL
# Database
DB_HOST=localhost
DB_PORT=3306
DB_NAME=my_network
DB_USER=my_network_user
DB_PASSWORD=$(openssl rand -base64 32)
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=$(openssl rand -base64 32)
# Security
SECRET_KEY=$(openssl rand -base64 64)
JWT_SECRET=$(openssl rand -base64 32)
# Paths
STORAGE_PATH=/opt/storage
LOG_PATH=/opt/logs
# Network
BOOTSTRAP_NODES=[]
SYNC_INTERVAL=300
MAX_PEERS=10
EOF
# Создание директорий
echo "📁 Создание директорий..."
mkdir -p /opt/storage /opt/logs
chmod 755 /opt/storage /opt/logs
# Установка Python зависимостей
echo "🐍 Установка Python зависимостей..."
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements_new.txt
# Создание systemd сервиса
echo "⚙️ Создание systemd сервиса..."
cat > /etc/systemd/system/my-network.service << EOF
[Unit]
Description=MY Network Service
After=network.target docker.service
Requires=docker.service
[Service]
Type=forking
User=root
WorkingDirectory=$PROJECT_DIR/my-uploader-bot
Environment=PATH=$PROJECT_DIR/my-uploader-bot/venv/bin
ExecStart=/bin/bash -c 'source venv/bin/activate && python app/main.py'
ExecStop=/bin/kill -TERM \$MAINPID
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
# Запуск Docker Compose
echo "🐳 Запуск Docker сервисов..."
docker-compose -f docker-compose.new.yml up -d
# Активация сервиса
echo "🔧 Активация сервиса..."
systemctl daemon-reload
systemctl enable my-network
systemctl start my-network
# Проверка статуса
sleep 5
echo "📊 Проверка статуса..."
systemctl status my-network --no-pager
# Проверка портов
echo "🌐 Проверка портов..."
netstat -tlnp | grep :15100 || echo "⚠️ Порт 15100 не слушается"
# Сохранение конфигурации
echo "💾 Сохранение конфигурации..."
cat > /opt/my-network-config.txt << EOF
MY Network Service - Конфигурация
===============================
Домен: $DOMAIN
Email: $EMAIL
Порт: 15100
Директория: $PROJECT_DIR
Логи: /opt/logs
Хранилище: /opt/storage
Статус сервиса: systemctl status my-network
Логи сервиса: journalctl -u my-network -f
Перезапуск: systemctl restart my-network
Для защиты сервера запустите:
sudo bash secure_service.sh
EOF
echo ""
echo "✅ MY Network сервис установлен!"
echo "================================"
echo "📍 Конфигурация сохранена в: /opt/my-network-config.txt"
echo "🌐 Домен: $DOMAIN"
echo "🔌 Порт: 15100"
echo "📁 Директория: $PROJECT_DIR"
echo ""
echo "🔍 Проверка работы:"
echo " curl http://localhost:15100/api/my/health"
echo " systemctl status my-network"
echo ""
echo "⚠️ ВАЖНО: Для защиты сервера выполните:"
echo " sudo bash secure_service.sh"
echo ""
echo "📚 Документация: /opt/my-network/my-uploader-bot/MY_NETWORK_README.md"