services: app: container_name: itinova-podcasts build: context: ./src dockerfile: ../Dockerfile restart: unless-stopped environment: - NODE_ENV=production - PORT=3000 - DATABASE_URL=mysql://podcasts_user:PodcastsDB2026Secure!@podcasts-db:3306/itinova_podcasts - JWT_SECRET=podcasts-jwt-secret-2026-prod depends_on: podcasts-db: condition: service_healthy networks: - web labels: - "traefik.enable=true" - "traefik.http.routers.podcasts.rule=Host(`podcasts.santinova-soft.org`)" - "traefik.http.routers.podcasts.entrypoints=websecure" - "traefik.http.routers.podcasts.tls=true" - "traefik.http.routers.podcasts.tls.certresolver=letsencrypt" - "traefik.http.services.podcasts.loadbalancer.server.port=3000" - "traefik.docker.network=web" podcasts-db: container_name: podcasts-db image: mysql:8.0 restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD=PodcastsRootDB2026! - MYSQL_DATABASE=itinova_podcasts - MYSQL_USER=podcasts_user - MYSQL_PASSWORD=PodcastsDB2026Secure! volumes: - podcasts-db-data:/var/lib/mysql networks: - web healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pPodcastsRootDB2026!"] interval: 10s timeout: 5s retries: 5 networks: web: external: true volumes: podcasts-db-data: