MakeFile created.

This commit is contained in:
2025-09-18 18:43:39 +09:00
parent 0566901fa4
commit 9281388959
28 changed files with 376 additions and 977 deletions

View File

@@ -16,7 +16,7 @@ COPY src/ ./src/
COPY .env.example ./
# Build the application (using Linux-compatible build command)
RUN npm run build:linux
RUN npm run build:linux:linux
# Production stage
FROM node:18-alpine AS production

75
Makefile Normal file
View File

@@ -0,0 +1,75 @@
# Makefile для Telegram Tinder Bot
.PHONY: help install update run migrate fix-docker clean
# Значения по умолчанию
DB_HOST ?= db
DB_PORT ?= 5432
DB_NAME ?= telegram_tinder_bot
DB_USERNAME ?= postgres
DB_PASSWORD ?= postgres
# Основные команды
help:
@echo "========== Telegram Tinder Bot Makefile =========="
@echo "make install - Установка зависимостей"
@echo "make update - Обновление кода из репозитория"
@echo "make run - Запуск бота в контейнере"
@echo "make migrate - Применение миграций базы данных"
@echo "make fix-docker - Исправление проблем с Docker"
@echo "make clean - Очистка и остановка контейнеров"
install:
@echo "Установка зависимостей..."
@if ! command -v docker &> /dev/null || ! command -v docker-compose &> /dev/null; then \
echo "Установка Docker..."; \
sudo apt update && sudo apt install -y docker.io docker-compose; \
fi
@if [ ! -f .env ]; then \
echo "Создание .env файла..."; \
cp .env.example .env 2>/dev/null || cp .env.production .env 2>/dev/null || echo "NODE_ENV=production" > .env; \
echo "Пожалуйста, отредактируйте файл .env!"; \
fi
@mkdir -p logs uploads && chmod -R 777 logs uploads
update:
@echo "Обновление кода..."
@git fetch --all
@git pull origin main || git pull origin master || echo "Не удалось обновить код"
@if [ -f package.json ]; then npm ci || npm install; fi
run:
@echo "Запуск бота..."
@docker-compose down || true
@make fix-docker
@docker-compose build
@docker-compose up -d
@echo "Бот запущен! Для просмотра логов: docker-compose logs -f"
migrate:
@echo "Применение миграций..."
@if [ -d migrations ]; then \
mkdir -p temp_migrations; \
find migrations -name "*.js" -exec cp {} temp_migrations/ \; 2>/dev/null || true; \
DATABASE_URL=postgres://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME} \
npx node-pg-migrate up --migrations-dir=migrations || true; \
fi
@if [ -d sql ]; then \
for sql_file in sql/*.sql; do \
[ -f "$${sql_file}" ] && docker-compose exec -T db psql -U ${DB_USERNAME} -d ${DB_NAME} -f "/app/$${sql_file}" || true; \
done; \
fi
fix-docker:
@echo "Исправление Docker конфигурации..."
@if [ -f Dockerfile ] && grep -q "RUN npm run build" Dockerfile; then \
sed -i 's/RUN npm run build/RUN npm run build:linux/g' Dockerfile; \
fi
@docker rm -f postgres-tinder adminer-tinder telegram-tinder-bot 2>/dev/null || true
@docker system prune -f --volumes >/dev/null 2>&1 || true
clean:
@echo "Очистка..."
@docker-compose down || true
@rm -rf temp_migrations node_modules/.cache
@echo "Очистка завершена"

View File

@@ -0,0 +1,49 @@
{
"noProfile": {
"message": "❌ У вас пока нет профиля.\\nСоздайте его для начала использования бота!",
"createButton": "🚀 Создать профиль"
},
"noMatches": {
"message": "💔 У вас пока нет матчей.\\n\\n🔍 Попробуйте просмотреть больше анкет!\\nИспользуйте /browse для поиска.",
"browsing": "🔍 Найти еще"
},
"matches": {
"title": "💕 Ваши матчи:",
"openChats": "💬 Открыть чаты",
"nativeChats": "📱 Нативные чаты",
"findMore": "🔍 Найти еще",
"cityNotSpecified": "Не указан"
},
"profileCreation": {
"start": "👋 Давайте создадим ваш профиль!\\n\\n📝 Сначала напишите ваше имя:",
"enterName": "❌ Пожалуйста, отправьте текстовое сообщение с вашим именем",
"enterAge": "📅 Отлично! Теперь укажите ваш возраст:",
"ageNotNumber": "❌ Пожалуйста, отправьте число",
"ageInvalid": "❌ Возраст должен быть числом от 18 до 100",
"enterCity": "📍 Прекрасно! В каком городе вы живете?",
"cityText": "❌ Пожалуйста, отправьте название города",
"enterBio": "📝 Теперь расскажите немного о себе (био):\\n\\n💡 Например: хобби, интересы, что ищете в отношениях и т.д.",
"bioText": "❌ Пожалуйста, отправьте текстовое описание",
"enterPhoto": "📸 Отлично! Теперь отправьте ваше фото:\\n\\n💡 Лучше использовать качественное фото лица",
"photoRequired": "❌ Пожалуйста, отправьте фотографию",
"error": "❌ Произошла ошибка. Попробуйте еще раз.",
"createError": "❌ Ошибка при создании профиля. Попробуйте еще раз позже."
},
"profileView": {
"cityNotSpecified": "Не указан",
"bioNotSpecified": "Описание не указано",
"editProfile": "✏️ Редактировать",
"managePhotos": "📸 Фото",
"startBrowsing": "🔍 Начать поиск",
"backToBrowsing": "👈 Назад"
},
"browsing": {
"noMoreProfiles": "🎉 Вы просмотрели всех доступных кандидатов!\\n\\n⏰ Попробуйте позже - возможно появятся новые анкеты!",
"needProfile": "❌ Сначала создайте профиль!\\nИспользуйте команду /start",
"cityNotSpecified": "Не указан"
},
"general": {
"greeting": "Привет! 👋\\n\\nИспользуйте команды для навигации:\\n/start - Главное меню\\n/help - Справка\\n/profile - Мой профиль\\n/browse - Поиск анкет",
"photoManagement": "📸 Для управления фотографиями используйте:"
}
}

0
bin/apply_direct_sql.sh Normal file → Executable file
View File

0
bin/apply_migrations.sh Normal file → Executable file
View File

0
bin/backup_db.sh Normal file → Executable file
View File

0
bin/compile_ts_migrations.sh Normal file → Executable file
View File

0
bin/create_consolidated_migration.sh Normal file → Executable file
View File

0
bin/create_release.sh Normal file → Executable file
View File

0
bin/fix_docker.sh Normal file → Executable file
View File

0
bin/fix_line_endings.sh Normal file → Executable file
View File

0
bin/fix_permissions.sh Normal file → Executable file
View File

0
bin/install_docker.sh Normal file → Executable file
View File

0
bin/install_ubuntu.sh Normal file → Executable file
View File

0
bin/run_full_migration.sh Normal file → Executable file
View File

0
bin/run_sql_migrations.sh Normal file → Executable file
View File

0
bin/setup.sh Normal file → Executable file
View File

0
bin/start_bot.sh Normal file → Executable file
View File

0
bin/update.sh Normal file → Executable file
View File

View File

@@ -1,59 +0,0 @@
@echo off
REM build-fix.bat - Скрипт для исправления проблем сборки в Docker для Windows
echo ==================================================
echo Проверка и исправление проблем сборки
echo ==================================================
REM Проверяем наличие Dockerfile
if not exist Dockerfile (
echo ОШИБКА: Dockerfile не найден в текущей директории!
exit /b 1
)
REM Проверяем команду сборки в Dockerfile
echo Проверка конфигурации Dockerfile...
findstr /c:"RUN npm run build" Dockerfile > nul
if %errorlevel% equ 0 (
findstr /c:"RUN npm run build:linux" Dockerfile > nul
if %errorlevel% neq 0 (
echo Найдена проблема: Dockerfile использует 'npm run build', что не работает в контейнере Linux
echo Исправление: заменяем на 'npm run build:linux'...
REM Создаем резервную копию
copy Dockerfile Dockerfile.bak
REM Заменяем команду
powershell -Command "(Get-Content Dockerfile) -replace 'RUN npm run build', 'RUN npm run build:linux' | Set-Content Dockerfile"
echo ✅ Dockerfile обновлен. Резервная копия сохранена как Dockerfile.bak
) else (
echo ✅ Dockerfile уже использует корректную команду сборки
)
) else (
echo ✅ Команда сборки не найдена в Dockerfile
)
REM Проверка команды сборки в package.json
if exist package.json (
findstr /c:"\"build:linux\":" package.json > nul
if %errorlevel% equ 0 (
echoВ package.json уже определена команда build:linux
) else (
echo В package.json отсутствует команда build:linux
echo Рекомендуем добавить команду build:linux вручную:
echo Найдите строку с "build": "tsc && xcopy /E /I src\\locales dist\\locales"
echo И добавьте после нее:
echo "build:linux": "tsc && cp -R src/locales dist/",
)
) else (
echo ПРЕДУПРЕЖДЕНИЕ: package.json не найден в текущей директории!
)
echo ==================================================
echo Проверка и исправление завершены!
echo ==================================================
echo Для применения изменений выполните: docker-compose build
pause

View File

@@ -1,70 +0,0 @@
#!/bin/bash
# build-fix.sh - Скрипт для исправления проблем сборки в Docker
# Цвета для вывода
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}==================================================${NC}"
echo -e "${BLUE} Проверка и исправление проблем сборки ${NC}"
echo -e "${BLUE}==================================================${NC}"
# Проверяем наличие Dockerfile
if [ ! -f Dockerfile ]; then
echo -e "${RED}ОШИБКА: Dockerfile не найден в текущей директории!${NC}"
exit 1
fi
# Проверяем команду сборки в package.json и Dockerfile
echo -e "${YELLOW}Проверка конфигурации сборки...${NC}"
# Проверка команды сборки в Dockerfile
if grep -q "RUN npm run build" Dockerfile && ! grep -q "RUN npm run build:linux" Dockerfile; then
echo -e "${YELLOW}Найдена проблема: Dockerfile использует 'npm run build', что не работает в контейнере Linux${NC}"
echo -e "${BLUE}Исправление: заменяем на 'npm run build:linux'...${NC}"
# Создаем резервную копию
cp Dockerfile Dockerfile.bak
# Заменяем команду
sed -i "s/RUN npm run build/RUN npm run build:linux/g" Dockerfile
echo -e "${GREEN}✅ Dockerfile обновлен. Резервная копия сохранена как Dockerfile.bak${NC}"
else
echo -e "${GREEN}✅ Dockerfile уже использует корректную команду сборки${NC}"
fi
# Проверка команды сборки в package.json
if [ -f package.json ]; then
if grep -q "\"build:linux\":" package.json; then
echo -e "${GREEN}В package.json уже определена команда build:linux${NC}"
else
echo -e "${YELLOW}В package.json отсутствует команда build:linux${NC}"
echo -e "${BLUE}Добавляем команду build:linux...${NC}"
# Создаем резервную копию
cp package.json package.json.bak
# Получаем текущую команду build
build_cmd=$(grep -o '"build": "[^"]*"' package.json | sed 's/"build": "\(.*\)"/\1/')
# Создаем версию для Linux, заменяя xcopy на cp -R
linux_build_cmd=$(echo "$build_cmd" | sed 's/xcopy \/E \/I/cp -R/g' | sed 's/\\\\/\//g')
# Добавляем команду build:linux, если она не существует
if [[ "$linux_build_cmd" != "$build_cmd" ]]; then
sed -i "/\"build\":/a \ \"build:linux\": \"${linux_build_cmd}\"," package.json
echo -e "${GREEN}✅ Команда build:linux добавлена в package.json${NC}"
fi
fi
else
echo -e "${RED}ПРЕДУПРЕЖДЕНИЕ: package.json не найден в текущей директории!${NC}"
fi
echo -e "${BLUE}==================================================${NC}"
echo -e "${GREEN}Проверка и исправление завершены!${NC}"
echo -e "${BLUE}==================================================${NC}"
echo -e "${YELLOW}Для применения изменений выполните: docker-compose build${NC}"

230
deploy.sh Normal file → Executable file
View File

@@ -1,63 +1,217 @@
#!/bin/bash
# deploy.sh - Скрипт для деплоя Telegram Tinder Bot
# deploy.sh - Улучшенный скрипт для деплоя Telegram Tinder Bot
echo "🚀 Деплой Telegram Tinder Bot..."
set -e # Выход при ошибке
# Проверяем наличие Docker
if ! command -v docker &> /dev/null || ! command -v docker-compose &> /dev/null; then
echo "❌ Docker и Docker Compose должны быть установлены!"
echo "Для установки на Ubuntu выполните:"
echo "sudo apt update && sudo apt install -y docker.io docker-compose"
exit 1
fi
# Определение цветов для вывода
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 Deploy ${NC}"
echo -e "${BLUE}========================================${NC}"
# Определяем рабочую директорию
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
cd "$SCRIPT_DIR"
# Функция для проверки наличия команды
check_command() {
if ! command -v "$1" &> /dev/null; then
echo -e "${RED}❌ Команда $1 не найдена!${NC}"
return 1
else
echo -e "${GREEN}✓ Команда $1 найдена${NC}"
return 0
fi
}
# Шаг 1: Проверка и установка зависимостей
echo -e "\n${BLUE}Шаг 1: Проверка и установка зависимостей...${NC}"
# Проверяем наличие Docker и Docker Compose
if ! check_command docker || ! check_command docker-compose; then
echo -e "${YELLOW}Установка Docker и Docker Compose...${NC}"
# Проверяем, запущен ли скрипт от имени root
if [ "$(id -u)" -ne 0 ]; then
echo -e "${RED}❌ Этот скрипт должен быть запущен с правами root для установки Docker.${NC}"
echo -e "Пожалуйста, запустите: ${YELLOW}sudo $0${NC}"
exit 1
fi
# Устанавливаем Docker и Docker Compose
if [ -f bin/install_docker.sh ]; then
bash bin/install_docker.sh
else
echo -e "${YELLOW}Установка Docker с помощью apt...${NC}"
apt update
apt install -y docker.io docker-compose
fi
fi
# Проверяем наличие Git
if ! check_command git; then
echo -e "${YELLOW}Установка Git...${NC}"
apt update && apt install -y git
fi
# Проверяем наличие Node.js (для локальных операций)
if ! check_command node || ! check_command npm; then
echo -e "${YELLOW}Установка Node.js...${NC}"
apt update
apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
fi
# Шаг 2: Получение последних изменений из репозитория
echo -e "\n${BLUE}Шаг 2: Получение последних изменений из репозитория...${NC}"
# Сохраняем локальные изменения, если они есть
git stash save "Auto-stash before deploy: $(date)" || true
# Получаем последние изменения
echo "📥 Получение последних изменений..."
git pull origin main
git fetch --all
git checkout main || git checkout master
git pull origin "$(git rev-parse --abbrev-ref HEAD)"
echo -e "${GREEN}✓ Получены последние изменения${NC}"
# Шаг 3: Проверка и создание файлов конфигурации
echo -e "\n${BLUE}Шаг 3: Проверка и настройка конфигурационных файлов...${NC}"
# Проверяем наличие .env файла
if [ ! -f .env ]; then
echo "📝 Создание .env файла из .env.production..."
cp .env.production .env
echo "⚠️ Пожалуйста, отредактируйте файл .env и укажите свои настройки!"
exit 1
echo -e "${YELLOW}⚠️ Файл .env не найден!${NC}"
# Пытаемся найти шаблон .env файла
if [ -f .env.production ]; then
echo -e "${YELLOW}Создание .env файла из .env.production...${NC}"
cp .env.production .env
elif [ -f .env.example ]; then
echo -e "${YELLOW}Создание .env файла из .env.example...${NC}"
cp .env.example .env
else
echo -e "${RED}❌ Шаблон .env файла не найден! Создаем базовый .env файл...${NC}"
cat > .env << EOL
# Базовый .env файл
NODE_ENV=production
PORT=3000
DB_HOST=db
DB_PORT=5432
DB_NAME=telegram_tinder_bot
DB_USERNAME=postgres
DB_PASSWORD=postgres
TELEGRAM_BOT_TOKEN=YOUR_BOT_TOKEN
EOL
fi
echo -e "${YELLOW}⚠️ Пожалуйста, отредактируйте файл .env и укажите свои настройки!${NC}"
echo -e "${YELLOW}⚠️ Особенно важно указать TELEGRAM_BOT_TOKEN${NC}"
read -p "Продолжить деплой? (y/n): " continue_deploy
if [[ ! $continue_deploy =~ ^[Yy]$ ]]; then
echo -e "${RED}Деплой отменен. Пожалуйста, настройте .env файл и запустите скрипт снова.${NC}"
exit 1
fi
fi
# Проверяем и исправляем проблему с командой сборки в Dockerfile
echo "🔧 Проверка конфигурации Dockerfile..."
if grep -q "RUN npm run build" Dockerfile; then
echo "⚠️ Исправление команды сборки в Dockerfile для совместимости с Linux..."
# Проверяем наличие docker-compose.override.yml
if [ ! -f docker-compose.override.yml ] && [ -f docker-compose.override.yml.example ]; then
echo -e "${YELLOW}Создание docker-compose.override.yml из примера...${NC}"
cp docker-compose.override.yml.example docker-compose.override.yml
fi
# Шаг 4: Исправление проблем с Docker
echo -e "\n${BLUE}Шаг 4: Проверка и исправление проблем с Docker...${NC}"
# Исправляем проблему с командой сборки в Dockerfile
if [ -f Dockerfile ] && grep -q "RUN npm run build" Dockerfile; then
echo -e "${YELLOW}⚠️ Исправление команды сборки в Dockerfile для совместимости с Linux...${NC}"
sed -i 's/RUN npm run build/RUN npm run build:linux/g' Dockerfile
echo "✅ Dockerfile обновлен"
echo -e "${GREEN} Dockerfile обновлен${NC}"
fi
# Запускаем Docker Compose
echo "🐳 Сборка и запуск контейнеров Docker..."
docker-compose down
# Исправление прав доступа к файлам в Unix-системах
if [ -f bin/fix_permissions.sh ]; then
echo -e "${YELLOW}Исправление прав доступа к файлам...${NC}"
bash bin/fix_permissions.sh
fi
# Шаг 5: Запуск с Docker Compose
echo -e "\n${BLUE}Шаг 5: Сборка и запуск Docker контейнеров...${NC}"
# Остановка и удаление старых контейнеров
echo -e "${YELLOW}Остановка и удаление старых контейнеров...${NC}"
docker-compose down || true
# Проверка наличия скрипта для исправления Docker
if [ -f bin/fix_docker.sh ]; then
echo -e "${YELLOW}Запуск скрипта исправления Docker...${NC}"
bash bin/fix_docker.sh
fi
# Создание необходимых директорий с правильными правами доступа
echo -e "${YELLOW}Создание необходимых директорий...${NC}"
mkdir -p logs uploads
chmod -R 777 logs uploads
# Сборка и запуск контейнеров
echo -e "${YELLOW}Сборка контейнеров...${NC}"
docker-compose build
echo -e "${YELLOW}Запуск контейнеров...${NC}"
docker-compose up -d
# Шаг 6: Применение миграций
echo -e "\n${BLUE}Шаг 6: Применение миграций базы данных...${NC}"
# Ждем инициализации базы данных
echo -e "${YELLOW}Ожидание инициализации базы данных...${NC}"
sleep 10
# Выбор способа миграции
if [ -f bin/run_full_migration.sh ]; then
echo -e "${YELLOW}Запуск полной миграции базы данных...${NC}"
docker-compose exec bot bash -c "cd /app && ./bin/run_full_migration.sh" || true
elif [ -f bin/apply_migrations.sh ]; then
echo -e "${YELLOW}Применение миграций базы данных...${NC}"
docker-compose exec bot bash -c "cd /app && ./bin/apply_migrations.sh" || true
else
echo -e "${YELLOW}Миграционные скрипты не найдены, пропускаем этап миграции${NC}"
fi
# Шаг 7: Проверка работоспособности
echo -e "\n${BLUE}Шаг 7: Проверка работоспособности...${NC}"
# Проверяем статус контейнеров
echo "🔍 Проверка статуса контейнеров..."
echo -e "${YELLOW}Проверка статуса контейнеров...${NC}"
docker-compose ps
echo "✅ Деплой успешно завершен! Бот должен быть доступен через Telegram."
# Ждем запуска API
echo -e "${YELLOW}Ожидание запуска API...${NC}"
sleep 5
docker-compose exec bot curl -s http://localhost:3000/health || echo "⚠️ Сервис не отвечает на проверку здоровья"
# Вывод информации о деплое
echo -e "\n${GREEN}✅ Деплой успешно завершен!${NC}"
echo -e "${GREEN}✅ Бот должен быть доступен через Telegram.${NC}"
echo ""
echo "📊 Полезные команды:"
echo "- Просмотр логов: docker-compose logs -f"
echo "- Перезапуск сервисов: docker-compose restart"
echo "- Остановка всех сервисов: docker-compose down"
echo "- Доступ к базе данных: docker-compose exec db psql -U postgres -d telegram_tinder_bot"
echo "- Проверка состояния бота: curl http://localhost:3000/health"
echo -e "${BLUE}📊 Полезные команды:${NC}"
echo -e "- ${YELLOW}Просмотр логов:${NC} docker-compose logs -f bot"
echo -e "- ${YELLOW}Перезапуск сервисов:${NC} docker-compose restart"
echo -e "- ${YELLOW}Остановка всех сервисов:${NC} docker-compose down"
echo -e "- ${YELLOW}Доступ к базе данных:${NC} docker-compose exec db psql -U postgres -d telegram_tinder_bot"
echo -e "- ${YELLOW}Проверка состояния бота:${NC} curl http://localhost:3000/health"
echo ""
echo "🌟 Для администрирования базы данных:"
echo "Adminer доступен по адресу: http://ваш_сервер:8080"
echo " - Система: PostgreSQL"
echo " - Сервер: db"
echo " - Пользователь: postgres"
echo " - Пароль: (из переменной DB_PASSWORD в .env)"
echo " - База данных: telegram_tinder_bot"
echo -e "${BLUE}🌟 Для администрирования базы данных:${NC}"
echo -e "Adminer доступен по адресу: http://ваш_сервер:8080"
echo -e " - ${YELLOW}Система:${NC} PostgreSQL"
echo -e " - ${YELLOW}Сервер:${NC} db"
echo -e " - ${YELLOW}Пользователь:${NC} postgres"
echo -e " - ${YELLOW}Пароль:${NC} (из переменной DB_PASSWORD в .env)"
echo -e " - ${YELLOW}База данных:${NC} telegram_tinder_bot"
echo ""
echo -e "${YELLOW}⚠️ При возникновении проблем проверьте файлы в директории bin/ для дополнительных утилит исправления.${NC}"

View File

@@ -1,69 +0,0 @@
# Используем версию Docker Compose для локальной разработки
version: '3.8'
services:
bot:
build:
context: .
dockerfile: Dockerfile
args:
- NODE_ENV=development
environment:
- NODE_ENV=development
- DB_HOST=db
- DB_PORT=5432
- DB_NAME=telegram_tinder_bot
- DB_USERNAME=postgres
- DB_PASSWORD=dev_password
volumes:
# Монтируем исходный код для горячей перезагрузки
- ./src:/app/src
- ./dist:/app/dist
- ./.env:/app/.env
ports:
# Открываем порт для отладки
- "9229:9229"
command: npm run dev
networks:
- bot-network
depends_on:
- db
db:
# Используем последнюю версию PostgreSQL для разработки
image: postgres:16-alpine
environment:
- POSTGRES_DB=telegram_tinder_bot
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=dev_password
volumes:
# Хранение данных локально для быстрого сброса
- postgres_data_dev:/var/lib/postgresql/data
# Монтируем скрипты инициализации
- ./sql:/docker-entrypoint-initdb.d
ports:
# Открываем порт для доступа к БД напрямую
- "5433:5432"
networks:
- bot-network
adminer:
image: adminer:latest
ports:
- "8080:8080"
networks:
- bot-network
depends_on:
- db
environment:
- ADMINER_DEFAULT_SERVER=db
- ADMINER_DEFAULT_USER=postgres
- ADMINER_DEFAULT_PASSWORD=dev_password
volumes:
postgres_data_dev:
networks:
bot-network:
driver: bridge

View File

@@ -1,45 +0,0 @@
[36mВведите параметры подключения к внешней базе данных:[0m
Хост (например, localhost): Порт (например, 5432): Имя базы данных: Имя пользователя: Пароль: [33mМодифицируем docker-compose.yml для работы с внешней базой данных...[0m
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E4A0A9><EFBFBD>: 0.
version: '3.8'
services:
bot:
build: .
container_name: telegram-tinder-bot
restart: unless-stopped
env_file: .env
environment:
- NODE_ENV=production
- DB_HOST=
- DB_PORT=
- DB_NAME=
- DB_USERNAME=
- DB_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

View File

@@ -0,0 +1,59 @@
import { query } from '../database/connection';
export class UserLanguageService {
// Получить язык пользователя
async getUserLanguage(telegramId: string): Promise<string> {
try {
const result = await query(
'SELECT language FROM users WHERE telegram_id = $1',
[telegramId]
);
if (result.rows.length > 0) {
return result.rows[0].language || 'ru';
}
return 'ru'; // Язык по умолчанию
} catch (error) {
console.error('Error getting user language:', error);
return 'ru';
}
}
// Установить язык пользователя
async setUserLanguage(telegramId: string, language: string): Promise<boolean> {
try {
await query(
'UPDATE users SET language = $1 WHERE telegram_id = $2',
[language, telegramId]
);
return true;
} catch (error) {
console.error('Error setting user language:', error);
return false;
}
}
// Получить поддерживаемые языки
getSupportedLanguages(): { [key: string]: string } {
return {
'ru': '🇷🇺 Русский',
'en': '🇺🇸 English',
'es': '🇪🇸 Español',
'fr': '🇫🇷 Français',
'de': '🇩🇪 Deutsch',
'it': '🇮🇹 Italiano',
'pt': '🇵🇹 Português',
'zh': '🇨🇳 中文',
'ja': '🇯🇵 日本語',
'ko': '🇰🇷 한국어',
'uz': '🇺🇿 O\'zbekcha',
'kk': '🇰🇿 Қазақша'
};
}
// Проверить, поддерживается ли язык
isLanguageSupported(language: string): boolean {
return Object.keys(this.getSupportedLanguages()).includes(language);
}
}

241
start.bat
View File

@@ -1,241 +0,0 @@
@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

229
start.ps1
View File

@@ -1,229 +0,0 @@
function createModifiedDockerCompose {
param (
[string]$dbHost,
[string]$dbPort,
[string]$dbName,
[string]$dbUser,
[string]$dbPassword
)
$dockerComposeContent = @"
version: '3.8'
services:
bot:
build: .
container_name: telegram-tinder-bot
restart: unless-stopped
env_file: .env
environment:
- NODE_ENV=production
- DB_HOST=$dbHost
- DB_PORT=$dbPort
- DB_NAME=$dbName
- DB_USERNAME=$dbUser
- DB_PASSWORD=$dbPassword
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
"@
return $dockerComposeContent
}
function restoreDockerCompose {
if (Test-Path -Path "docker-compose.yml.bak") {
Copy-Item -Path "docker-compose.yml.bak" -Destination "docker-compose.yml" -Force
Write-Host "docker-compose.yml восстановлен из резервной копии" -ForegroundColor Green
}
}
function updateEnvFile {
param (
[string]$dbHost,
[string]$dbPort,
[string]$dbName,
[string]$dbUser,
[string]$dbPassword
)
$envContent = Get-Content -Path ".env" -Raw
$envContent = $envContent -replace "DB_HOST=.*", "DB_HOST=$dbHost"
$envContent = $envContent -replace "DB_PORT=.*", "DB_PORT=$dbPort"
$envContent = $envContent -replace "DB_NAME=.*", "DB_NAME=$dbName"
$envContent = $envContent -replace "DB_USERNAME=.*", "DB_USERNAME=$dbUser"
$envContent = $envContent -replace "DB_PASSWORD=.*", "DB_PASSWORD=$dbPassword"
Set-Content -Path ".env" -Value $envContent
Write-Host "Файл .env обновлен с параметрами внешней базы данных" -ForegroundColor Green
}
function generateRandomPassword {
$length = 16
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
$bytes = New-Object Byte[] $length
$rng = [System.Security.Cryptography.RNGCryptoServiceProvider]::new()
$rng.GetBytes($bytes)
$password = ""
for ($i = 0; $i -lt $length; $i++) {
$password += $chars[$bytes[$i] % $chars.Length]
}
return $password
}
# Начало основного скрипта
Write-Host "==================================================" -ForegroundColor Cyan
Write-Host " Запуск Telegram Tinder Bot" -ForegroundColor Cyan
Write-Host "==================================================" -ForegroundColor Cyan
# Проверка наличия Docker
try {
docker --version | Out-Null
} catch {
Write-Host "ОШИБКА: Docker не установлен!" -ForegroundColor Red
Write-Host "Установите Docker Desktop для Windows: https://docs.docker.com/desktop/install/windows-install/"
exit
}
# Проверяем наличие .env файла
if (-not (Test-Path -Path ".env")) {
Write-Host "Файл .env не найден. Создаем из шаблона..." -ForegroundColor Yellow
if (Test-Path -Path ".env.example") {
Copy-Item -Path ".env.example" -Destination ".env"
Write-Host "Файл .env создан из шаблона. Пожалуйста, отредактируйте его с вашими настройками." -ForegroundColor Green
} else {
Write-Host "ОШИБКА: Файл .env.example не найден. Создайте файл .env вручную." -ForegroundColor Red
exit
}
}
# Спрашиваем про запуск базы данных
$useContainerDb = Read-Host "Запустить базу данных PostgreSQL в контейнере? (y/n)"
if ($useContainerDb -ne "y") {
# Запрашиваем параметры подключения к внешней БД
Write-Host "Введите параметры подключения к внешней базе данных:" -ForegroundColor Cyan
$dbHost = Read-Host "Хост (например, localhost)"
$dbPort = Read-Host "Порт (например, 5432)"
$dbName = Read-Host "Имя базы данных"
$dbUser = Read-Host "Имя пользователя"
$dbPassword = Read-Host "Пароль" -AsSecureString
$dbPasswordText = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($dbPassword))
# Модифицируем docker-compose.yml
Write-Host "Модифицируем docker-compose.yml для работы с внешней базой данных..." -ForegroundColor Yellow
# Сохраняем оригинальную версию файла
Copy-Item -Path "docker-compose.yml" -Destination "docker-compose.yml.bak" -Force
# Создаем модифицированный docker-compose.yml
$dockerComposeContent = createModifiedDockerCompose -dbHost $dbHost -dbPort $dbPort -dbName $dbName -dbUser $dbUser -dbPassword $dbPasswordText
Set-Content -Path "docker-compose.yml" -Value $dockerComposeContent
Write-Host "docker-compose.yml обновлен для работы с внешней базой данных" -ForegroundColor Green
# Обновляем .env файл
Write-Host "Обновляем файл .env с параметрами внешней базы данных..." -ForegroundColor Yellow
updateEnvFile -dbHost $dbHost -dbPort $dbPort -dbName $dbName -dbUser $dbUser -dbPassword $dbPasswordText
# Запускаем только контейнер с ботом
Write-Host "Запускаем Telegram Bot без контейнера базы данных..." -ForegroundColor Cyan
docker-compose up -d bot adminer
Write-Host "Бот запущен и использует внешнюю базу данных: $dbHost`:$dbPort/$dbName" -ForegroundColor Green
Write-Host "Adminer доступен по адресу: http://localhost:8080/" -ForegroundColor Yellow
Write-Host "Данные для входа в Adminer:" -ForegroundColor Yellow
Write-Host "Система: PostgreSQL" -ForegroundColor Yellow
Write-Host "Сервер: $dbHost" -ForegroundColor Yellow
Write-Host "Пользователь: $dbUser" -ForegroundColor Yellow
Write-Host "Пароль: (введенный вами)" -ForegroundColor Yellow
Write-Host "База данных: $dbName" -ForegroundColor Yellow
} else {
# Восстанавливаем оригинальный docker-compose.yml если есть бэкап
restoreDockerCompose
Write-Host "Запускаем Telegram Bot с контейнером базы данных..." -ForegroundColor Cyan
# Проверка, запущены ли контейнеры
$containers = docker ps -q -f name=telegram-tinder-bot -f name=postgres-tinder
if ($containers) {
$restartContainers = Read-Host "Контейнеры уже запущены. Перезапустить? (y/n)"
if ($restartContainers -eq "y") {
docker-compose down
docker-compose up -d
Write-Host "Контейнеры перезапущены" -ForegroundColor Green
} else {
Write-Host "Продолжаем работу с уже запущенными контейнерами" -ForegroundColor Cyan
}
} else {
docker-compose up -d
Write-Host "Контейнеры запущены" -ForegroundColor Green
}
# Проверка наличия пароля для БД в .env
$envContent = Get-Content -Path ".env" -Raw
$match = [Regex]::Match($envContent, "DB_PASSWORD=(.*)(\r?\n|$)")
$dbPassword = if ($match.Success) { $match.Groups[1].Value.Trim() } else { "" }
if ([string]::IsNullOrWhiteSpace($dbPassword)) {
# Генерируем случайный пароль
$randomPassword = generateRandomPassword
# Обновляем .env файл
$envContent = $envContent -replace "DB_PASSWORD=.*", "DB_PASSWORD=$randomPassword"
Set-Content -Path ".env" -Value $envContent
Write-Host "Сгенерирован случайный пароль для базы данных и сохранен в .env" -ForegroundColor Yellow
}
Write-Host "Telegram Bot запущен с локальной базой данных" -ForegroundColor Green
Write-Host "Adminer доступен по адресу: http://localhost:8080/" -ForegroundColor Yellow
Write-Host "Данные для входа в Adminer:" -ForegroundColor Yellow
Write-Host "Система: PostgreSQL" -ForegroundColor Yellow
Write-Host "Сервер: db" -ForegroundColor Yellow
Write-Host "Пользователь: postgres" -ForegroundColor Yellow
Write-Host "Пароль: (из переменной DB_PASSWORD в .env)" -ForegroundColor Yellow
Write-Host "База данных: telegram_tinder_bot" -ForegroundColor Yellow
}
# Проверка статуса контейнеров
Write-Host "Проверка статуса контейнеров:" -ForegroundColor Cyan
docker-compose ps
Write-Host "==================================================" -ForegroundColor Cyan
Write-Host "Процесс запуска Telegram Tinder Bot завершен!" -ForegroundColor Green
Write-Host "==================================================" -ForegroundColor Cyan
Write-Host "Для просмотра логов используйте: docker-compose logs -f bot" -ForegroundColor Yellow
Write-Host "Для остановки: docker-compose down" -ForegroundColor Yellow
Read-Host "Нажмите Enter для выхода"

225
start.sh
View File

@@ -1,225 +0,0 @@
#!/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
# Проверяем и исправляем проблему с командой сборки в Dockerfile
echo -e "${YELLOW}Проверка конфигурации Dockerfile...${NC}"
if grep -q "RUN npm run build" Dockerfile && ! grep -q "RUN npm run build:linux" Dockerfile; then
echo -e "${YELLOW}⚠️ Исправление команды сборки в Dockerfile для совместимости с Linux...${NC}"
sed -i "s/RUN npm run build/RUN npm run build:linux/g" Dockerfile
echo -e "${GREEN}✅ Dockerfile обновлен для использования команды сборки совместимой с Linux${NC}"
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}"