Search code examples
node.jsamazon-web-servicesdockeramazon-ec2traefik

Traefik still needs port specification


I am new to AWS and new with Traefik too. I am having a lot of trouble trying to remove the need of port especification in a application I am developing.

When I hit http://api-landingpage.cayama.com.br/ it give`s me an 404 page error, but when I try http://api-landingpage.cayama.com.br:8001/ it goes to my api correctly.

I hosted my domain in AWS Route53 and I am using docker as a provider.

Here my configurations:

docker-compose.yml: version: "3"

services:
  app:
    build: .
    ports:
      - "8001:8001"
    
    command: "npm start"

docker-production.yml:

version: "3"

services:
  traefik:
    image: traefik
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
    ports:
      - "80:80"
      - "8080:8080"

    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  app:
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.app.rule=Host(`http://api-landingpage.cayama.com.br/`)"
      - "traefik.http.routers.app.entrypoints=web"

I am sure is there a basic thing that I am missing here, can anyone help me please?

I just want to not have to specify, on URL, the port which my application is running.

Thanks guys!


Solution

  • Theoretically, as you said, you shouldn't have to specify the port manually.

    I'm not totally sure it's the cause but you are using a full URL instead of a host. Basically you should replace this:

    - "traefik.http.routers.app.rule=Host(`http://api-landingpage.cayama.com.br/`)"
    

    With this:

    - "traefik.http.routers.app.rule=Host(`api-landingpage.cayama.com.br`)"
    

    If it does not solve your problem you could try using the loadbalancer directive, even if it is theoretically usefull for Docker Swarm, not for Docker (put this in your app service):

    - "traefik.http.services.app.loadbalancer.server.port=8001"
    

    Then if it's still not working enable debugging and look for errors in the logs. In order to enable debugging, add this to your Traefik service in the command section:

    - --log.level=DEBUG