Files
tg_tinder_bot/start.bat
2025-09-18 14:19:49 +09:00

242 lines
9.8 KiB
Batchfile
Raw Permalink 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.

@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=<tmp_containers.txt
del tmp_containers.txt
if not "%containers%" == "" (
set /p restart_containers="Контейнеры уже запущены. Перезапустить? (y/n): "
if /I "%restart_containers%" == "y" (
docker-compose down
docker-compose up -d
echo [32mКонтейнеры перезапущены[0m
) else (
echo [36mПродолжаем работу с уже запущенными контейнерами[0m
)
) else (
docker-compose up -d
echo [32mКонтейнеры запущены[0m
)
:: Проверка наличия пароля для БД в .env
findstr /C:"DB_PASSWORD=" .env > tmp_db_password.txt
set /p db_password_line=<tmp_db_password.txt
del tmp_db_password.txt
:: Проверяем, есть ли значение после DB_PASSWORD=
for /f "tokens=2 delims==" %%i in ("%db_password_line%") do (
set db_password=%%i
)
if "%db_password%" == "" (
:: Генерируем случайный пароль
set chars=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
set random_password=
for /L %%i in (1,1,16) do (
set /a random_index=!random! %% 62
for %%j in (!random_index!) do set random_password=!random_password!!chars:~%%j,1!
)
:: Обновляем .env файл с новым паролем
:: Создаем временный файл
type NUL > .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