123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- 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-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
|