docker-compose.yml 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. version: '3.8'
  2. services:
  3. # Serveur Redis
  4. cache:
  5. image: redis:7
  6. container_name: redis_cache
  7. ports:
  8. - "6379:6379"
  9. # Serveur Proxy inverse Traefik
  10. traefik:
  11. image: traefik:v2.10
  12. container_name: traefik
  13. restart: always
  14. command:
  15. - "--api.insecure=true" # Ne pas utiliser en production sans sécurisation
  16. - "--providers.docker=true"
  17. - "--entrypoints.web.address=:80"
  18. - "--entrypoints.websecure.address=:443"
  19. - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
  20. - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
  21. - "--certificatesresolvers.myresolver.acme.email=brin.amonkonan@gmail.com"
  22. - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
  23. ports:
  24. - "80:80"
  25. - "443:443"
  26. - "8082:8080"
  27. volumes:
  28. - "/var/run/docker.sock:/var/run/docker.sock:ro"
  29. - "./letsencrypt:/letsencrypt"
  30. # Serveur Web Nginx
  31. web:
  32. image: nginx:1.25
  33. container_name: nginx_server
  34. volumes:
  35. - ./html:/usr/share/nginx/html:ro
  36. depends_on:
  37. - node_app
  38. - app
  39. labels:
  40. - "traefik.enable=true"
  41. - "traefik.http.routers.nginx.rule=Host(`nginx.localhost`)"
  42. - "traefik.http.routers.nginx.entrypoints=web"
  43. - "traefik.http.routers.nginx-secure.rule=Host(`nginx.localhost`)"
  44. - "traefik.http.routers.nginx-secure.entrypoints=websecure"
  45. - "traefik.http.routers.nginx-secure.tls=true"
  46. - "traefik.http.routers.nginx-secure.tls.certresolver=myresolver"
  47. # Serveur Web Node.js
  48. node_app:
  49. image: node:18
  50. container_name: node_server
  51. working_dir: /usr/src/app
  52. labels:
  53. - "traefik.enable=true"
  54. - "traefik.http.routers.nodeapp.rule=Host(`nodeapp.localhost`)"
  55. - "traefik.http.routers.nodeapp.entrypoints=web"
  56. - "traefik.http.routers.nodeapp-secure.rule=Host(`nodeapp.localhost`)"
  57. - "traefik.http.routers.nodeapp-secure.entrypoints=websecure"
  58. - "traefik.http.routers.nodeapp-secure.tls=true"
  59. - "traefik.http.routers.nodeapp-secure.tls.certresolver=myresolver"
  60. - "traefik.http.services.nodeapp.loadbalancer.server.port=3000"
  61. volumes:
  62. - ./node_app:/usr/src/app:delegated
  63. command: ["sh", "-c", "npm install && npm start"]
  64. # Serveur PHP
  65. app:
  66. image: php:7.4-fpm
  67. container_name: php_server
  68. volumes:
  69. - ./html:/var/www/html
  70. depends_on:
  71. - postgresql
  72. postgresql:
  73. image: postgres:13
  74. container_name: sonarqube_db
  75. restart: always
  76. environment:
  77. POSTGRES_USER: sonar
  78. POSTGRES_PASSWORD: sonar_pass
  79. POSTGRES_DB: sonarqube
  80. volumes:
  81. - postgresql-data:/var/lib/postgresql/data
  82. networks:
  83. - sonarnet
  84. # Serveur MySQL
  85. mysql:
  86. image: mysql:5.7
  87. container_name: mysql_gogos
  88. environment:
  89. MYSQL_ROOT_PASSWORD: rootpassword
  90. MYSQL_DATABASE: mydb
  91. MYSQL_USER: user
  92. MYSQL_PASSWORD: userpassword
  93. ports:
  94. - "3306:3306"
  95. volumes:
  96. - db_data:/var/lib/mysql
  97. networks:
  98. - gogs-network
  99. # Serveur Git auto-hébergé Gogs
  100. gogs:
  101. image: gogs/gogs:0.12.10
  102. container_name: gogs_server
  103. restart: always
  104. ports:
  105. - "3002:3000"
  106. - "10022:22"
  107. depends_on:
  108. - mysql
  109. - postgresql
  110. volumes:
  111. - gogs_data:/data
  112. networks:
  113. - gogs-network
  114. - sonarnet
  115. # Serveur de monitoring Prometheus
  116. prometheus:
  117. image: prom/prometheus:v2.46.0
  118. container_name: prometheus_server
  119. volumes:
  120. - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
  121. ports:
  122. - "9090:9090"
  123. networks:
  124. - monitoring
  125. # Serveur de monitoring Grafana
  126. grafana:
  127. image: grafana/grafana:10.1.1
  128. container_name: grafana_server
  129. environment:
  130. - GF_SECURITY_ADMIN_USER=admin
  131. - GF_SECURITY_ADMIN_PASSWORD=admin
  132. ports:
  133. - "3001:3000"
  134. depends_on:
  135. - prometheus
  136. volumes:
  137. - grafana_data:/var/lib/grafana
  138. networks:
  139. - monitoring
  140. #Le service node-exporter est utilisé pour collecter des métriques système sur la machine hôte et les exposer à Prometheus
  141. node-exporter:
  142. image: prom/node-exporter:latest
  143. container_name: node_exporter
  144. ports:
  145. - "9100:9100"
  146. networks:
  147. - monitoring
  148. # Serveur CI/CD Jenkins
  149. jenkins:
  150. image: jenkins/jenkins:lts
  151. container_name: jenkins_server
  152. user: root
  153. ports:
  154. - "8081:8080"
  155. - "50000:50000"
  156. volumes:
  157. - jenkins_home:/var/jenkins_home
  158. # Serveur de qualité de code SonarQube
  159. sonarqube:
  160. image: sonarqube:lts-community
  161. container_name: sonarqube_server
  162. restart: always
  163. depends_on:
  164. - postgresql
  165. ports:
  166. - "9000:9000"
  167. environment:
  168. SONAR_ES_BOOTSTRAP_CHECKS_DISABLE: "true"
  169. SONAR_JDBC_URL: jdbc:postgresql://postgresql:5432/sonarqube
  170. SONAR_JDBC_USERNAME: user
  171. SONAR_JDBC_PASSWORD: user
  172. volumes:
  173. - sonarqube_data:/opt/sonarqube/data
  174. - sonarqube_extensions:/opt/sonarqube/extensions
  175. - sonarqube_logs:/opt/sonarqube/logs
  176. networks:
  177. - sonarnet
  178. networks:
  179. monitoring:
  180. gogs-network:
  181. driver: bridge
  182. sonarnet:
  183. driver: bridge
  184. volumes:
  185. postgresql-data:
  186. db_data:
  187. grafana_data:
  188. sonarqube_data:
  189. sonarqube_extensions:
  190. sonarqube_logs:
  191. jenkins_home:
  192. gogs_data: