| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- 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:
|