214 lines
5.9 KiB
Bash
214 lines
5.9 KiB
Bash
#!/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" |