pre-deploy commit
This commit is contained in:
241
start.bat
Normal file
241
start.bat
Normal file
@@ -0,0 +1,241 @@
|
||||
@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
|
||||
Reference in New Issue
Block a user