# 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; then \ echo "Установка Docker..."; \ echo "Удаление конфликтующих пакетов..."; \ sudo apt remove -y docker.io containerd runc 2>/dev/null || true; \ sudo apt update; \ sudo apt install -y apt-transport-https ca-certificates curl software-properties-common; \ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg; \ echo "deb [arch=$$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null; \ sudo apt update; \ sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin; \ sudo systemctl start docker; \ sudo systemctl enable docker; \ sudo usermod -aG docker $$USER; \ echo "Docker установлен. Перелогиньтесь для применения группы docker."; \ 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 @echo "Пересборка контейнеров..." @docker compose down || docker-compose down || true @docker compose build || docker-compose build @docker compose up -d || docker-compose up -d @echo "Применение миграций к базе данных..." @sleep 5 @make migrate @echo "✅ Обновление завершено! Бот перезапущен с новой версией." run: @echo "Запуск бота..." @docker-compose down || true @make fix-docker @docker-compose build @docker-compose up -d @echo "Бот запущен! Для просмотра логов: docker-compose logs -f" migrate: @echo "Применение миграций к базе данных..." @if [ ! -f .env ]; then \ echo "❌ Файл .env не найден! Создайте его перед применением миграций."; \ exit 1; \ fi @. ./.env && export $$(cat .env | grep -v '^#' | xargs) && \ echo "Подключение к БД: $$DB_HOST:$$DB_PORT/$$DB_NAME ($$DB_USERNAME)" && \ echo "Создание расширения uuid-ossp..." && \ PGPASSWORD="$$DB_PASSWORD" psql -h $$DB_HOST -p $$DB_PORT -U $$DB_USERNAME -d $$DB_NAME \ -c "CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";" 2>/dev/null || true && \ echo "Применение consolidated.sql..." && \ PGPASSWORD="$$DB_PASSWORD" psql -h $$DB_HOST -p $$DB_PORT -U $$DB_USERNAME -d $$DB_NAME \ -f sql/consolidated.sql 2>&1 | grep -E "(ERROR|CREATE|ALTER)" || true && \ echo "Применение дополнительных миграций..." && \ for sql_file in sql/add_*.sql; do \ [ -f "$$sql_file" ] && echo " - Применение $$(basename $$sql_file)..." && \ PGPASSWORD="$$DB_PASSWORD" psql -h $$DB_HOST -p $$DB_PORT -U $$DB_USERNAME -d $$DB_NAME \ -f "$$sql_file" 2>&1 | grep -v "NOTICE" || true; \ done && \ echo "✅ Миграции применены успешно!" 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 "Очистка завершена"