docker-compose.yml 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. services:
  2. app_transport_front:
  3. build:
  4. context: ./app_transport_front
  5. dockerfile: Dockerfile
  6. container_name: vue_frontend
  7. volumes:
  8. - ./app_transport_front:/app
  9. - vue_node_modules:/app/node_modules
  10. ports:
  11. - "5174:5173"
  12. environment:
  13. - VITE_API_URL=http://localhost:3000
  14. networks:
  15. - gogs-network
  16. labels:
  17. - "traefik.enable=true"
  18. - "traefik.http.routers.vue_frontend.rule=Host(`vue_frontend.localhost`)" # Remplace par ton domaine
  19. - "traefik.http.services.vue_frontend.loadbalancer.server.port=5173" # Port du frontend
  20. - "traefik.http.routers.vue_frontend.entrypoints=vue_frontend"
  21. redis:
  22. image: redis:7
  23. container_name: redis_cache
  24. ports:
  25. - "6379:6379"
  26. networks:
  27. - gogs-network
  28. traefik:
  29. image: traefik:v2.10
  30. container_name: traefik
  31. restart: always
  32. command:
  33. - "--api.insecure=true"
  34. - "--providers.docker=true"
  35. - "--entrypoints.web.address=:80"
  36. - "--entrypoints.websecure.address=:443"
  37. - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
  38. - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
  39. - "--certificatesresolvers.myresolver.acme.email=brin.amonkonan@gmail.com"
  40. - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
  41. ports:
  42. - "80:80"
  43. - "443:443"
  44. - "8082:8080"
  45. volumes:
  46. - "/var/run/docker.sock:/var/run/docker.sock:ro"
  47. - "./letsencrypt:/letsencrypt"
  48. networks:
  49. - gogs-network
  50. mysql:
  51. image: mysql:5.7
  52. container_name: mysql
  53. restart: always
  54. environment:
  55. MYSQL_ROOT_PASSWORD: rootpassword
  56. MYSQL_DATABASE: transport
  57. MYSQL_USER: user
  58. MYSQL_PASSWORD: userpassword
  59. ports:
  60. - "3306:3306"
  61. volumes:
  62. - mysql-data:/var/lib/mysql
  63. - ./mysql-init:/docker-entrypoint-initdb.d:ro
  64. networks:
  65. - gogs-network
  66. healthcheck:
  67. test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
  68. interval: 10s
  69. retries: 5
  70. start_period: 30s
  71. node_app:
  72. image: node:latest
  73. restart: always
  74. container_name: node_app
  75. working_dir: /usr/src/app
  76. depends_on:
  77. mysql:
  78. condition: service_healthy
  79. environment:
  80. - DATABASE_URL=mysql://user:userpassword@mysql:3306/transport?connectTimeout=30000
  81. - MYSQL_HOST=mysql
  82. - MYSQL_PORT=3306
  83. - MYSQL_USER=user
  84. - MYSQL_PASSWORD=userpassword
  85. - MYSQL_DATABASE=transport
  86. ports:
  87. - "3001:3000"
  88. volumes:
  89. - ./node_app:/usr/src/app
  90. - node_app_node_modules:/usr/src/app/node_modules
  91. command: ["npm", "run", "start"]
  92. networks:
  93. - gogs-network
  94. labels:
  95. - com.host.description=label
  96. - "traefik.enable=true"
  97. - "traefik.http.routers.node_app.rule=Host(`localhost`)" # Remplace par ton domaine API
  98. - "traefik.http.services.node_app.loadbalancer.server.port=3000" # Port de l'API
  99. - "traefik.http.routers.node_app.entrypoints=node_app"
  100. sonarqube:
  101. image: sonarqube:lts
  102. container_name: sonarqube
  103. restart: always
  104. depends_on:
  105. sonarqube_db:
  106. condition: service_healthy
  107. environment:
  108. - SONAR_JDBC_URL=jdbc:postgresql://sonarqube_db:5432/sonarqube
  109. - SONAR_JDBC_USERNAME=sonar
  110. - SONAR_JDBC_PASSWORD=sonarpassword
  111. ports:
  112. - "9000:9000"
  113. volumes:
  114. - sonarqube_data:/opt/sonarqube/data
  115. - sonarqube_extensions:/opt/sonarqube/extensions
  116. - sonarqube_logs:/opt/sonarqube/logs
  117. networks:
  118. - sonarnet
  119. labels:
  120. - "traefik.enable=true"
  121. - "traefik.http.routers.sonarqube.rule=Host(`localhost`)" # Remplace par ton domaine pour SonarQube
  122. - "traefik.http.services.sonarqube.loadbalancer.server.port=9000" # Port de SonarQube
  123. - "traefik.http.routers.sonarqube.entrypoints=web"
  124. sonarqube_db:
  125. image: postgres:13
  126. container_name: sonarqube_db
  127. restart: always
  128. environment:
  129. POSTGRES_USER: sonar
  130. POSTGRES_PASSWORD: sonarpassword
  131. POSTGRES_DB: sonarqube
  132. ports:
  133. - "5432:5432"
  134. volumes:
  135. - postgresql-data:/var/lib/postgresql/data
  136. - ./postgres-init.sql:/docker-entrypoint-initdb.d/init.sql
  137. networks:
  138. - sonarnet
  139. healthcheck:
  140. test: ["CMD-SHELL", "pg_isready -U sonar"]
  141. interval: 10s
  142. retries: 5
  143. start_period: 30s
  144. gogs:
  145. image: gogs/gogs:0.12.10
  146. container_name: gogs_server
  147. restart: always
  148. ports:
  149. - "3000:3000"
  150. - "10022:22"
  151. depends_on:
  152. mysql:
  153. condition: service_healthy
  154. sonarqube_db:
  155. condition: service_healthy
  156. volumes:
  157. - gogs_data:/data
  158. networks:
  159. - gogs-network
  160. - sonarnet
  161. labels:
  162. - com.host.description=label
  163. - "traefik.enable=true"
  164. - "traefik.http.routers.gogs.rule=Host(`localhost`)" # Remplace par ton domaine pour Gogs
  165. - "traefik.http.services.gogs.loadbalancer.server.port=3000" # Port de Gogs
  166. - "traefik.http.routers.gogs.entrypoints=web"
  167. prometheus:
  168. image: prom/prometheus:v2.46.0
  169. container_name: prometheus_server
  170. volumes:
  171. - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
  172. ports:
  173. - "9090:9090"
  174. networks:
  175. - monitoring
  176. labels:
  177. - com.host.description=label
  178. - "traefik.enable=true"
  179. - "traefik.http.routers.prometheus.rule=Host(`prometheus.example.com`)" # Remplace par ton domaine pour prometheus
  180. - "traefik.http.services.prometheus.loadbalancer.server.port=3000" # Port de prometheus
  181. - "traefik.http.routers.prometheus.entrypoints=prometheus"
  182. grafana:
  183. image: grafana/grafana:10.1.1
  184. container_name: grafana_server
  185. environment:
  186. - GF_SECURITY_ADMIN_USER=admin
  187. - GF_SECURITY_ADMIN_PASSWORD=admin
  188. ports:
  189. - "3003:3000"
  190. depends_on:
  191. - prometheus
  192. volumes:
  193. - grafana_data:/var/lib/grafana
  194. networks:
  195. - monitoring
  196. node-exporter:
  197. image: prom/node-exporter:latest
  198. container_name: node_exporter
  199. ports:
  200. - "9100:9100"
  201. networks:
  202. - monitoring
  203. jenkins:
  204. image: jenkins/jenkins:lts
  205. container_name: jenkins_server
  206. user: root
  207. ports:
  208. - "8081:8080"
  209. - "50000:50000"
  210. volumes:
  211. - jenkins_home:/var/jenkins_home
  212. - /var/run/docker.sock:/var/run/docker.sock
  213. networks:
  214. - gogs-network
  215. networks:
  216. monitoring:
  217. driver: bridge
  218. gogs-network:
  219. driver: bridge
  220. sonarnet:
  221. driver: bridge
  222. volumes:
  223. mysql-data:
  224. postgresql-data:
  225. grafana_data:
  226. jenkins_home:
  227. gogs_data:
  228. vue_node_modules:
  229. node_app_node_modules:
  230. sonarqube_data:
  231. sonarqube_extensions:
  232. sonarqube_logs: