pre-deploy commit

This commit is contained in:
2025-09-18 14:19:49 +09:00
parent 5ea3e8c1f3
commit 713eadc643
50 changed files with 2238 additions and 569 deletions

241
start.bat Normal file
View 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