docker-compose.yml 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. version: '3.8'
  2. services:
  3. keycloak:
  4. image: quay.io/keycloak/keycloak:24.0.1
  5. container_name: keycloak
  6. ports:
  7. - "8085:8080"
  8. environment:
  9. KEYCLOAK_ADMIN: admin
  10. KEYCLOAK_ADMIN_PASSWORD: admin
  11. command:
  12. - start-dev
  13. # labels:
  14. # - "traefik.enable=true"
  15. # - "traefik.http.routers.keycloak.rule=Host(`auth.mondomaine.com`)"
  16. # - "traefik.http.routers.keycloak.entrypoints=web"
  17. # - "traefik.http.services.keycloak.loadbalancer.server.port=8080"
  18. restart: unless-stopped
  19. app_transport_front:
  20. build:
  21. context: ./app_transport_front
  22. dockerfile: Dockerfile
  23. container_name: vue_frontend
  24. volumes:
  25. - ./app_transport_front:/app
  26. ports:
  27. - "5174:5173"
  28. environment:
  29. - VITE_API_URL=http://localhost:5174
  30. networks:
  31. - gogs-network
  32. # labels:
  33. # - "traefik.enable=true"
  34. # - "traefik.http.routers.vue_frontend.rule=Host(`vue_frontend.localhost`)"
  35. # - "traefik.http.services.vue_frontend.loadbalancer.server.port=5173"
  36. # - "traefik.http.routers.vue_frontend.entrypoints=web"
  37. redis:
  38. image: redis:7
  39. container_name: redis_cache
  40. ports:
  41. - "6379:6379"
  42. networks:
  43. - gogs-network
  44. # traefik:
  45. # image: traefik:v2.10
  46. # container_name: traefik
  47. # restart: always
  48. # command:
  49. # - "--api.dashboard=true"
  50. # - "--api.insecure=true"
  51. # - "--providers.docker=true"
  52. # - "--entrypoints.web.address=:80"
  53. # - "--entrypoints.websecure.address=:443"
  54. # - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
  55. # - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
  56. # - "--certificatesresolvers.myresolver.acme.email=brin.amonkonan@gmail.com"
  57. # - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
  58. # - "--log.level=DEBUG"
  59. # labels:
  60. # - com.host.description=label
  61. # # Router pour accéder au dashboard via traefik.localhost
  62. # - "traefik.enable=true"
  63. # - "traefik.http.routers.traefik.rule=Host(`localhost`)"
  64. # - "traefik.http.routers.traefik.entrypoints=web"
  65. # - "traefik.http.routers.traefik-secure.entrypoints=websecure"
  66. # - "traefik.http.routers.traefik.service=api@internal" # Utilise le service interne de Traefik
  67. # - "traefik.http.routers.traefik.middlewares=dashboard-auth" # (Optionnel) protection du dashboard
  68. # - "traefik.http.routers.traefik-secure.tls=true"
  69. # # Middleware pour protéger le dashboard avec une authentification basique (user: admin, mdp: admin)
  70. # #- "traefik.http.middlewares.dashboard-auth.basicauth.users=admin:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/"
  71. # ports:
  72. # - "80:80"
  73. # - "443:443"
  74. # volumes:
  75. # - "/var/run/docker.sock:/var/run/docker.sock:ro"
  76. # - "./letsencrypt:/letsencrypt"
  77. # networks:
  78. # - gogs-network
  79. # whoami:
  80. # image: traefik/whoami
  81. # labels:
  82. # - "traefik.enable=true"
  83. # - "traefik.http.routers.whoami.rule=Host(`localhost`)"
  84. # - "traefik.http.routers.whoami.entrypoints=web"
  85. # - "traefik.http.services.whoami.loadbalancer.server.port=80"
  86. # networks:
  87. # - gogs-network
  88. mysql:
  89. image: mysql:5.7
  90. container_name: mysql
  91. restart: always
  92. environment:
  93. MYSQL_ROOT_PASSWORD: rootpassword
  94. MYSQL_DATABASE: transport
  95. MYSQL_USER: user
  96. MYSQL_PASSWORD: userpassword
  97. ports:
  98. - "3306:3306"
  99. volumes:
  100. - mysql-data:/var/lib/mysql
  101. - ./mysql-init:/docker-entrypoint-initdb.d:ro
  102. networks:
  103. - gogs-network
  104. healthcheck:
  105. test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
  106. interval: 10s
  107. retries: 5
  108. start_period: 30s
  109. phpmyadmin:
  110. image: phpmyadmin/phpmyadmin
  111. container_name: phpmyadmin
  112. restart: always
  113. environment:
  114. PMA_HOST: mysql
  115. PMA_PORT: 3306
  116. ports:
  117. - "8083:80"
  118. networks:
  119. - gogs-network
  120. # labels:
  121. # - "traefik.enable=true"
  122. # - "traefik.http.routers.phpmyadmin.rule=Host(`phpmyadmin.localhost`)"
  123. # - "traefik.http.services.phpmyadmin.loadbalancer.server.port=80"
  124. # - "traefik.http.routers.phpmyadmin.entrypoints=web"
  125. node_app:
  126. build:
  127. context: ./node_app # Le dossier contenant le Dockerfile
  128. dockerfile: Dockerfile
  129. restart: always
  130. container_name: node_app
  131. working_dir: /usr/src/app
  132. depends_on:
  133. mysql:
  134. condition: service_healthy
  135. environment:
  136. DATABASE_URL: mysql://user:userpassword@mysql:3306/transport?connectTimeout=30000
  137. NODE_ENV: development
  138. ports:
  139. - "3001:3000"
  140. volumes:
  141. - ./node_app:/usr/src/app
  142. - /usr/src/app/node_modules
  143. command: ["npm", "run", "start"]
  144. networks:
  145. - gogs-network
  146. # labels:
  147. # - "traefik.enable=true"
  148. # - "traefik.http.routers.node_app.rule=Host(`api.localhost`)"
  149. # - "traefik.http.services.node_app.loadbalancer.server.port=3000"
  150. # - "traefik.http.routers.node_app.entrypoints=web"
  151. sonarqube:
  152. image: sonarqube:lts
  153. container_name: sonarqube
  154. restart: always
  155. depends_on:
  156. sonarqube_db:
  157. condition: service_healthy
  158. environment:
  159. - SONAR_JDBC_URL=jdbc:postgresql://sonarqube_db:5432/sonarqube
  160. - SONAR_JDBC_USERNAME=sonar
  161. - SONAR_JDBC_PASSWORD=sonarpassword
  162. ports:
  163. - "9000:9000"
  164. volumes:
  165. - sonarqube_data:/opt/sonarqube/data
  166. - sonarqube_extensions:/opt/sonarqube/extensions
  167. - sonarqube_logs:/opt/sonarqube/logs
  168. networks:
  169. - sonarnet
  170. # labels:
  171. # - "traefik.enable=true"
  172. # - "traefik.http.routers.sonarqube.rule=Host(`sonarqube.localhost`)"
  173. # - "traefik.http.services.sonarqube.loadbalancer.server.port=9000"
  174. # - "traefik.http.routers.sonarqube.entrypoints=web"
  175. sonarqube_db:
  176. image: postgres:13
  177. container_name: sonarqube_db
  178. restart: always
  179. environment:
  180. POSTGRES_USER: sonar
  181. POSTGRES_PASSWORD: sonarpassword
  182. POSTGRES_DB: sonarqube
  183. ports:
  184. - "5432:5432"
  185. volumes:
  186. - postgresql-data:/var/lib/postgresql/data
  187. - ./postgres-init.sql:/docker-entrypoint-initdb.d/init.sql
  188. networks:
  189. - sonarnet
  190. healthcheck:
  191. test: ["CMD-SHELL", "pg_isready -U sonar"]
  192. interval: 10s
  193. retries: 5
  194. start_period: 30s
  195. pgadmin:
  196. image: dpage/pgadmin4
  197. container_name: pgadmin
  198. restart: always
  199. environment:
  200. PGADMIN_DEFAULT_EMAIL: admin@admin.com
  201. PGADMIN_DEFAULT_PASSWORD: adminpassword
  202. ports:
  203. - "8084:80"
  204. networks:
  205. - gogs-network
  206. # labels:
  207. # - "traefik.enable=true"
  208. # - "traefik.http.routers.pgadmin.rule=Host(`pgadmin.localhost`)"
  209. # - "traefik.http.services.pgadmin.loadbalancer.server.port=80"
  210. # - "traefik.http.routers.pgadmin.entrypoints=web"
  211. gogs:
  212. image: gogs/gogs:0.12.10
  213. container_name: gogs_server
  214. restart: always
  215. ports:
  216. - "3000:3000"
  217. - "10022:22"
  218. depends_on:
  219. mysql:
  220. condition: service_healthy
  221. sonarqube_db:
  222. condition: service_healthy
  223. volumes:
  224. - gogs_data:/data
  225. networks:
  226. - gogs-network
  227. - sonarnet
  228. # labels:
  229. # - com.host.description=label
  230. # - "traefik.enable=true"
  231. # - "traefik.http.routers.gogs.rule=Host(`gogs.localhost`)"
  232. # - "traefik.http.services.gogs.loadbalancer.server.port=3000"
  233. # - "traefik.http.routers.gogs.entrypoints=web"
  234. prometheus:
  235. image: prom/prometheus:v2.46.0
  236. container_name: prometheus_server
  237. volumes:
  238. - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
  239. ports:
  240. - "9090:9090"
  241. networks:
  242. - monitoring
  243. # labels:
  244. # - com.host.description=label
  245. # - "traefik.enable=true"
  246. # - "traefik.http.routers.prometheus.rule=Host(`prometheus.example.com`)"
  247. # - "traefik.http.services.prometheus.loadbalancer.server.port=9090"
  248. # - "traefik.http.routers.prometheus.entrypoints=web"
  249. grafana:
  250. image: grafana/grafana:10.1.1
  251. container_name: grafana_server
  252. environment:
  253. - GF_SECURITY_ADMIN_USER=admin
  254. - GF_SECURITY_ADMIN_PASSWORD=admin
  255. ports:
  256. - "3003:3000"
  257. depends_on:
  258. - prometheus
  259. volumes:
  260. - grafana_data:/var/lib/grafana
  261. networks:
  262. - monitoring
  263. node-exporter:
  264. image: prom/node-exporter:latest
  265. container_name: node_exporter
  266. ports:
  267. - "9100:9100"
  268. networks:
  269. - monitoring
  270. jenkins:
  271. image: jenkins/jenkins:lts
  272. container_name: jenkins_server
  273. user: root
  274. ports:
  275. - "8081:8080"
  276. - "50000:50000"
  277. volumes:
  278. - jenkins_home:/var/jenkins_home
  279. - /var/run/docker.sock:/var/run/docker.sock
  280. networks:
  281. - gogs-network
  282. networks:
  283. monitoring:
  284. driver: bridge
  285. gogs-network:
  286. driver: bridge
  287. sonarnet:
  288. driver: bridge
  289. volumes:
  290. mysql-data:
  291. postgresql-data:
  292. grafana_data:
  293. jenkins_home:
  294. gogs_data:
  295. sonarqube_data:
  296. sonarqube_extensions:
  297. sonarqube_logs: