docker-compose.yml 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. services:
  2. proxy:
  3. image: traefik:v3
  4. container_name: proxy
  5. restart: unless-stopped
  6. command:
  7. - '--api'
  8. - '--global.sendAnonymousUsage=false'
  9. - '--global.checkNewVersion=false'
  10. - '--log=true'
  11. - '--log.level=DEBUG'
  12. - '--log.format=common'
  13. # providers
  14. - "--providers.docker=true"
  15. - "--providers.docker.network=proxy"
  16. - "--providers.docker.exposedByDefault=false"
  17. - "--providers.file.directory=/etc/traefik/"
  18. - "--providers.file.watch=true"
  19. - "--entrypoints.web.address=:80"
  20. - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
  21. - "--entryPoints.web.http.redirections.entrypoint.scheme=https"
  22. - "--entrypoints.websecure.address=:443"
  23. # letsencrypt
  24. - "--certificatesresolvers.leresolver.acme.dnschallenge=true"
  25. - "--certificatesresolvers.leresolver.acme.dnschallenge.provider=ovh"
  26. - "--certificatesresolvers.leresolver.acme.dnschallenge.resolvers=8.8.8.8:53"
  27. - "--certificatesresolvers.leresolver.acme.email=contact@linuxforward.com"
  28. - "--certificatesresolvers.leresolver.acme.storage=/letsencrypt/acme.json"
  29. ports:
  30. - "80:80"
  31. - "443:443"
  32. volumes:
  33. - "./traefik/config:/etc/traefik"
  34. - "./traefik/letsencrypt:/letsencrypt"
  35. - "/var/run/docker.sock:/var/run/docker.sock:ro"
  36. environment:
  37. - "OVH_ENDPOINT=ovh-eu"
  38. - "OVH_APPLICATION_KEY=dcee610a0a9df3c7"
  39. - "OVH_APPLICATION_SECRET=11892f9feb86d85544827b83194e679d"
  40. - "OVH_CONSUMER_KEY=5b059d39a3e6ace6f343b411e7208e28"
  41. networks:
  42. - proxy
  43. labels:
  44. - "traefik.enable=true"
  45. # API & Dashboard
  46. - "traefik.http.routers.dashboard.rule=(Host(`dashboard-ft.linuxforward.com`)) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
  47. - "traefik.http.routers.dashboard.service=api@internal"
  48. - "traefik.http.routers.dashboard.entrypoints=websecure"
  49. - "traefik.http.routers.dashboard.tls=true"
  50. - "traefik.http.routers.dashboard.tls.certresolver=leresolver"
  51. - "traefik.http.routers.dashboard.middlewares=auth"
  52. - "traefik.http.middlewares.auth.basicauth.users=dashboard-ft:***REMOVED***" # Q2nZkXhrqu54cQR5
  53. ## middleware redirect
  54. #- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
  55. ## global redirect to https
  56. #- "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)"
  57. #- "traefik.http.routers.redirs.entrypoints=web"
  58. #- "traefik.http.routers.redirs.middlewares=redirect-to-https"
  59. # Service pour le backend
  60. framed-server:
  61. build:
  62. context: .
  63. dockerfile: Dockerfile
  64. container_name: framed-tracker-server
  65. restart: unless-stopped
  66. # ports:
  67. # - "3000:3000"
  68. volumes:
  69. - ./server:/app
  70. - ./data:/app/data
  71. - ./backups:/app/backups
  72. environment:
  73. - NODE_ENV=production
  74. - PORT=3000
  75. - DB_PATH=/app/data/framed.db
  76. networks:
  77. - proxy
  78. labels:
  79. - "traefik.enable=true"
  80. - "traefik.http.routers.framed-tracker-api.rule=(Host(`framed-tracker.linuxforward.com`) && PathPrefix(`/api`))"
  81. - "traefik.http.routers.framed-tracker-api.entrypoints=websecure"
  82. - "traefik.http.routers.framed-tracker-api.tls=true"
  83. - "traefik.http.routers.framed-tracker-api.tls.certresolver=leresolver"
  84. - "traefik.http.services.framed-tracker-api.loadbalancer.server.port=3000"
  85. # Service pour le frontend (en développement)
  86. framed-client-dev:
  87. image: node:18-alpine
  88. container_name: framed-tracker-client-dev
  89. restart: unless-stopped
  90. working_dir: /app
  91. # ports:
  92. # - "3001:3001"
  93. volumes:
  94. - ./client:/app
  95. networks:
  96. - proxy
  97. environment:
  98. - PORT=3001
  99. - REACT_APP_API_URL=http://framed-server/api
  100. command: sh -c "npm install && npm start"
  101. depends_on:
  102. - framed-server
  103. labels:
  104. - "traefik.enable=true"
  105. - "traefik.http.routers.framed-tracker.rule=Host(`framed-tracker.linuxforward.com`)"
  106. - "traefik.http.routers.framed-tracker.entrypoints=websecure"
  107. - "traefik.http.routers.framed-tracker.tls=true"
  108. - "traefik.http.routers.framed-tracker.tls.certresolver=leresolver"
  109. - "traefik.http.services.framed-tracker.loadbalancer.server.port=3001"
  110. # # Service pour construire le frontend (production)
  111. # framed-client-build:
  112. # image: node:18-alpine
  113. # container_name: framed-tracker-client-build
  114. # working_dir: /app
  115. # networks:
  116. # - proxy
  117. # volumes:
  118. # - ./client:/app
  119. # - ./server/public:/output
  120. # environment:
  121. # - REACT_APP_API_URL=/api
  122. # command: sh -c "npm install && npm run build && cp -r build/* /output/"
  123. # profiles:
  124. # - build
  125. # # Service nginx pour servir l'application en production
  126. # framed-nginx:
  127. # image: nginx:alpine
  128. # container_name: framed-tracker-nginx
  129. # restart: unless-stopped
  130. # ports:
  131. # - "80:80"
  132. # volumes:
  133. # - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
  134. # - ./server/public:/usr/share/nginx/html
  135. # depends_on:
  136. # - framed-server
  137. # profiles:
  138. # - prod
  139. networks:
  140. proxy:
  141. name: proxy