docker-compose.yml 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  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:5173
  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. n8n:
  45. image: docker.n8n.io/n8nio/n8n
  46. restart: always
  47. ports:
  48. - "127.0.0.1:5678:5678"
  49. # labels:
  50. # - traefik.enable=true
  51. # - traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
  52. # - traefik.http.routers.n8n.tls=true
  53. # - traefik.http.routers.n8n.entrypoints=web,websecure
  54. # - traefik.http.routers.n8n.tls.certresolver=mytlschallenge
  55. # - traefik.http.middlewares.n8n.headers.SSLRedirect=true
  56. # - traefik.http.middlewares.n8n.headers.STSSeconds=315360000
  57. # - traefik.http.middlewares.n8n.headers.browserXSSFilter=true
  58. # - traefik.http.middlewares.n8n.headers.contentTypeNosniff=true
  59. # - traefik.http.middlewares.n8n.headers.forceSTSHeader=true
  60. # - traefik.http.middlewares.n8n.headers.SSLHost=${DOMAIN_NAME}
  61. # - traefik.http.middlewares.n8n.headers.STSIncludeSubdomains=true
  62. # - traefik.http.middlewares.n8n.headers.STSPreload=true
  63. # - traefik.http.routers.n8n.middlewares=n8n@docker
  64. environment:
  65. - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
  66. - N8N_PORT=5678
  67. - N8N_PROTOCOL=https
  68. - NODE_ENV=production
  69. - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
  70. - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
  71. volumes:
  72. - n8n_data:/home/node/.n8n
  73. - ./local-files:/files
  74. # traefik:
  75. # image: traefik:v2.10
  76. # container_name: traefik
  77. # restart: always
  78. # command:
  79. # - "--api.dashboard=true"
  80. # - "--api.insecure=true"
  81. # - "--providers.docker=true"
  82. # - "--entrypoints.web.address=:80"
  83. # - "--entrypoints.websecure.address=:443"
  84. # - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
  85. # - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
  86. # - "--certificatesresolvers.myresolver.acme.email=brin.amonkonan@gmail.com"
  87. # - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
  88. # - "--log.level=DEBUG"
  89. # labels:
  90. # - com.host.description=label
  91. # # Router pour accéder au dashboard via traefik.localhost
  92. # - "traefik.enable=true"
  93. # - "traefik.http.routers.traefik.rule=Host(`localhost`)"
  94. # - "traefik.http.routers.traefik.entrypoints=web"
  95. # - "traefik.http.routers.traefik-secure.entrypoints=websecure"
  96. # - "traefik.http.routers.traefik.service=api@internal" # Utilise le service interne de Traefik
  97. # - "traefik.http.routers.traefik.middlewares=dashboard-auth" # (Optionnel) protection du dashboard
  98. # - "traefik.http.routers.traefik-secure.tls=true"
  99. # # Middleware pour protéger le dashboard avec une authentification basique (user: admin, mdp: admin)
  100. # #- "traefik.http.middlewares.dashboard-auth.basicauth.users=admin:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/"
  101. # ports:
  102. # - "80:80"
  103. # - "443:443"
  104. # volumes:
  105. # - "/var/run/docker.sock:/var/run/docker.sock:ro"
  106. # - "./letsencrypt:/letsencrypt"
  107. # networks:
  108. # - gogs-network
  109. # whoami:
  110. # image: traefik/whoami
  111. # labels:
  112. # - "traefik.enable=true"
  113. # - "traefik.http.routers.whoami.rule=Host(`localhost`)"
  114. # - "traefik.http.routers.whoami.entrypoints=web"
  115. # - "traefik.http.services.whoami.loadbalancer.server.port=80"
  116. # networks:
  117. # - gogs-network
  118. mysql:
  119. image: mysql:5.7
  120. container_name: mysql
  121. restart: always
  122. environment:
  123. MYSQL_ROOT_PASSWORD: rootpassword
  124. MYSQL_DATABASE: transport
  125. MYSQL_USER: user
  126. MYSQL_PASSWORD: userpassword
  127. ports:
  128. - "3306:3306"
  129. volumes:
  130. - mysql-data:/var/lib/mysql
  131. - ./mysql-init:/docker-entrypoint-initdb.d:ro
  132. networks:
  133. - gogs-network
  134. healthcheck:
  135. test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
  136. interval: 10s
  137. retries: 5
  138. start_period: 30s
  139. phpmyadmin:
  140. image: phpmyadmin/phpmyadmin
  141. container_name: phpmyadmin
  142. restart: always
  143. environment:
  144. PMA_HOST: mysql
  145. PMA_PORT: 3306
  146. ports:
  147. - "8083:80"
  148. networks:
  149. - gogs-network
  150. # labels:
  151. # - "traefik.enable=true"
  152. # - "traefik.http.routers.phpmyadmin.rule=Host(`phpmyadmin.localhost`)"
  153. # - "traefik.http.services.phpmyadmin.loadbalancer.server.port=80"
  154. # - "traefik.http.routers.phpmyadmin.entrypoints=web"
  155. node_app:
  156. build:
  157. context: ./node_app # Le dossier contenant le Dockerfile
  158. dockerfile: Dockerfile
  159. #restart: always
  160. container_name: node_app
  161. working_dir: /usr/src/app
  162. depends_on:
  163. mysql:
  164. condition: service_healthy
  165. environment:
  166. DATABASE_URL: mysql://user:userpassword@mysql:3306/transport?connectTimeout=30000
  167. NODE_ENV: development
  168. ports:
  169. - "3001:3000"
  170. volumes:
  171. - ./node_app:/usr/src/app
  172. - /usr/src/app/node_modules
  173. command: ["npm", "run", "start"]
  174. networks:
  175. - gogs-network
  176. # labels:
  177. # - "traefik.enable=true"
  178. # - "traefik.http.routers.node_app.rule=Host(`api.localhost`)"
  179. # - "traefik.http.services.node_app.loadbalancer.server.port=3000"
  180. # - "traefik.http.routers.node_app.entrypoints=web"
  181. sonarqube:
  182. image: sonarqube:lts
  183. container_name: sonarqube
  184. restart: always
  185. depends_on:
  186. sonarqube_db:
  187. condition: service_healthy
  188. environment:
  189. - SONAR_JDBC_URL=jdbc:postgresql://sonarqube_db:5432/sonarqube
  190. - SONAR_JDBC_USERNAME=sonar
  191. - SONAR_JDBC_PASSWORD=sonarpassword
  192. ports:
  193. - "9000:9000"
  194. volumes:
  195. - sonarqube_data:/opt/sonarqube/data
  196. - sonarqube_extensions:/opt/sonarqube/extensions
  197. - sonarqube_logs:/opt/sonarqube/logs
  198. networks:
  199. - sonarnet
  200. # labels:
  201. # - "traefik.enable=true"
  202. # - "traefik.http.routers.sonarqube.rule=Host(`sonarqube.localhost`)"
  203. # - "traefik.http.services.sonarqube.loadbalancer.server.port=9000"
  204. # - "traefik.http.routers.sonarqube.entrypoints=web"
  205. sonarqube_db:
  206. image: postgres:13
  207. container_name: sonarqube_db
  208. restart: always
  209. environment:
  210. POSTGRES_USER: sonar
  211. POSTGRES_PASSWORD: sonarpassword
  212. POSTGRES_DB: sonarqube
  213. ports:
  214. - "5432:5432"
  215. volumes:
  216. - postgresql-data:/var/lib/postgresql/data
  217. - ./postgres-init.sql:/docker-entrypoint-initdb.d/init.sql
  218. networks:
  219. - sonarnet
  220. healthcheck:
  221. test: ["CMD-SHELL", "pg_isready -U sonar"]
  222. interval: 10s
  223. retries: 5
  224. start_period: 30s
  225. pgadmin:
  226. image: dpage/pgadmin4
  227. container_name: pgadmin
  228. restart: always
  229. environment:
  230. PGADMIN_DEFAULT_EMAIL: admin@admin.com
  231. PGADMIN_DEFAULT_PASSWORD: adminpassword
  232. ports:
  233. - "8084:80"
  234. networks:
  235. - gogs-network
  236. # labels:
  237. # - "traefik.enable=true"
  238. # - "traefik.http.routers.pgadmin.rule=Host(`pgadmin.localhost`)"
  239. # - "traefik.http.services.pgadmin.loadbalancer.server.port=80"
  240. # - "traefik.http.routers.pgadmin.entrypoints=web"
  241. gogs:
  242. image: gogs/gogs:0.12.10
  243. container_name: gogs_server
  244. restart: always
  245. ports:
  246. - "3000:3000"
  247. - "10022:22"
  248. depends_on:
  249. mysql:
  250. condition: service_healthy
  251. sonarqube_db:
  252. condition: service_healthy
  253. volumes:
  254. - gogs_data:/data
  255. networks:
  256. - gogs-network
  257. - sonarnet
  258. # labels:
  259. # - com.host.description=label
  260. # - "traefik.enable=true"
  261. # - "traefik.http.routers.gogs.rule=Host(`gogs.localhost`)"
  262. # - "traefik.http.services.gogs.loadbalancer.server.port=3000"
  263. # - "traefik.http.routers.gogs.entrypoints=web"
  264. prometheus:
  265. image: prom/prometheus:v2.46.0
  266. container_name: prometheus_server
  267. volumes:
  268. - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
  269. ports:
  270. - "9090:9090"
  271. networks:
  272. - monitoring
  273. # labels:
  274. # - com.host.description=label
  275. # - "traefik.enable=true"
  276. # - "traefik.http.routers.prometheus.rule=Host(`prometheus.example.com`)"
  277. # - "traefik.http.services.prometheus.loadbalancer.server.port=9090"
  278. # - "traefik.http.routers.prometheus.entrypoints=web"
  279. grafana:
  280. image: grafana/grafana:10.1.1
  281. container_name: grafana_server
  282. environment:
  283. - GF_SECURITY_ADMIN_USER=admin
  284. - GF_SECURITY_ADMIN_PASSWORD=admin
  285. ports:
  286. - "3003:3000"
  287. depends_on:
  288. - prometheus
  289. volumes:
  290. - grafana_data:/var/lib/grafana
  291. networks:
  292. - monitoring
  293. node-exporter:
  294. image: prom/node-exporter:latest
  295. container_name: node_exporter
  296. ports:
  297. - "9100:9100"
  298. networks:
  299. - monitoring
  300. jenkins:
  301. image: jenkins/jenkins:lts
  302. container_name: jenkins_server
  303. user: root
  304. ports:
  305. - "8081:8080"
  306. - "50000:50000"
  307. volumes:
  308. - jenkins_home:/var/jenkins_home
  309. - /var/run/docker.sock:/var/run/docker.sock
  310. networks:
  311. - gogs-network
  312. networks:
  313. monitoring:
  314. driver: bridge
  315. gogs-network:
  316. driver: bridge
  317. sonarnet:
  318. driver: bridge
  319. volumes:
  320. mysql-data:
  321. postgresql-data:
  322. grafana_data:
  323. jenkins_home:
  324. gogs_data:
  325. sonarqube_data:
  326. sonarqube_extensions:
  327. sonarqube_logs:
  328. n8n_data: