docker-compose.yml 11 KB

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