docker-compose.yml 5.3 KB

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