#!/bin/bash # ============================================================================= # MY UPLOADER BOT - PRODUCTION SERVER SETUP SCRIPT # ============================================================================= # Полная автоматическая установка на чистом Ubuntu/Debian сервере # # Использование: # ./setup_production_server.sh yourdomain.com your@email.com # # Автор: MY Network Team # ============================================================================= set -e # Выход при любой ошибке # Цвета для вывода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' NC='\033[0m' # No Color # Логирование log() { echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}" } warn() { echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] WARNING: $1${NC}" } error() { echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: $1${NC}" exit 1 } info() { echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}" } header() { echo -e "${PURPLE}" echo "==============================================" echo " $1" echo "==============================================" echo -e "${NC}" } # Проверка аргументов if [ $# -lt 2 ]; then error "Usage: $0 " echo "Example: $0 mydomain.com admin@mydomain.com" exit 1 fi DOMAIN="$1" EMAIL="$2" PROJECT_DIR="/opt/my-uploader-bot" NGINX_CONFIG="/etc/nginx/sites-available/my-uploader-bot" SERVICE_USER="myuploader" header "🚀 УСТАНОВКА MY UPLOADER BOT НА СЕРВЕР $DOMAIN" log "Домен: $DOMAIN" log "Email: $EMAIL" log "Проект будет установлен в: $PROJECT_DIR" # Проверка root прав if [[ $EUID -ne 0 ]]; then error "Этот скрипт должен запускаться с правами root (sudo)" fi # Проверка операционной системы if ! command -v apt-get &> /dev/null; then error "Этот скрипт поддерживает только Ubuntu/Debian системы" fi header "📦 ШАГ 1: ОБНОВЛЕНИЕ СИСТЕМЫ" log "Обновление списка пакетов..." apt-get update -y log "Обновление установленных пакетов..." apt-get upgrade -y log "Установка базовых пакетов..." apt-get install -y \ curl \ wget \ git \ unzip \ software-properties-common \ apt-transport-https \ ca-certificates \ gnupg \ lsb-release \ htop \ nano \ vim \ net-tools \ ufw header "🐳 ШАГ 2: УСТАНОВКА DOCKER" # Удаление старых версий Docker log "Удаление старых версий Docker..." apt-get remove -y docker docker-engine docker.io containerd runc || true # Добавление репозитория Docker log "Добавление Docker репозитория..." curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null # Установка Docker log "Установка Docker..." apt-get update apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # Установка Docker Compose standalone log "Установка Docker Compose..." curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose # Запуск и включение Docker systemctl enable docker systemctl start docker log "Docker версия: $(docker --version)" log "Docker Compose версия: $(docker-compose --version)" header "🔥 ШАГ 3: НАСТРОЙКА FIREWALL" log "Настройка UFW firewall..." # Сброс правил UFW 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" # Включение firewall ufw --force enable log "Статус firewall:" ufw status verbose header "🔒 ШАГ 4: УСТАНОВКА CERTBOT" log "Установка snapd..." apt-get install -y snapd log "Установка Certbot через snap..." snap install core snap refresh core snap install --classic certbot # Создание symlink ln -sf /snap/bin/certbot /usr/bin/certbot log "Certbot версия: $(certbot --version)" header "👤 ШАГ 5: СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ СЕРВИСА" log "Создание пользователя $SERVICE_USER..." if ! id "$SERVICE_USER" &>/dev/null; then useradd -r -s /bin/bash -d /home/$SERVICE_USER -m $SERVICE_USER usermod -aG docker $SERVICE_USER log "Пользователь $SERVICE_USER создан" else log "Пользователь $SERVICE_USER уже существует" fi header "📂 ШАГ 6: ПОДГОТОВКА ПРОЕКТА" log "Создание директории проекта..." mkdir -p $PROJECT_DIR cd $PROJECT_DIR # Если это git репозиторий, клонируем. Иначе копируем текущую директорию if [ -d "$(dirname $0)/.git" ]; then log "Клонирование из Git репозитория..." # Определяем URL репозитория REPO_URL=$(cd "$(dirname $0)" && git config --get remote.origin.url || echo "") if [ -n "$REPO_URL" ]; then git clone "$REPO_URL" . else warn "Git репозиторий не найден, копирую файлы локально..." cp -r "$(dirname $0)"/* . fi else log "Копирование файлов проекта..." cp -r "$(dirname $0)"/* . fi # Установка владельца chown -R $SERVICE_USER:$SERVICE_USER $PROJECT_DIR header "⚙️ ШАГ 7: НАСТРОЙКА NGINX" log "Установка Nginx..." apt-get install -y nginx # Остановка Nginx для получения сертификатов systemctl stop nginx log "Создание конфигурации Nginx..." ./scripts/create_nginx_config.sh $DOMAIN $PROJECT_DIR header "🔐 ШАГ 8: ПОЛУЧЕНИЕ SSL СЕРТИФИКАТОВ" log "Получение Let's Encrypt сертификатов для $DOMAIN..." # Остановка процессов на портах 80/443 fuser -k 80/tcp 2>/dev/null || true fuser -k 443/tcp 2>/dev/null || true # Получение сертификатов certbot certonly \ --standalone \ --non-interactive \ --agree-tos \ --email "$EMAIL" \ --domains "$DOMAIN,www.$DOMAIN" \ --no-eff-email log "Настройка автообновления сертификатов..." systemctl enable certbot.timer systemctl start certbot.timer # Проверка автообновления certbot renew --dry-run header "🔧 ШАГ 9: КОНФИГУРАЦИЯ ПРОЕКТА" log "Создание production конфигурации..." ./scripts/setup_production_env.sh $DOMAIN $EMAIL header "📦 ШАГ 10: КОПИРОВАНИЕ ДОПОЛНИТЕЛЬНЫХ МОДУЛЕЙ" log "Настройка дополнительных модулей..." ./scripts/setup_modules.sh $PROJECT_DIR header "🐳 ШАГ 11: ЗАПУСК DOCKER СЕРВИСОВ" log "Запуск Docker Compose в production режиме..." cd $PROJECT_DIR # Запуск от имени пользователя сервиса sudo -u $SERVICE_USER docker-compose -f docker-compose.production.yml pull sudo -u $SERVICE_USER docker-compose -f docker-compose.production.yml build --no-cache sudo -u $SERVICE_USER docker-compose -f docker-compose.production.yml up -d log "Ожидание запуска сервисов..." sleep 30 # Проверка статуса log "Статус Docker сервисов:" sudo -u $SERVICE_USER docker-compose -f docker-compose.production.yml ps header "🌐 ШАГ 12: ЗАПУСК NGINX" log "Включение конфигурации Nginx..." ln -sf $NGINX_CONFIG /etc/nginx/sites-enabled/my-uploader-bot rm -f /etc/nginx/sites-enabled/default log "Проверка конфигурации Nginx..." nginx -t log "Запуск Nginx..." systemctl enable nginx systemctl start nginx header "🔄 ШАГ 13: НАСТРОЙКА АВТОЗАПУСКА" log "Создание systemd сервисов..." ./scripts/create_systemd_services.sh $PROJECT_DIR $SERVICE_USER header "✅ ШАГ 14: ФИНАЛЬНАЯ ПРОВЕРКА" log "Проверка всех сервисов..." # Проверка Docker if sudo -u $SERVICE_USER docker-compose -f $PROJECT_DIR/docker-compose.production.yml ps | grep -q "Up"; then log "✅ Docker сервисы: Работают" else error "❌ Docker сервисы: Не запущены" fi # Проверка Nginx if systemctl is-active --quiet nginx; then log "✅ Nginx: Работает" else error "❌ Nginx: Не запущен" fi # Проверка SSL if curl -sf "https://$DOMAIN/health" > /dev/null; then log "✅ SSL сертификат: Работает" else warn "⚠️ SSL проверка не прошла (сервис может еще запускаться)" fi # Проверка API log "Ожидание полного запуска API..." sleep 60 if curl -sf "https://$DOMAIN/api/my/health" > /dev/null; then log "✅ MY Network API: Работает" else warn "⚠️ MY Network API пока не доступен" fi header "🎉 УСТАНОВКА ЗАВЕРШЕНА!" info "=== ИНФОРМАЦИЯ О РАЗВЕРТЫВАНИИ ===" info "Домен: https://$DOMAIN" info "API: https://$DOMAIN/api/" info "Мониторинг: https://$DOMAIN/api/my/monitor/" info "Health Check: https://$DOMAIN/health" info "Директория проекта: $PROJECT_DIR" info "Пользователь: $SERVICE_USER" info "Nginx конфиг: $NGINX_CONFIG" info "=== ПОЛЕЗНЫЕ КОМАНДЫ ===" info "Просмотр логов: cd $PROJECT_DIR && sudo -u $SERVICE_USER docker-compose -f docker-compose.production.yml logs -f" info "Перезапуск: cd $PROJECT_DIR && sudo -u $SERVICE_USER docker-compose -f docker-compose.production.yml restart" info "Обновление: cd $PROJECT_DIR && git pull && sudo -u $SERVICE_USER docker-compose -f docker-compose.production.yml build --no-cache && sudo -u $SERVICE_USER docker-compose -f docker-compose.production.yml up -d" info "=== БЕЗОПАСНОСТЬ ===" info "Firewall: ufw status" info "SSL сертификаты: ls -la /etc/letsencrypt/live/$DOMAIN/" info "Автообновление SSL: systemctl status certbot.timer" log "🚀 Проект успешно развернут на https://$DOMAIN" log "📝 Не забудьте настроить Telegram токены в $PROJECT_DIR/.env.production" exit 0