pre-deploy commit
This commit is contained in:
217
start.sh
Executable file
217
start.sh
Executable 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}"
|
||||
Reference in New Issue
Block a user