91 lines
3.5 KiB
YAML
91 lines
3.5 KiB
YAML
services:
|
|
# ── Backend: API Principal (Express + BullMQ) ───────────────────────────
|
|
backend:
|
|
build:
|
|
context: ./backend
|
|
dockerfile: ../infra/backend.Dockerfile
|
|
container_name: mercado-backend-prod
|
|
restart: unless-stopped
|
|
env_file: .env
|
|
environment:
|
|
- PORT=4001
|
|
- REDIS_HOST=mercado-redis
|
|
- NODE_ENV=production
|
|
volumes:
|
|
- ./backend:/app
|
|
- /app/node_modules
|
|
networks:
|
|
- web
|
|
- internal
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.mercado-api.rule=Host(`mercado.clube67.com`) && PathPrefix(`/api`)"
|
|
- "traefik.http.routers.mercado-api.entrypoints=websecure"
|
|
- "traefik.http.routers.mercado-api.tls.certresolver=letsencrypt"
|
|
- "traefik.http.services.mercado-api.loadbalancer.server.port=4001"
|
|
|
|
# ── Redis: Para Filas e Cache ───────────────────────────────────────────
|
|
redis:
|
|
image: redis:alpine
|
|
container_name: mercado-redis
|
|
restart: unless-stopped
|
|
networks:
|
|
- internal
|
|
|
|
# ── Frontend: App Cliente (Vite/React) ──────────────────────────────────
|
|
frontend-customer:
|
|
image: nginx:alpine
|
|
container_name: mercado-customer-prod
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./frontend/customer/dist:/usr/share/nginx/html
|
|
- ./infra/nginx.conf:/etc/nginx/conf.d/default.conf:ro
|
|
networks:
|
|
- web
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.mercado-customer.rule=Host(`mercado.clube67.com`)"
|
|
- "traefik.http.routers.mercado-customer.entrypoints=websecure"
|
|
- "traefik.http.routers.mercado-customer.tls.certresolver=letsencrypt"
|
|
- "traefik.http.services.mercado-customer.loadbalancer.server.port=80"
|
|
|
|
# ── Frontend: Admin (Gestão Tenancy) ────────────────────────────────────
|
|
frontend-admin:
|
|
image: nginx:alpine
|
|
container_name: mercado-admin-prod
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./frontend/admin/dist:/usr/share/nginx/html
|
|
- ./infra/nginx.conf:/etc/nginx/conf.d/default.conf:ro
|
|
networks:
|
|
- web
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.mercado-admin.rule=Host(`admin-mercado.clube67.com`)"
|
|
- "traefik.http.routers.mercado-admin.entrypoints=websecure"
|
|
- "traefik.http.routers.mercado-admin.tls.certresolver=letsencrypt"
|
|
- "traefik.http.services.mercado-admin.loadbalancer.server.port=80"
|
|
|
|
# ── Frontend: SuperAdmin ────────────────────────────────────────────────
|
|
frontend-superadmin:
|
|
image: nginx:alpine
|
|
container_name: mercado-superadmin-prod
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./frontend/superadmin/dist:/usr/share/nginx/html
|
|
- ./infra/nginx.conf:/etc/nginx/conf.d/default.conf:ro
|
|
networks:
|
|
- web
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.mercado-superadmin.rule=Host(`superadmin-mercado.clube67.com`)"
|
|
- "traefik.http.routers.mercado-superadmin.entrypoints=websecure"
|
|
- "traefik.http.routers.mercado-superadmin.tls.certresolver=letsencrypt"
|
|
- "traefik.http.services.mercado-superadmin.loadbalancer.server.port=80"
|
|
|
|
networks:
|
|
web:
|
|
external: true
|
|
internal:
|
|
driver: bridge
|