Files
links/Makefile
Andrey K. Choi 2e535513b5 + Приведены все функции приложения в рабочий вид
+ Наведен порядок в файлах проекта
+ Наведен порядок в документации
+ Настроены скрипты установки, развертки и так далее, расширен MakeFile
2025-11-02 06:09:55 +09:00

285 lines
11 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CatLink Development and Deployment Makefile
# ================================================
.PHONY: help install update dev build deploy ssl clean logs test restart shell backup restore
# Default target
help: ## Показать доступные команды
@echo "CatLink - Makefile Commands"
@echo "=========================="
@echo ""
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
@echo ""
# === Development Commands ===
install: ## Установка и первый запуск
@echo "🚀 Установка CatLink..."
@./setup.sh
@echo "✅ Установка завершена!"
@echo "📱 Frontend: http://localhost:3000"
@echo "🔧 Backend API: http://localhost:8000"
@echo "📊 Admin: http://localhost:8000/admin"
dev: ## Запуск в режиме разработки
@echo "🔧 Запуск в режиме разработки..."
@docker-compose up
dev-bg: ## Запуск в фоне для разработки
@echo "🔧 Запуск в фоне..."
@docker-compose up -d
@echo "✅ Запущено в фоне"
@echo "📱 Frontend: http://localhost:3000"
@echo "🔧 Backend: http://localhost:8000"
up: ## Запуск с пересборкой (legacy)
@docker-compose up -d --build
down: ## Остановка всех сервисов
@echo "⏹️ Остановка сервисов..."
@docker-compose down
@echo "✅ Сервисы остановлены"
stop: ## Остановка всех сервисов (alias)
@$(MAKE) down
restart: ## Перезапуск сервисов
@echo "🔄 Перезапуск сервисов..."
@docker-compose down
@docker-compose up -d
@echo "✅ Сервисы перезапущены"
# === Build Commands ===
build: ## Сборка без кэша
@echo "🏗️ Сборка контейнеров..."
@docker-compose build --no-cache
@echo "✅ Сборка завершена"
build-prod: ## Сборка для продакшена
@echo "🏗️ Сборка для продакшена..."
@docker-compose -f docker-compose.yml -f docker-compose.prod.yml build --no-cache
@echo "✅ Продакшен сборка готова"
update: ## Обновление зависимостей и пересборка
@echo "📦 Обновление зависимостей..."
@git pull
@docker-compose down
@docker-compose build --no-cache
@docker-compose up -d
@echo "✅ Обновление завершено"
# === Production Deployment ===
deploy: ## Развертывание в продакшен
@echo "🚀 Развертывание в продакшен..."
@docker-compose -f docker-compose.yml -f docker-compose.prod.yml down
@docker-compose -f docker-compose.yml -f docker-compose.prod.yml build --no-cache
@docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
@echo "✅ Продакшен развернут"
# === SSL and Security ===
ssl: ## Настройка SSL с Let's Encrypt
@echo "🔒 Настройка SSL..."
@if [ ! -f docker-compose.ssl.yml ]; then \
echo "⚠️ Файл docker-compose.ssl.yml не найден. Создание..."; \
$(MAKE) ssl-setup; \
fi
@docker-compose -f docker-compose.yml -f docker-compose.ssl.yml up -d
@echo "✅ SSL настроен"
ssl-setup: ## Создание конфигурации SSL
@echo "🔒 Создание SSL конфигурации..."
@./scripts/ssl_setup.sh
@echo "✅ SSL конфигурация создана"
ssl-cert: ## Получение SSL сертификата
@echo "🔐 Получение SSL сертификата..."
@read -p "Введите домен (например, catlinks.kr): " DOMAIN; \
read -p "Введите email: " EMAIL; \
docker-compose -f docker-compose.ssl.yml run --rm certbot certonly \
--webroot -w /var/www/certbot \
-d $$DOMAIN \
--email $$EMAIL \
--agree-tos \
--no-eff-email
@echo "✅ SSL сертификат получен"
# === Database Management ===
migrate: ## Выполнить миграции базы данных
@echo "🗄️ Выполнение миграций..."
@docker-compose exec web python manage.py migrate
@echo "✅ Миграции выполнены"
makemigrations: ## Создать новые миграции
@echo "🗄️ Создание миграций..."
@docker-compose exec web python manage.py makemigrations
@echo "✅ Миграции созданы"
superuser: ## Создать суперпользователя
@echo "👤 Создание суперпользователя..."
@docker-compose exec web python manage.py createsuperuser
@echo "✅ Суперпользователь создан"
# === Maintenance ===
logs: ## Просмотр логов
@docker-compose logs -f
logs-web: ## Логи backend
@docker-compose logs -f web
logs-frontend: ## Логи frontend
@docker-compose logs -f frontend
shell: ## Django shell
@docker-compose exec web python manage.py shell
shell-db: ## Подключение к базе данных
@docker-compose exec db psql -U links_user -d links_db
backup: ## Создать бэкап базы данных
@echo "💾 Создание бэкапа..."
@mkdir -p backups
@docker-compose exec db pg_dump -U links_user links_db > backups/backup_$(shell date +%Y%m%d_%H%M%S).sql
@echo "✅ Бэкап создан в папке backups/"
restore: ## Восстановить из бэкапа
@echo "📥 Восстановление из бэкапа..."
@ls -la backups/
@read -p "Введите имя файла бэкапа: " BACKUP_FILE; \
docker-compose exec -T db psql -U links_user -d links_db < backups/$$BACKUP_FILE
@echo "✅ База данных восстановлена"
# === Testing and Quality ===
test: ## Запуск тестов
@echo "🧪 Запуск тестов..."
@docker-compose exec web python manage.py test
@echo "✅ Тесты завершены"
test-legacy: ## Запуск тестов (legacy pytest)
@docker-compose exec web pytest --maxfail=1 --disable-warnings -q
lint: ## Проверка кода
@echo "🔍 Проверка кода..."
@docker-compose exec web flake8 . || true
@docker-compose exec frontend npm run lint || true
@echo "✅ Проверка завершена"
format: ## Форматирование кода
@echo "🎨 Форматирование кода..."
@docker-compose exec web black . || true
@docker-compose exec frontend npm run format || true
@echo "✅ Код отформатирован"
# === Helper scripts and automation ===
generate-env: ## Сгенерировать .env (интерактивно)
@echo "🧭 Генерация .env файла (использует scripts/generate_env.sh)"
@bash ./scripts/generate_env.sh
create-superuser-noninteractive: ## Создать/обновить суперпользователя из .env (неинтерактивно)
@echo "👤 Создание/обновление суперпользователя из .env"
@bash ./scripts/create_superuser.sh
rebuild-no-cache: ## Пересобрать и поднять контейнеры без кэша (scripts/rebuild_no_cache.sh)
@echo "♻️ Пересборка контейнеров без кэша"
@bash ./scripts/rebuild_no_cache.sh
migrate-full: ## makemigrations, migrate и collectstatic
@echo "⚙️ Полный набор операций миграции и сбора статики"
@bash ./scripts/migrate_and_collect.sh
ssl-host-setup: ## Локальная установка nginx + certbot и настройка прокси (HOST)
@echo "🔐 Настройка nginx/letsencrypt на хосте"
@echo "Использование: make ssl-host-setup DOMAIN=example.com EMAIL=you@example.com"
@if [ -z "${DOMAIN}" ]; then echo "ERROR: DOMAIN variable required"; exit 1; fi
@if [ -z "${EMAIL}" ]; then echo "ERROR: EMAIL variable required"; exit 1; fi
@sudo bash ./scripts/ssl_setup.sh ${DOMAIN} ${EMAIL}
# === Cleanup ===
clean: ## Очистка системы
@echo "🧹 Очистка..."
@docker-compose down -v
@docker system prune -f
@docker volume prune -f
@echo "✅ Очистка завершена"
clean-all: ## Полная очистка (ОСТОРОЖНО!)
@echo "⚠️ ВНИМАНИЕ: Это удалит ВСЕ данные!"
@read -p "Продолжить? (yes/no): " CONFIRM; \
if [ "$$CONFIRM" = "yes" ]; then \
docker-compose down -v; \
docker system prune -af; \
docker volume prune -f; \
sudo rm -rf storage/; \
echo "✅ Полная очистка завершена"; \
else \
echo "❌ Отменено"; \
fi
# === Status and Info ===
status: ## Статус сервисов
@echo "📊 Статус сервисов:"
@docker-compose ps
@echo ""
@echo "🌐 URL-адреса:"
@echo " Frontend: http://localhost:3000"
@echo " Backend: http://localhost:8000"
@echo " Admin: http://localhost:8000/admin"
@echo ""
health: ## Проверка здоровья сервисов
@echo "🏥 Проверка здоровья..."
@curl -s http://localhost:3000 > /dev/null && echo "✅ Frontend: OK" || echo "❌ Frontend: ERROR"
@curl -s http://localhost:8000/api/ > /dev/null && echo "✅ Backend: OK" || echo "❌ Backend: ERROR"
@docker-compose exec db pg_isready -U links_user && echo "✅ Database: OK" || echo "❌ Database: ERROR"
info: ## Информация о проекте
@echo "📋 CatLink - Информация о проекте"
@echo "================================="
@echo "🐱 Название: CatLink"
@echo "📱 Frontend: Next.js 15"
@echo "🔧 Backend: Django 5.2"
@echo "🗄️ База данных: PostgreSQL"
@echo "🐳 Контейнеризация: Docker"
@echo ""
@echo "📁 Структура:"
@echo " frontend/ - Next.js приложение"
@echo " backend/ - Django API"
@echo " storage/ - Загруженные файлы"
@echo ""
@echo "🛠️ Команды разработки:"
@echo " make install - Первая установка"
@echo " make dev - Режим разработки"
@echo " make deploy - Продакшен"
@echo ""
# === Advanced Operations ===
scale: ## Масштабирование сервисов
@echo "📈 Масштабирование..."
@read -p "Количество экземпляров web: " WEB_COUNT; \
read -p "Количество экземпляров frontend: " FRONTEND_COUNT; \
docker-compose up -d --scale web=$$WEB_COUNT --scale frontend=$$FRONTEND_COUNT
@echo "✅ Масштабирование применено"
monitor: ## Мониторинг ресурсов
@echo "📊 Мониторинг ресурсов..."
@docker stats
reset: ## Сброс к заводским настройкам
@echo "⚠️ ВНИМАНИЕ: Сброс к заводским настройкам!"
@read -p "Продолжить? (yes/no): " CONFIRM; \
if [ "$$CONFIRM" = "yes" ]; then \
$(MAKE) clean-all; \
$(MAKE) install; \
echo "✅ Сброс завершен"; \
else \
echo "❌ Отменено"; \
fi