+ Приведены все функции приложения в рабочий вид

+ Наведен порядок в файлах проекта
+ Наведен порядок в документации
+ Настроены скрипты установки, развертки и так далее, расширен MakeFile
This commit is contained in:
2025-11-02 06:09:55 +09:00
parent 367e1c932e
commit 2e535513b5
6103 changed files with 7040 additions and 1027861 deletions

281
Makefile
View File

@@ -1,11 +1,284 @@
up:
# 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:
down: ## Остановка всех сервисов
@echo "⏹️ Остановка сервисов..."
@docker-compose down
@echo "✅ Сервисы остановлены"
migrate:
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 "✅ Миграции выполнены"
test:
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