
version: '2.0'

services:
  mysqlcontainer:
    image: mysql:5.7
    container_name: mysqlcontainer
    environment:
      MYSQL_ROOT_PASSWORD: 6EAtGAAFXXCcu
      MYSQL_DATABASE: slcmpnew
      MYSQL_USER: slc
      MYSQL_PASSWORD: 6EAtGXCcu
    ports:
      - 3307:3306
    networks:
      - networkparcours
    volumes:
      - /home/docker/mysql_data:/var/lib/mysql
    #command: --skip-networking=false --sql-mode=""
  springcontainer:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: springcontainer
    ports:
      - 8085:8085
    networks:
      - networkparcours
    environment:
      MYSQL_HOST: mysqlcontainer
      MYSQL_PORT: 3306
      MYSQL_DB_NAME: slcmpnew
      MYSQL_USER: slc
      MYSQL_PASSWORD: Q804cFrW2Eex
      SPRING_DATASOURCE_URL: jdbc:mysql://mysqlcontainer:3306/slcmpnew?createDatabaseIfNotExists=true&autoReconnect=true&allowPublicKeyRetrieval=true&useSSL=false&sessionVariables=sql_mode='NO_ENGINE_SUBSTITUTION'&jdbcCompliantTruncation=false
      SPRING_DATASOURCE_USERNAME: slc
      SPRING_DATASOURCE_PASSWORD: 6EAtGXCcu
      SPRING_DATASOURCE_INITIALIZATION_MODE: always
      SPRING_DATASOURCE_DRIVER_CLASS_NAME: com.mysql.jdbc.Driver
      SPRING_JPA_DATABASE_PLATFORM: org.hibernate.dialect.MySQL8Dialect
      SPRING_JPA_SHOW_SQL: "true"
      SPRING_JPA_HIBERNATE_DDL_AUTO: update
    depends_on:
       - mysqlcontainer
  flaskcontainer:
    build:
      context: ../Scraping
      dockerfile: Dockerfile  # Dockerfile pour Flask (comme décrit précédemment)
    container_name: flaskcontainer
    ports:
      - 5001:5001
    networks:
      - networkparcours
    environment:
      - FLASK_APP=app.py  # Nom du fichier Flask, ajustez si nécessaire
      - FLASK_ENV=production  # Mode de production pour Flask
      - CELERY_BROKER_URL=redis://rediscontainer:6379/0  # Utilisation du nom du service Redis dans Docker
      - CELERY_RESULT_BACKEND=redis://rediscontainer:6379/0  # Utilisation du nom du service Redis dans Docker
    depends_on:
      - rediscontainer  # Make sure Redis is up before Flask starts
      - seleniumcontainer  # Make sure Selenium is up before Flask starts
  rediscontainer:
    image: redis:alpine
    container_name: rediscontainer
    ports:
      - "6379:6379"  # Mappe le port 6379 du conteneur Redis à l'hôte
    networks:
      - networkparcours  # Assurez-vous que les deux services sont sur le même réseau

  seleniumcontainer:
    image: selenium/standalone-firefox:latest  # Utiliser l'image avec Firefox
    container_name: seleniumcontainer
    ports:
      - "4444:4444"  # Exposer le WebDriver sur le port 4444
    networks:
      - networkparcours  # Utiliser le même réseau que Flask, Redis et autres conteneurs
    environment:
      - SE_EVENT_BUS_THREAD=1  # Assurez-vous que le bus d'événements fonctionne dans le même thread pour de meilleures performances
    depends_on:
      - rediscontainer  # Cette option garantit que Selenium attend Redis avant de démarrer (optionnelle)
    shm_size: 2g  # Augmenter la taille de la mémoire partagée pour éviter les problèmes de mémoire
    restart: always  # Redémarre automatiquement en cas d'échec
    environment:
      - SCREEN_WIDTH=1920  # Taille d'écran pour Xvfb (Virtual Frame Buffer) si vous avez besoin de tests visuels
      - SCREEN_HEIGHT=1080
  frontcontainer:
    build:
      context: ../Front-Parcours
      dockerfile: Dockerfile
    container_name: frontcontainer
    ports:
      - 80:80
      - 443:443
    restart: always
    volumes:
      - $PWD/certbot/conf:/etc/nginx/ssl
      - $PWD/certbot/data:/usr/share/nginx/html/letsencrypt
    networks:
      - networkparcours
  certbot:
    image: certbot/certbot:latest
    #command: sh -c "trap 'exit 0' TERM && while :; do certbot renew; sleep 12h & wait $${!}; done;"
    #command: certonly --webroot --webroot-path=/usr/share/nginx/html/letsencrypt --email najia@slc-assurances.fr --agree-tos --no-eff-email --staging -d comparateur.slc-assurances.fr -d scraping.slassurances.fr
    #command: certonly --webroot --webroot-path=/usr/share/nginx/html/letsencrypt --email najia@slc-assurances.fr --agree-tos --no-eff-email --staging -d comparateur.slc-assurances.fr -d scraping.slassurances.fr
    volumes:
      - $PWD/certbot/conf:/etc/letsencrypt
      - $PWD/certbot/logs:/var/log/letsencrypt
      - $PWD/certbot/data:/usr/share/nginx/html/letsencrypt
    environment:
      - EMAIL=najia@slc-assurances.fr
    command: certonly --webroot --webroot-path=/usr/share/nginx/html/letsencrypt --email najia@slc-assurances.fr --agree-tos --no-eff-email -d scraping.slassurances.fr -d comparateur.slc-assurances.fr --non-interactive --force-renewal
    networks:
      - networkparcours
networks:
  networkparcours:  
    external: true
volumes:
  parcoursdatabase:
