"Simple" TOML configuration not working

Hi all, the below runs, but the dashboard is not enabled and at this point the debug and access logs aren't being written to. The file/directory watch is also not working, but that may be due to this being on OpenWrt (?)

Certs are correct, domains changed for posting here.

The domain is set in /etc/hosts and Traefik is binding to the correct address.

/data/traefik/traefik.toml

[entryPoints]
    [entryPoints.specificIPv6]
  		address = "traefik.mydomain.example.org:443"

[providers]
	[providers.file]
	directory = "/data/traefik/config/"
	watch = true

[api]
	dashboard = true
	debug = true

[log]
	level = "DEBUG"
	filePath = "/data/traefik/debug.log"

[accessLog]
	filePath =  "/data/traefik/access.log"

[api]
	dashboard = true
	debug = true

/data/traefik/config/dynamic.toml

[tls]
	[[tls.certificates]]
		certFile = "/data/tls/mydomain.example.org/fullchain.pem"
		keyFile = "/data/tls/mydomain.example.org/privkey.pem"

	[entryPoints.web-secure]
		address = "traefik.mydomain.example.org:443"
 

[http.routers.my-api]
	entrypoints = ["specificIPv6"]
  rule = "Host(`traefik.mydomain.example.org`) && PathPrefix(`/api`) || PathPrefix(`/dashboard`)"
  service = "api@internal"

INFO[0000] Configuration loaded from file: /data/traefik/traefik.toml is the only line I get after executing traefik -configfile /data/traefik/traefik.toml

Initial questions:

  • Why no warning if file/directory watching isn't working?
  • Why is /api and /dashboard 404?
  • Why are my logs not working?

My initial question: why TOML? :wink:

To me it always feels like it has so much repetition and is so much harder to read.

Found one mistake, use only port (doc):

## Static configuration
[entryPoints]
  [entryPoints.web]
    address = ":80"

  [entryPoints.websecure]
    address = ":443"

Look under where you've linked me to - "Listen on Specific IP Addresses Only"

I only want to bind on a single address.

I spend enough time fighting YAML in my day job, but it might be worth trying here.

This is twice in your config (which shouldn’t break it)

In the doc example they use an extra pair of ():

# Dynamic Configuration
[http.routers.my-api]
  rule = "Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
  service = "api@internal"