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" # 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:18 container_name: node_server working_dir: /usr/src/app labels: - "traefik.enable=true" - "traefik.http.routers.nodeapp.rule=Host(`nodeapp.localhost`)" - "traefik.http.routers.nodeapp.entrypoints=web" - "traefik.http.routers.nodeapp-secure.rule=Host(`nodeapp.localhost`)" - "traefik.http.routers.nodeapp-secure.entrypoints=websecure" - "traefik.http.routers.nodeapp-secure.tls=true" - "traefik.http.routers.nodeapp-secure.tls.certresolver=myresolver" - "traefik.http.services.nodeapp.loadbalancer.server.port=3000" volumes: - ./node_app:/usr/src/app:delegated command: ["sh", "-c", "npm install && npm start"] # 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 volumes: - postgresql-data:/var/lib/postgresql/data networks: - sonarnet # Serveur MySQL mysql: image: mysql:5.7 container_name: mysql_gogos environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: mydb MYSQL_USER: user MYSQL_PASSWORD: userpassword ports: - "3306:3306" volumes: - db_data:/var/lib/mysql networks: - gogs-network # 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: