docker-compose.yml 5.0 KB

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