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

217
start.sh Executable file
View File

@@ -0,0 +1,217 @@
#!/bin/bash
# start.sh - Скрипт для запуска Telegram Tinder Bot
# Позволяет выбрать между локальной БД в контейнере или внешней БД
# Цвета для вывода
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
echo -e "${BLUE}==================================================${NC}"
echo -e "${BLUE} Запуск Telegram Tinder Bot ${NC}"
echo -e "${BLUE}==================================================${NC}"
# Проверка наличия Docker и Docker Compose
if ! command -v docker &> /dev/null || ! command -v docker-compose &> /dev/null; then
echo -e "${RED}ОШИБКА: Docker и/или Docker Compose не установлены!${NC}"
echo -e "Для установки Docker следуйте инструкции на: https://docs.docker.com/get-docker/"
exit 1
fi
# Проверяем наличие .env файла
if [ ! -f .env ]; then
echo -e "${YELLOW}Файл .env не найден. Создаем из шаблона...${NC}"
if [ -f .env.example ]; then
cp .env.example .env
echo -e "${GREEN}Файл .env создан из шаблона. Пожалуйста, отредактируйте его с вашими настройками.${NC}"
else
echo -e "${RED}ОШИБКА: Файл .env.example не найден. Создайте файл .env вручную.${NC}"
exit 1
fi
fi
# Спрашиваем про запуск базы данных
read -p "Запустить базу данных PostgreSQL в контейнере? (y/n): " use_container_db
# Функция для изменения docker-compose.yml
modify_docker_compose() {
local host=$1
local port=$2
local user=$3
local password=$4
local db_name=$5
echo -e "${YELLOW}Модифицируем docker-compose.yml для работы с внешней базой данных...${NC}"
# Сохраняем оригинальную версию файла
cp docker-compose.yml docker-compose.yml.bak
# Создаем временный файл с модифицированным содержимым
cat > docker-compose.temp.yml << EOL
version: '3.8'
services:
bot:
build: .
container_name: telegram-tinder-bot
restart: unless-stopped
env_file: .env
environment:
- NODE_ENV=production
- DB_HOST=${host}
- DB_PORT=${port}
- DB_NAME=${db_name}
- DB_USERNAME=${user}
- DB_PASSWORD=${password}
volumes:
- ./uploads:/app/uploads
- ./logs:/app/logs
networks:
- bot-network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
adminer:
image: adminer:latest
container_name: adminer-tinder
restart: unless-stopped
ports:
- "8080:8080"
networks:
- bot-network
volumes:
postgres_data:
networks:
bot-network:
driver: bridge
EOL
# Заменяем оригинальный файл
mv docker-compose.temp.yml docker-compose.yml
echo -e "${GREEN}docker-compose.yml обновлен для работы с внешней базой данных${NC}"
}
# Функция для восстановления docker-compose.yml
restore_docker_compose() {
if [ -f docker-compose.yml.bak ]; then
mv docker-compose.yml.bak docker-compose.yml
echo -e "${GREEN}docker-compose.yml восстановлен из резервной копии${NC}"
fi
}
# Обработка выбора
if [[ "$use_container_db" =~ ^[Nn]$ ]]; then
# Запрашиваем параметры подключения к внешней БД
echo -e "${BLUE}Введите параметры подключения к внешней базе данных:${NC}"
read -p "Хост (например, localhost): " db_host
read -p "Порт (например, 5432): " db_port
read -p "Имя базы данных: " db_name
read -p "Имя пользователя: " db_user
read -p "Пароль: " db_password
# Модифицируем docker-compose.yml
modify_docker_compose "$db_host" "$db_port" "$db_user" "$db_password" "$db_name"
# Обновляем .env файл
echo -e "${YELLOW}Обновляем файл .env с параметрами внешней базы данных...${NC}"
# Используем sed для замены переменных в .env
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS требует другой синтаксис для sed
sed -i '' "s/DB_HOST=.*/DB_HOST=${db_host}/" .env
sed -i '' "s/DB_PORT=.*/DB_PORT=${db_port}/" .env
sed -i '' "s/DB_NAME=.*/DB_NAME=${db_name}/" .env
sed -i '' "s/DB_USERNAME=.*/DB_USERNAME=${db_user}/" .env
sed -i '' "s/DB_PASSWORD=.*/DB_PASSWORD=${db_password}/" .env
else
# Linux и другие системы
sed -i "s/DB_HOST=.*/DB_HOST=${db_host}/" .env
sed -i "s/DB_PORT=.*/DB_PORT=${db_port}/" .env
sed -i "s/DB_NAME=.*/DB_NAME=${db_name}/" .env
sed -i "s/DB_USERNAME=.*/DB_USERNAME=${db_user}/" .env
sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=${db_password}/" .env
fi
echo -e "${GREEN}Файл .env обновлен с параметрами внешней базы данных${NC}"
# Запускаем только контейнер с ботом
echo -e "${BLUE}Запускаем Telegram Bot без контейнера базы данных...${NC}"
docker-compose up -d bot adminer
echo -e "${GREEN}Бот запущен и использует внешнюю базу данных: ${db_host}:${db_port}/${db_name}${NC}"
echo -e "${YELLOW}Adminer доступен по адресу: http://localhost:8080/${NC}"
echo -e "${YELLOW}Данные для входа в Adminer:${NC}"
echo -e "${YELLOW}Система: PostgreSQL${NC}"
echo -e "${YELLOW}Сервер: ${db_host}${NC}"
echo -e "${YELLOW}Пользователь: ${db_user}${NC}"
echo -e "${YELLOW}Пароль: (введенный вами)${NC}"
echo -e "${YELLOW}База данных: ${db_name}${NC}"
else
# Восстанавливаем оригинальный docker-compose.yml если есть бэкап
restore_docker_compose
echo -e "${BLUE}Запускаем Telegram Bot с контейнером базы данных...${NC}"
# Проверка, запущены ли контейнеры
containers=$(docker ps -q -f name=telegram-tinder-bot -f name=postgres-tinder)
if [ -n "$containers" ]; then
echo -e "${YELLOW}Контейнеры уже запущены. Перезапустить? (y/n): ${NC}"
read restart_containers
if [[ "$restart_containers" =~ ^[Yy]$ ]]; then
docker-compose down
docker-compose up -d
echo -e "${GREEN}Контейнеры перезапущены${NC}"
else
echo -e "${BLUE}Продолжаем работу с уже запущенными контейнерами${NC}"
fi
else
docker-compose up -d
echo -e "${GREEN}Контейнеры запущены${NC}"
fi
# Проверка наличия пароля для БД в .env
db_password=$(grep DB_PASSWORD .env | cut -d '=' -f2)
if [ -z "$db_password" ]; then
# Генерируем случайный пароль
random_password=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)
# Обновляем .env файл
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS требует другой синтаксис для sed
sed -i '' "s/DB_PASSWORD=.*/DB_PASSWORD=${random_password}/" .env
else
# Linux и другие системы
sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=${random_password}/" .env
fi
echo -e "${YELLOW}Сгенерирован случайный пароль для базы данных и сохранен в .env${NC}"
fi
echo -e "${GREEN}Telegram Bot запущен с локальной базой данных${NC}"
echo -e "${YELLOW}Adminer доступен по адресу: http://localhost:8080/${NC}"
echo -e "${YELLOW}Данные для входа в Adminer:${NC}"
echo -e "${YELLOW}Система: PostgreSQL${NC}"
echo -e "${YELLOW}Сервер: db${NC}"
echo -e "${YELLOW}Пользователь: postgres${NC}"
echo -e "${YELLOW}Пароль: (из переменной DB_PASSWORD в .env)${NC}"
echo -e "${YELLOW}База данных: telegram_tinder_bot${NC}"
fi
# Проверка статуса контейнеров
echo -e "${BLUE}Проверка статуса контейнеров:${NC}"
docker-compose ps
echo -e "${BLUE}==================================================${NC}"
echo -e "${GREEN}Процесс запуска Telegram Tinder Bot завершен!${NC}"
echo -e "${BLUE}==================================================${NC}"
echo -e "${YELLOW}Для просмотра логов используйте: docker-compose logs -f bot${NC}"
echo -e "${YELLOW}Для остановки: docker-compose down${NC}"