services: # ── PostgreSQL ────────────────────────────────────────────── db: image: postgres:16-alpine environment: POSTGRES_DB: notesfrais POSTGRES_USER: notesfrais POSTGRES_PASSWORD: 9a3dabd70bb1e09f09962a95bdaffbeacdc56eeee029334b volumes: - pgdata4:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U notesfrais -d notesfrais"] interval: 5s timeout: 5s retries: 12 restart: unless-stopped networks: - internal # ── Backend Express ───────────────────────────────────────── backend: build: context: ./backend dockerfile: Dockerfile environment: NODE_ENV: production PORT: 3001 DATABASE_URL: postgresql://notesfrais:9a3dabd70bb1e09f09962a95bdaffbeacdc56eeee029334b@db:5432/notesfrais JWT_SECRET: f1bec20689d176182a33b6904a236d9c207322fb5886e6599812bfbc236bd95bff4d1a05edb273a6ccdb6e06004e059241f7937ef91dee08b92fc25f0ea767c1 APP_SECRET: bbec693632ddd25adeefaddfa64a3e8e1245a97f530cb492f1d3f496ae3a1936 UPLOADS_DIR: /app/uploads FRONTEND_URL: https://frais.domench.fr GAEL_EMAIL: waltergael@1dotech.com GAEL_PASSWORD: Changeme123! GREG_EMAIL: waltergreg@1dotech.com GREG_PASSWORD: Changeme123! volumes: - uploads:/app/uploads depends_on: db: condition: service_healthy restart: unless-stopped networks: - internal - coolify # ── Frontend nginx ────────────────────────────────────────── frontend: build: context: ./frontend dockerfile: Dockerfile depends_on: - backend restart: unless-stopped expose: - "80" networks: - internal - coolify labels: - "traefik.enable=true" - "traefik.http.routers.notesfrais.rule=Host(`frais.domench.fr`)" - "traefik.http.routers.notesfrais.entrypoints=https" - "traefik.http.routers.notesfrais.tls=true" - "traefik.http.routers.notesfrais.tls.certresolver=letsencrypt" - "traefik.http.services.notesfrais.loadbalancer.server.port=80" - "traefik.http.routers.notesfrais-http.rule=Host(`frais.domench.fr`)" - "traefik.http.routers.notesfrais-http.entrypoints=http" - "traefik.http.routers.notesfrais-http.middlewares=notesfrais-https-redirect" - "traefik.http.middlewares.notesfrais-https-redirect.redirectscheme.scheme=https" - "traefik.http.middlewares.notesfrais-https-redirect.redirectscheme.permanent=true" networks: internal: driver: bridge coolify: external: true volumes: pgdata4: uploads: