What exactly are the requirements?

version: "3.7"

services:
#SERVICE 1 -- Mainapp (on port 2000)
  dt:
    container_name: mainapp
    restart: always
    build: '.'
    ports:
      - "2000:2000"
    logging:
      driver: journald
      options:
        tag: "mainapp"
    labels:
      - "traefik.enable=true"

      - "traefik.http.routers.dt.rule=Host(`${DT_VHOST}`,`${DT_WWW_VHOST}`)"
      - "traefik.http.routers.dt.entrypoints=websecure"
      - "traefik.http.routers.dt.tls.certresolver=le"
      - "traefik.http.services.dt.loadbalancer.server.port=2000"

#SERVICE 7 -- TRAEFIK
  traefik:
    image: "traefik:v2.1.4"
    restart: always
    container_name: "traefik"
    command:
      - "--log.level=INFO"
      - "--accesslog=true"
      - "--api=true"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--certificatesresolvers.le.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.le.acme.email=emailrep@gmail.com"
      - "--certificatesresolvers.le.acme.storage=/acme.json"
      - "--certificatesresolvers.le.acme.tlschallenge=true"
    ports:
      - "80:80"
      - "443:443"
    logging:
      driver: journald
      options:
        tag: "traefik"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./acme.json:/acme.json"
    labels:
      - "traefik.enable=true"

      # Dashboard
      - "traefik.http.routers.traefik.rule=Host(`${DASHBOARD_VHOST}`)"
      - "traefik.http.routers.traefik.entrypoints=websecure"
      - "traefik.http.routers.traefik.service=api@internal"
      - "traefik.http.routers.traefik.tls.certresolver=le"
      - "traefik.http.routers.traefik.middlewares=api_auth"

      - "traefik.http.middlewares.api_auth.basicauth.users=user:$$apr1$$q8eZFHjF$$Fvmkk//V6Btlaf2i/ju5n/" # user / password

networks:
  default:
   external:
     name: traefik