feat(docker): add local docker-compose stack and Makefile for full stack management
This commit is contained in:
@@ -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)"
|
||||||
@@ -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
|
||||||
Reference in New Issue
Block a user