docker-compose.yml 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  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:latest
  50. container_name: node_server
  51. working_dir: /usr/src/app
  52. environment:
  53. - NODE_ENV=development
  54. ports:
  55. - "3000:3000"
  56. volumes:
  57. - ./node_app:/usr/src/app
  58. - /app/node_modules
  59. command: ["npm", "run", "start"]
  60. # Serveur PHP
  61. app:
  62. image: php:7.4-fpm
  63. container_name: php_server
  64. volumes:
  65. - ./html:/var/www/html
  66. depends_on:
  67. - postgresql
  68. postgresql:
  69. image: postgres:13
  70. container_name: sonarqube_db
  71. restart: always
  72. environment:
  73. POSTGRES_USER: sonar
  74. POSTGRES_PASSWORD: sonar_pass
  75. POSTGRES_DB: sonarqube
  76. volumes:
  77. - postgresql-data:/var/lib/postgresql/data
  78. networks:
  79. - sonarnet
  80. # Serveur MySQL
  81. mysql:
  82. image: mysql:5.7
  83. container_name: mysql_gogos
  84. environment:
  85. MYSQL_ROOT_PASSWORD: rootpassword
  86. MYSQL_DATABASE: mydb
  87. MYSQL_USER: user
  88. MYSQL_PASSWORD: userpassword
  89. ports:
  90. - "3306:3306"
  91. volumes:
  92. - db_data:/var/lib/mysql
  93. networks:
  94. - gogs-network
  95. # Serveur Git auto-hébergé Gogs
  96. gogs:
  97. image: gogs/gogs:0.12.10
  98. container_name: gogs_server
  99. restart: always
  100. ports:
  101. - "3002:3000"
  102. - "10022:22"
  103. depends_on:
  104. - mysql
  105. - postgresql
  106. volumes:
  107. - gogs_data:/data
  108. networks:
  109. - gogs-network
  110. - sonarnet
  111. # Serveur de monitoring Prometheus
  112. prometheus:
  113. image: prom/prometheus:v2.46.0
  114. container_name: prometheus_server
  115. volumes:
  116. - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
  117. ports:
  118. - "9090:9090"
  119. networks:
  120. - monitoring
  121. # Serveur de monitoring Grafana
  122. grafana:
  123. image: grafana/grafana:10.1.1
  124. container_name: grafana_server
  125. environment:
  126. - GF_SECURITY_ADMIN_USER=admin
  127. - GF_SECURITY_ADMIN_PASSWORD=admin
  128. ports:
  129. - "3001:3000"
  130. depends_on:
  131. - prometheus
  132. volumes:
  133. - grafana_data:/var/lib/grafana
  134. networks:
  135. - monitoring
  136. #Le service node-exporter est utilisé pour collecter des métriques système sur la machine hôte et les exposer à Prometheus
  137. node-exporter:
  138. image: prom/node-exporter:latest
  139. container_name: node_exporter
  140. ports:
  141. - "9100:9100"
  142. networks:
  143. - monitoring
  144. # Serveur CI/CD Jenkins
  145. jenkins:
  146. image: jenkins/jenkins:lts
  147. container_name: jenkins_server
  148. user: root
  149. ports:
  150. - "8081:8080"
  151. - "50000:50000"
  152. volumes:
  153. - jenkins_home:/var/jenkins_home
  154. # Serveur de qualité de code SonarQube
  155. sonarqube:
  156. image: sonarqube:lts-community
  157. container_name: sonarqube_server
  158. restart: always
  159. depends_on:
  160. - postgresql
  161. ports:
  162. - "9000:9000"
  163. environment:
  164. SONAR_ES_BOOTSTRAP_CHECKS_DISABLE: "true"
  165. SONAR_JDBC_URL: jdbc:postgresql://postgresql:5432/sonarqube
  166. SONAR_JDBC_USERNAME: user
  167. SONAR_JDBC_PASSWORD: user
  168. volumes:
  169. - sonarqube_data:/opt/sonarqube/data
  170. - sonarqube_extensions:/opt/sonarqube/extensions
  171. - sonarqube_logs:/opt/sonarqube/logs
  172. networks:
  173. - sonarnet
  174. networks:
  175. monitoring:
  176. gogs-network:
  177. driver: bridge
  178. sonarnet:
  179. driver: bridge
  180. volumes:
  181. postgresql-data:
  182. db_data:
  183. grafana_data:
  184. sonarqube_data:
  185. sonarqube_extensions:
  186. sonarqube_logs:
  187. jenkins_home:
  188. gogs_data: