traefik/docs/content/providers/file.md
2019-10-07 14:48:05 +02:00

6.2 KiB

Traefik & File

Good Old Configuration File {: .subtitle }

The file provider lets you define the dynamic configuration in a TOML or YAML file. You can write one of these mutually exclusive configuration elements:

!!! info The file provider is the default format used throughout the documentation to show samples of the configuration for many features.

!!! tip The file provider can be a good location for common elements you'd like to re-use from other providers; e.g. declaring whitelist middlewares, basic authentication, ...

Configuration Examples

??? example "Declaring Routers, Middlewares & Services"

Enabling the file provider:

```toml tab="File (TOML)"
[providers.file]
  filename = "/my/path/to/dynamic-conf.toml"
```

```yaml tab="File (YAML)"
providers:
  file:
    filename: "/my/path/to/dynamic-conf.yml"
```

```bash tab="CLI"
--providers.file.filename=/my/path/to/dynamic_conf.toml
```

Declaring Routers, Middlewares & Services:

```toml tab="TOML"
[http]
  # Add the router
  [http.routers]
    [http.routers.router0]
      entryPoints = ["web"]
      middlewares = ["my-basic-auth"]
      service = "service-foo"
      rule = "Path(`/foo`)"

    # Add the middleware
    [http.middlewares]    
      [http.middlewares.my-basic-auth.basicAuth]
        users = ["test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/", 
                  "test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0"]
        usersFile = "etc/traefik/.htpasswd"
    
    # Add the service
    [http.services]
      [http.services.service-foo]
        [http.services.service-foo.loadBalancer]
          [[http.services.service-foo.loadBalancer.servers]]
            url = "http://foo/"
          [[http.services.service-foo.loadBalancer.servers]]
            url = "http://bar/"
```

```yaml tab="YAML"
http:
  # Add the router
  routers:
    router0:
      entryPoints:
      - web
      middlewares:
      - my-basic-auth
      service: service-foo
      rule: Path(`/foo`)
  
  # Add the middleware
  middlewares:
    my-basic-auth:
      basicAuth:
        users:
        - test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/
        - test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0
        usersFile: etc/traefik/.htpasswd
  
  # Add the service
  services:
    service-foo:
      loadBalancer:
        servers:
        - url: http://foo/
        - url: http://bar/
        passHostHeader: false
```

Provider Configuration

If you're in a hurry, maybe you'd rather go through the dynamic configuration references and the static configuration.

filename

Defines the path of the configuration file.

[providers]
  [providers.file]
    filename = "dynamic_conf.toml"
providers:
  file:
    filename: dynamic_conf.yml
--providers.file.filename=dynamic_conf.toml

directory

Defines the directory that contains the configuration files.

[providers]
  [providers.file]
    directory = "/path/to/config"
providers:
  file:
    directory: /path/to/config
--providers.file.directory=/path/to/config

watch

Set the watch option to true to allow Traefik to automatically watch for file changes.
It works with both the filename and the directory options.

[providers]
  [providers.file]
    filename = "dynamic_conf.toml"
    watch = true
providers:
  file:
    filename: dynamic_conf.yml
    watch: true
--providers.file.filename=dynamic_conf.toml
--providers.file.watch=true

Go Templating

!!! warning Go Templating only works along with dedicated dynamic configuration files. Templating does not work in the Traefik main static configuration file.

Traefik allows using Go templating.
Thus, it's possible to define easily lot of routers, services and TLS certificates as described in the file template-rules.toml :

??? example "Configuring Using Templating"

```toml tab="TOML"
# template-rules.toml
[http]

  [http.routers]
  {{ range $i, $e := until 100 }}
    [http.routers.router{{ $e }}]
    # ...
  {{ end }}  
  
  
  [http.services]
  {{ range $i, $e := until 100 }}
      [http.services.service{{ $e }}]
      # ...
  {{ end }}  
  
[tcp]

  [tcp.routers]
  {{ range $i, $e := until 100 }}
    [tcp.routers.router{{ $e }}]
    # ...
  {{ end }}  
  
  
  [tcp.services]
  {{ range $i, $e := until 100 }}
      [http.services.service{{ $e }}]
      # ...
  {{ end }}  

{{ range $i, $e := until 10 }}
[[tls.certificates]]
  certFile = "/etc/traefik/cert-{{ $e }}.pem"
  keyFile = "/etc/traefik/cert-{{ $e }}.key"
  store = ["my-store-foo-{{ $e }}", "my-store-bar-{{ $e }}"]
{{ end }}

[tls.config]
{{ range $i, $e := until 10 }}
  [tls.config.TLS{{ $e }}]
  # ...
{{ end }}
```

```yaml tab="YAML"
http:

{{range $i, $e := until 100 }}
  routers:
    router{{ $e }:
      # ...
{{end}}

{{range $i, $e := until 100 }}
  services:
    application{{ $e }}:
      # ...
{{end}}

tcp:

{{range $i, $e := until 100 }}
  routers:
    router{{ $e }:
      # ...
{{end}}

{{range $i, $e := until 100 }}
  services:
    service{{ $e }}:
      # ...
{{end}}

{{ range $i, $e := until 10 }}
tls:
  certificates:
  - certFile: "/etc/traefik/cert-{{ $e }}.pem"
    keyFile: "/etc/traefik/cert-{{ $e }}.key"
    store:
    - "my-store-foo-{{ $e }}"
    - "my-store-bar-{{ $e }}"
{{end}}
```