microtecflix/docker-stack.yml

124 lines
4.8 KiB
YAML

version: '3.8'
services:
# =============================================================
# POSTGRESQL — Banco de Dados do MicrotecFlix (Dedicado)
# =============================================================
postgres-microtecflix:
image: postgres:16-alpine
restart: always
environment:
POSTGRES_DB: microtecflix
POSTGRES_USER: microtecflix_user
POSTGRES_PASSWORD: MicrotecFlixSecurePass2026!
ports:
- "5435:5432" # Porta 5435 para evitar conflitos com outros Postgres (ex: AgendaPRO 5432)
volumes:
- pgdata-microtecflix:/var/lib/postgresql/data
networks:
- microtecflix-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U microtecflix_user -d microtecflix"]
interval: 10s
timeout: 5s
retries: 5
deploy:
replicas: 1
restart_policy:
condition: on-failure
# =============================================================
# MICROTECFLIX WEB APP — Plataforma de Cursos (Aluno + Admin)
# =============================================================
microtecflix:
image: microtecflix-app:local
restart: always
depends_on:
- postgres-microtecflix
environment:
- NODE_ENV=production
- PORT=3000
- DATABASE_URL=postgresql://microtecflix_user:MicrotecFlixSecurePass2026!@postgres-microtecflix:5432/microtecflix
- JWT_SECRET=microtecflix_jwt_secret_key_2026_super_secure
- ASAAS_ENVIRONMENT=sandbox
volumes:
- appdata-microtecflix:/app/data
networks:
- microtecflix-net
- network_public
deploy:
replicas: 1
update_config:
parallelism: 1
delay: 10s
order: start-first
restart_policy:
condition: on-failure
max_attempts: 3
labels:
- "traefik.enable=true"
# Painel do Aluno
- "traefik.http.routers.microtecflix-student.rule=Host(`estudo.microtecinformaticacurso.com.br`)"
- "traefik.http.routers.microtecflix-student.entrypoints=websecure"
- "traefik.http.routers.microtecflix-student.tls=true"
- "traefik.http.routers.microtecflix-student.tls.certresolver=leresolver"
- "traefik.http.routers.microtecflix-student.service=microtecflix-student"
- "traefik.http.services.microtecflix-student.loadbalancer.server.port=3000"
# Painel Admin
- "traefik.http.routers.microtecflix-admin.rule=Host(`admin-estudo.microtecinformaticacurso.com.br`)"
- "traefik.http.routers.microtecflix-admin.entrypoints=websecure"
- "traefik.http.routers.microtecflix-admin.tls=true"
- "traefik.http.routers.microtecflix-admin.tls.certresolver=leresolver"
- "traefik.http.routers.microtecflix-admin.service=microtecflix-admin"
- "traefik.http.services.microtecflix-admin.loadbalancer.server.port=3000"
- "traefik.docker.network=network_public"
# =============================================================
# MINIO S3 — Storage de Arquivos e Mídias (Fotos/Imagens)
# =============================================================
minio-microtecflix:
image: minio/minio:latest
restart: always
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: microtecflix_admin
MINIO_ROOT_PASSWORD: MicrotecFlixS3SecurePass2026!
MINIO_BROWSER_REDIRECT_URL: https://minio-estudo.microtecinformaticacurso.com.br
volumes:
- miniodata-microtecflix:/data
networks:
- microtecflix-net
- network_public
deploy:
replicas: 1
restart_policy:
condition: on-failure
labels:
- "traefik.enable=true"
# Rota para a API do S3 (Acesso aos arquivos/bucket público)
- "traefik.http.routers.minio-s3.rule=Host(`s3-estudo.microtecinformaticacurso.com.br`)"
- "traefik.http.routers.minio-s3.entrypoints=websecure"
- "traefik.http.routers.minio-s3.tls=true"
- "traefik.http.routers.minio-s3.tls.certresolver=leresolver"
- "traefik.http.routers.minio-s3.service=minio-s3"
- "traefik.http.services.minio-s3.loadbalancer.server.port=9000"
# Rota para o Painel Web do MinIO
- "traefik.http.routers.minio-console.rule=Host(`minio-estudo.microtecinformaticacurso.com.br`)"
- "traefik.http.routers.minio-console.entrypoints=websecure"
- "traefik.http.routers.minio-console.tls=true"
- "traefik.http.routers.minio-console.tls.certresolver=leresolver"
- "traefik.http.routers.minio-console.service=minio-console"
- "traefik.http.services.minio-console.loadbalancer.server.port=9001"
- "traefik.docker.network=network_public"
volumes:
pgdata-microtecflix:
appdata-microtecflix:
miniodata-microtecflix:
networks:
microtecflix-net:
driver: overlay
network_public:
external: true