MakeFile created.
This commit is contained in:
230
deploy.sh
Normal file → Executable file
230
deploy.sh
Normal file → Executable 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}"
|
||||
|
||||
Reference in New Issue
Block a user