diff --git a/docker-compose.yml b/docker-compose.yml index d38db2c..413a808 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,71 @@ -# OPCIONAL — solo si NO tienes Postgres/Redis en Coolify. -# Si ya usas BD/Redis en Coolify, configura DATABASE_URL y REDIS_URL en .env y no levantes esto. +# Desarrollo local — Moraworld Imports +# Por defecto levanta SOLO api + web (para que Coolify funcione out-of-the-box). +# Para BD/Redis/MinIO locales: docker compose --profile storage up -d # -# Uso: pnpm docker:up -# Apps api/web se despliegan en Coolify con docs/COOLIFY.md +# Uso: +# pnpm docker:up # api + web (producción local) +# pnpm docker:up --profile storage # + postgres + redis + minio services: + api: + build: + context: . + dockerfile: apps/api/Dockerfile + container_name: moraworld-api + restart: unless-stopped + ports: + - "3001:3001" + environment: + - NODE_ENV=production + - PORT=3001 + - DATABASE_URL=${DATABASE_URL} + - REDIS_URL=${REDIS_URL} + - JWT_SECRET=${JWT_SECRET} + - JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET} + - AUDIT_HMAC_SECRET=${AUDIT_HMAC_SECRET} + - CORS_ORIGINS=${CORS_ORIGINS} + - S3_ENDPOINT=${S3_ENDPOINT} + - S3_ACCESS_KEY=${S3_ACCESS_KEY} + - S3_SECRET_KEY=${S3_SECRET_KEY} + - S3_BUCKET=${S3_BUCKET} + - S3_REGION=${S3_REGION} + - S3_PUBLIC_URL=${S3_PUBLIC_URL} + - STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET} + healthcheck: + test: ["CMD", "wget", "-qO-", "http://localhost:3001/api/health"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 15s + networks: + - moraworld-network + depends_on: + - postgres + - redis + + web: + build: + context: . + dockerfile: apps/web/Dockerfile + container_name: moraworld-web + restart: unless-stopped + ports: + - "3000:3000" + environment: + - NODE_ENV=production + - PORT=3000 + - NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL} + - NEXT_PUBLIC_WS_URL=${NEXT_PUBLIC_WS_URL} + healthcheck: + test: ["CMD", "wget", "-qO-", "http://localhost:3000/status"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 15s + networks: + - moraworld-network + + # ─── Perfil "storage": BD, Redis, MinIO (solo desarrollo local) ─── postgres: image: postgres:16-alpine container_name: moraworld-postgres @@ -22,6 +83,8 @@ services: interval: 5s timeout: 5s retries: 5 + profiles: + - storage redis: image: redis:7-alpine @@ -36,8 +99,9 @@ services: interval: 5s timeout: 3s retries: 5 + profiles: + - storage - # Almacenamiento compatible S3 (facturas/fotos — Fase 1+) minio: image: minio/minio:latest container_name: moraworld-minio @@ -58,3 +122,8 @@ volumes: moraworld_pg_data: moraworld_redis_data: moraworld_minio_data: + +networks: + moraworld-network: + driver: bridge + name: moraworld-network \ No newline at end of file diff --git a/package.json b/package.json index b0715f1..9010e9f 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "db:seed": "pnpm --filter @moraworld/database seed", "db:studio": "pnpm --filter @moraworld/database studio", "docker:up": "docker compose up -d", + "docker:up:storage": "docker compose --profile storage up -d", "docker:down": "docker compose down", "docker:logs": "docker compose logs -f" },