services: proxy: image: traefik:v3 container_name: proxy restart: unless-stopped command: - '--api' - '--global.sendAnonymousUsage=false' - '--global.checkNewVersion=false' - '--log=true' - '--log.level=DEBUG' - '--log.format=common' # providers - "--providers.docker=true" - "--providers.docker.network=proxy" - "--providers.docker.exposedByDefault=false" - "--providers.file.directory=/etc/traefik/" - "--providers.file.watch=true" - "--entrypoints.web.address=:80" - "--entrypoints.web.http.redirections.entrypoint.to=websecure" - "--entryPoints.web.http.redirections.entrypoint.scheme=https" - "--entrypoints.websecure.address=:443" # letsencrypt - "--certificatesresolvers.leresolver.acme.dnschallenge=true" - "--certificatesresolvers.leresolver.acme.dnschallenge.provider=ovh" - "--certificatesresolvers.leresolver.acme.dnschallenge.resolvers=8.8.8.8:53" - "--certificatesresolvers.leresolver.acme.email=contact@linuxforward.com" - "--certificatesresolvers.leresolver.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" volumes: - "./traefik/config:/etc/traefik" - "./traefik/letsencrypt:/letsencrypt" - "/var/run/docker.sock:/var/run/docker.sock:ro" environment: - "OVH_ENDPOINT=ovh-eu" - "OVH_APPLICATION_KEY=dcee610a0a9df3c7" - "OVH_APPLICATION_SECRET=11892f9feb86d85544827b83194e679d" - "OVH_CONSUMER_KEY=5b059d39a3e6ace6f343b411e7208e28" networks: - proxy labels: - "traefik.enable=true" # API & Dashboard - "traefik.http.routers.dashboard.rule=(Host(`dashboard-ft.linuxforward.com`)) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))" - "traefik.http.routers.dashboard.service=api@internal" - "traefik.http.routers.dashboard.entrypoints=websecure" - "traefik.http.routers.dashboard.tls=true" - "traefik.http.routers.dashboard.tls.certresolver=leresolver" - "traefik.http.routers.dashboard.middlewares=auth" - "traefik.http.middlewares.auth.basicauth.users=dashboard-ft:***REMOVED***" # Q2nZkXhrqu54cQR5 ## middleware redirect #- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" ## global redirect to https #- "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)" #- "traefik.http.routers.redirs.entrypoints=web" #- "traefik.http.routers.redirs.middlewares=redirect-to-https" # Service pour le backend framed-server: build: context: . dockerfile: Dockerfile container_name: framed-tracker-server restart: unless-stopped # ports: # - "3000:3000" volumes: - ./server:/app - ./data:/app/data - ./backups:/app/backups environment: - NODE_ENV=production - PORT=3000 - DB_PATH=/app/data/framed.db networks: - proxy labels: - "traefik.enable=true" - "traefik.http.routers.framed-tracker-api.rule=(Host(`framed-tracker.linuxforward.com`) && PathPrefix(`/api`))" - "traefik.http.routers.framed-tracker-api.entrypoints=websecure" - "traefik.http.routers.framed-tracker-api.tls=true" - "traefik.http.routers.framed-tracker-api.tls.certresolver=leresolver" - "traefik.http.services.framed-tracker-api.loadbalancer.server.port=3000" # Service pour le frontend (en développement) framed-client-dev: image: node:18-alpine container_name: framed-tracker-client-dev restart: unless-stopped working_dir: /app # ports: # - "3001:3001" volumes: - ./client:/app networks: - proxy environment: - PORT=3001 - REACT_APP_API_URL=http://framed-tracker-server/api command: sh -c "npm install && npm start" depends_on: - framed-server labels: - "traefik.enable=true" - "traefik.http.routers.framed-tracker.rule=Host(`framed-tracker.linuxforward.com`)" - "traefik.http.routers.framed-tracker.entrypoints=websecure" - "traefik.http.routers.framed-tracker.tls=true" - "traefik.http.routers.framed-tracker.tls.certresolver=leresolver" - "traefik.http.services.framed-tracker.loadbalancer.server.port=3001" # # Service pour construire le frontend (production) # framed-client-build: # image: node:18-alpine # container_name: framed-tracker-client-build # working_dir: /app # networks: # - proxy # volumes: # - ./client:/app # - ./server/public:/output # environment: # - REACT_APP_API_URL=/api # command: sh -c "npm install && npm run build && cp -r build/* /output/" # profiles: # - build # # Service nginx pour servir l'application en production # framed-nginx: # image: nginx:alpine # container_name: framed-tracker-nginx # restart: unless-stopped # ports: # - "80:80" # volumes: # - ./nginx/default.conf:/etc/nginx/conf.d/default.conf # - ./server/public:/usr/share/nginx/html # depends_on: # - framed-server # profiles: # - prod networks: proxy: name: proxy