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