docker-compose.yml 11 KB

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