@echo off :: start.bat - Скрипт для запуска Telegram Tinder Bot на Windows :: Позволяет выбрать между локальной БД в контейнере или внешней БД echo ================================================ echo Запуск Telegram Tinder Bot echo ================================================ :: Проверка наличия Docker и Docker Compose WHERE docker >nul 2>&1 IF %ERRORLEVEL% NEQ 0 ( echo [31mОШИБКА: Docker не установлен![0m echo Установите Docker Desktop для Windows: https://docs.docker.com/desktop/install/windows-install/ exit /b 1 ) :: Проверяем наличие .env файла IF NOT EXIST .env ( echo [33mФайл .env не найден. Создаем из шаблона...[0m IF EXIST .env.example ( copy .env.example .env echo [32mФайл .env создан из шаблона. Пожалуйста, отредактируйте его с вашими настройками.[0m ) ELSE ( echo [31mОШИБКА: Файл .env.example не найден. Создайте файл .env вручную.[0m exit /b 1 ) ) :: Спрашиваем про запуск базы данных set /p use_container_db="Запустить базу данных PostgreSQL в контейнере? (y/n): " :: Функции для работы с docker-compose IF /I "%use_container_db%" NEQ "y" ( :: Запрашиваем параметры подключения к внешней БД echo [36mВведите параметры подключения к внешней базе данных:[0m set /p db_host="Хост (например, localhost): " set /p db_port="Порт (например, 5432): " set /p db_name="Имя базы данных: " set /p db_user="Имя пользователя: " set /p db_password="Пароль: " :: Модифицируем docker-compose.yml echo [33mМодифицируем docker-compose.yml для работы с внешней базой данных...[0m :: Сохраняем оригинальную версию файла copy docker-compose.yml docker-compose.yml.bak :: Создаем временный файл с модифицированным содержимым ( echo version: '3.8' echo. echo services: echo bot: echo build: . echo container_name: telegram-tinder-bot echo restart: unless-stopped echo env_file: .env echo environment: echo - NODE_ENV=production echo - DB_HOST=%db_host% echo - DB_PORT=%db_port% echo - DB_NAME=%db_name% echo - DB_USERNAME=%db_user% echo - DB_PASSWORD=%db_password% echo volumes: echo - ./uploads:/app/uploads echo - ./logs:/app/logs echo networks: echo - bot-network echo healthcheck: echo test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/health"] echo interval: 30s echo timeout: 5s echo retries: 3 echo start_period: 10s echo. echo adminer: echo image: adminer:latest echo container_name: adminer-tinder echo restart: unless-stopped echo ports: echo - "8080:8080" echo networks: echo - bot-network echo. echo volumes: echo postgres_data: echo. echo networks: echo bot-network: echo driver: bridge ) > docker-compose.temp.yml :: Заменяем оригинальный файл move /y docker-compose.temp.yml docker-compose.yml echo [32mdocker-compose.yml обновлен для работы с внешней базой данных[0m :: Обновляем .env файл echo [33mОбновляем файл .env с параметрами внешней базы данных...[0m :: Создаем временный файл type NUL > .env.temp :: Читаем .env построчно и заменяем нужные строки for /f "tokens=*" %%a in (.env) do ( set line=%%a set line=!line:DB_HOST=*! if "!line:~0,1!" == "*" ( echo DB_HOST=%db_host%>> .env.temp ) else ( set line=!line:DB_PORT=*! if "!line:~0,1!" == "*" ( echo DB_PORT=%db_port%>> .env.temp ) else ( set line=!line:DB_NAME=*! if "!line:~0,1!" == "*" ( echo DB_NAME=%db_name%>> .env.temp ) else ( set line=!line:DB_USERNAME=*! if "!line:~0,1!" == "*" ( echo DB_USERNAME=%db_user%>> .env.temp ) else ( set line=!line:DB_PASSWORD=*! if "!line:~0,1!" == "*" ( echo DB_PASSWORD=%db_password%>> .env.temp ) else ( echo %%a>> .env.temp ) ) ) ) ) ) :: Заменяем оригинальный файл move /y .env.temp .env echo [32mФайл .env обновлен с параметрами внешней базы данных[0m :: Запускаем только контейнер с ботом echo [36mЗапускаем Telegram Bot без контейнера базы данных...[0m docker-compose up -d bot adminer echo [32mБот запущен и использует внешнюю базу данных: %db_host%:%db_port%/%db_name%[0m echo [33mAdminer доступен по адресу: http://localhost:8080/[0m echo [33mДанные для входа в Adminer:[0m echo [33mСистема: PostgreSQL[0m echo [33mСервер: %db_host%[0m echo [33mПользователь: %db_user%[0m echo [33mПароль: (введенный вами)[0m echo [33mБаза данных: %db_name%[0m ) ELSE ( :: Восстанавливаем оригинальный docker-compose.yml если есть бэкап if exist docker-compose.yml.bak ( move /y docker-compose.yml.bak docker-compose.yml echo [32mdocker-compose.yml восстановлен из резервной копии[0m ) echo [36mЗапускаем Telegram Bot с контейнером базы данных...[0m :: Проверка, запущены ли контейнеры docker ps -q -f name=telegram-tinder-bot > tmp_containers.txt set /p containers= .env.temp :: Читаем .env построчно и заменяем строку с паролем for /f "tokens=*" %%a in (.env) do ( set line=%%a set line=!line:DB_PASSWORD=*! if "!line:~0,1!" == "*" ( echo DB_PASSWORD=%random_password%>> .env.temp ) else ( echo %%a>> .env.temp ) ) :: Заменяем оригинальный файл move /y .env.temp .env echo [33mСгенерирован случайный пароль для базы данных и сохранен в .env[0m ) echo [32mTelegram Bot запущен с локальной базой данных[0m echo [33mAdminer доступен по адресу: http://localhost:8080/[0m echo [33mДанные для входа в Adminer:[0m echo [33mСистема: PostgreSQL[0m echo [33mСервер: db[0m echo [33mПользователь: postgres[0m echo [33mПароль: (из переменной DB_PASSWORD в .env)[0m echo [33mБаза данных: telegram_tinder_bot[0m ) :: Проверка статуса контейнеров echo [36mПроверка статуса контейнеров:[0m docker-compose ps echo ================================================ echo [32mПроцесс запуска Telegram Tinder Bot завершен![0m echo ================================================ echo [33mДля просмотра логов используйте: docker-compose logs -f bot[0m echo [33mДля остановки: docker-compose down[0m pause