version: '3.8' services: # Serveur Redis cache: image: redis:7 container_name: redis_cache ports: - "6379:6379" # Serveur Proxy inverse Traefik traefik: image: traefik:v2.10 container_name: traefik restart: always command: - "--api.insecure=true" # Ne pas utiliser en production sans sécurisation - "--providers.docker=true" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--certificatesresolvers.myresolver.acme.httpchallenge=true" - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web" - "--certificatesresolvers.myresolver.acme.email=brin.amonkonan@gmail.com" - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" - "8082:8080" volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" - "./letsencrypt:/letsencrypt" mysql: image: mysql:5.7 container_name: mysql restart: always environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: transport MYSQL_USER: user MYSQL_PASSWORD: userpassword ports: - "3306:3306" volumes: - ./mysql-data:/var/lib/mysql - ./mysql-init:/docker-entrypoint-initdb.d - db_data:/var/lib/mysql networks: - gogs-network # Serveur Web Nginx # web: # image: nginx:1.25 # container_name: nginx_server #volumes: # - ./html:/usr/share/nginx/html:ro # depends_on: # - node_app # - app # labels: # - "traefik.enable=true" # - "traefik.http.routers.nginx.rule=Host(`nginx.localhost`)" # - "traefik.http.routers.nginx.entrypoints=web" # - "traefik.http.routers.nginx-secure.rule=Host(`nginx.localhost`)" # - "traefik.http.routers.nginx-secure.entrypoints=websecure" # - "traefik.http.routers.nginx-secure.tls=true" # - "traefik.http.routers.nginx-secure.tls.certresolver=myresolver" # Serveur Web Node.js node_app: image: node:latest restart: always container_name: node_app working_dir: /usr/src/app depends_on: - mysql environment: - NODE_ENV=development - DATABASE_URL=mysql://user:userpassword@mysql:3306/transport?connectTimeout=30000 - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USER=user - MYSQL_PASSWORD=userpassword - MYSQL_DATABASE=transport ports: - "3000:3000" volumes: - ./node_app:/usr/src/app - /app/node_modules command: ["npm", "run", "start"] networks: - gogs-network # Serveur PHP app: image: php:7.4-fpm container_name: php_server volumes: - ./html:/var/www/html depends_on: - postgresql postgresql: image: postgres:13 container_name: sonarqube_db restart: always environment: POSTGRES_USER: sonar POSTGRES_PASSWORD: sonar_pass POSTGRES_DB: sonarqube ports: - "5432:5432" volumes: - postgresql-data:/var/lib/postgresql/data networks: - sonarnet # Serveur Git auto-hébergé Gogs gogs: image: gogs/gogs:0.12.10 container_name: gogs_server restart: always ports: - "3002:3000" - "10022:22" depends_on: - mysql - postgresql volumes: - gogs_data:/data networks: - gogs-network - sonarnet # Serveur de monitoring Prometheus prometheus: image: prom/prometheus:v2.46.0 container_name: prometheus_server volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro ports: - "9090:9090" networks: - monitoring # Serveur de monitoring Grafana grafana: image: grafana/grafana:10.1.1 container_name: grafana_server environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin ports: - "3001:3000" depends_on: - prometheus volumes: - grafana_data:/var/lib/grafana networks: - monitoring #Le service node-exporter est utilisé pour collecter des métriques système sur la machine hôte et les exposer à Prometheus node-exporter: image: prom/node-exporter:latest container_name: node_exporter ports: - "9100:9100" networks: - monitoring # Serveur CI/CD Jenkins jenkins: image: jenkins/jenkins:lts container_name: jenkins_server user: root ports: - "8081:8080" - "50000:50000" volumes: - jenkins_home:/var/jenkins_home # Serveur de qualité de code SonarQube #sonarqube: #image: sonarqube:lts-community #container_name: sonarqube_server #restart: always #depends_on: # - postgresql #ports: # - "9000:9000" #environment: #SONAR_ES_BOOTSTRAP_CHECKS_DISABLE: "true" #SONAR_JDBC_URL: jdbc:postgresql://postgresql:5432/sonarqube #SONAR_JDBC_USERNAME: user #SONAR_JDBC_PASSWORD: user #volumes: # - sonarqube_data:/opt/sonarqube/data # - sonarqube_extensions:/opt/sonarqube/extensions # - sonarqube_logs:/opt/sonarqube/logs #networks: # - sonarnet networks: monitoring: gogs-network: driver: bridge sonarnet: driver: bridge volumes: postgresql-data: db_data: grafana_data: sonarqube_data: sonarqube_extensions: sonarqube_logs: jenkins_home: gogs_data: