diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1fa21a7 --- /dev/null +++ b/Makefile @@ -0,0 +1,68 @@ +.PHONY: help up down restart logs logs-app logs-db ps db dev db-push db-shell clean install-docker + +# Цвета для вывода справки +CYAN := \033[36m +GREEN := \033[32m +RESET := \033[0m + +help: + @echo "$(CYAN)XFlow Full Stack Management:$(RESET)" + @echo " $(GREEN)make up$(RESET) - Собрать и запустить полный стек в Docker (App + DB + Redis)" + @echo " $(GREEN)make db$(RESET) - Запустить ТОЛЬКО базы данных (PostgreSQL + Redis) в фоне" + @echo " $(GREEN)make dev$(RESET) - Поднять DB в Docker + запустить локальный Nuxt с горячей перезагрузкой" + @echo " $(GREEN)make down$(RESET) - Остановить все контейнеры" + @echo " $(GREEN)make restart$(RESET) - Перезапустить контейнеры" + @echo " $(GREEN)make logs$(RESET) - Логи всех сервисов (следить в реальном времени)" + @echo " $(GREEN)make logs-app$(RESET) - Логи веб-приложения Nuxt" + @echo " $(GREEN)make logs-db$(RESET) - Логи базы данных PostgreSQL" + @echo " $(GREEN)make ps$(RESET) - Список работающих контейнеров и портов" + @echo " $(GREEN)make db-push$(RESET) - Применить схему Prisma к локальной БД" + @echo " $(GREEN)make db-shell$(RESET) - Войти в консоль psql базы данных" + @echo " $(GREEN)make clean$(RESET) - Остановить стек и удалить тома с данными (очистка)" + @echo " $(GREEN)make install-docker$(RESET) - Команда для установки Docker и Compose на Ubuntu/Debian" + +up: + docker compose up -d --build + +db: + docker compose up -d db redis + @echo "$(GREEN)PostgreSQL (порт 5432) и Redis (порт 6379) готовы к работе!$(RESET)" + +dev: db + @echo "$(CYAN)Применяем схему Prisma...$(RESET)" + DATABASE_URL="postgresql://xflow:xflow_pass@localhost:5432/xflow" npm --prefix apps/web run prisma db push || true + @echo "$(GREEN)Запускаем Nuxt Dev Server...$(RESET)" + DATABASE_URL="postgresql://xflow:xflow_pass@localhost:5432/xflow" npm --prefix apps/web run dev + +down: + docker compose down + +restart: + docker compose restart + +logs: + docker compose logs -f + +logs-app: + docker compose logs -f app + +logs-db: + docker compose logs -f db + +ps: + docker compose ps + +db-push: + DATABASE_URL="postgresql://xflow:xflow_pass@localhost:5432/xflow" npx --prefix apps/web prisma db push + +db-shell: + docker compose exec db psql -U xflow -d xflow + +clean: + docker compose down -v --remove-orphans + +install-docker: + @echo "$(CYAN)Для установки Docker на вашей Linux системе выполните:$(RESET)" + @echo "sudo apt-get update && sudo apt-get install -y docker.io docker-compose-v2" + @echo "sudo usermod -aG docker $$USER" + @echo "$(CYAN)После этого перезайдите в сессию (newgrp docker или перелогиньтесь).$(RESET)" diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..33391e0 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,74 @@ +version: '3.8' + +services: + app: + container_name: xflow-app + build: + context: . + dockerfile: Dockerfile.coolify + args: + SITE_URL: http://localhost:3000 + DATABASE_URL: postgresql://xflow:xflow_pass@db:5432/xflow + REDIS_URL: redis://redis:6379 + JWT_SECRET: dev-super-secret-jwt-key + ports: + - "3000:3000" + environment: + NODE_ENV: development + HOST: "0.0.0.0" + PORT: "3000" + DATABASE_URL: postgresql://xflow:xflow_pass@db:5432/xflow + NUXT_DATABASE_URL: postgresql://xflow:xflow_pass@db:5432/xflow + REDIS_URL: redis://redis:6379 + NUXT_REDIS_URL: redis://redis:6379 + JWT_SECRET: dev-super-secret-jwt-key + NUXT_JWT_SECRET: dev-super-secret-jwt-key + SITE_URL: http://localhost:3000 + depends_on: + db: + condition: service_healthy + redis: + condition: service_started + restart: unless-stopped + networks: + - xflow-network + + db: + container_name: xflow-db + image: postgres:16-alpine + restart: unless-stopped + ports: + - "5432:5432" + environment: + POSTGRES_USER: xflow + POSTGRES_PASSWORD: xflow_pass + POSTGRES_DB: xflow + volumes: + - xflow-local-pgdata:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U xflow -d xflow"] + interval: 3s + timeout: 3s + retries: 5 + networks: + - xflow-network + + redis: + container_name: xflow-redis + image: redis:7.2-alpine + restart: unless-stopped + ports: + - "6379:6379" + command: redis-server --appendonly yes + volumes: + - xflow-local-redisdata:/data + networks: + - xflow-network + +volumes: + xflow-local-pgdata: + xflow-local-redisdata: + +networks: + xflow-network: + driver: bridge