2019-03-14 15:46:05 +00:00
# Traefik & File
2019-02-26 13:50:07 +00:00
Good Old Configuration File
{: .subtitle }
2019-06-26 16:18:04 +00:00
The file provider lets you define the [dynamic configuration ](./overview.md ) in a TOML or YAML file.
2019-03-14 15:46:05 +00:00
You can write these configuration elements:
2019-02-26 13:50:07 +00:00
2019-04-24 15:44:04 +00:00
* In [a dedicated file ](#filename )
* In [several dedicated files ](#directory )
2019-02-26 13:50:07 +00:00
2019-09-23 12:32:04 +00:00
!!! info
2019-03-14 15:46:05 +00:00
The file provider is the default format used throughout the documentation to show samples of the configuration for many features.
2019-02-26 13:50:07 +00:00
2019-03-14 15:46:05 +00:00
!!! 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, ...
2019-02-26 13:50:07 +00:00
2019-03-14 15:46:05 +00:00
## Configuration Examples
2019-02-26 13:50:07 +00:00
2019-03-14 15:46:05 +00:00
??? example "Declaring Routers, Middlewares & Services"
2019-02-26 13:50:07 +00:00
2019-06-26 16:18:04 +00:00
Enabling the file provider:
2019-07-15 08:22:03 +00:00
```toml tab="File (TOML)"
2019-03-21 14:34:04 +00:00
[providers.file]
2019-07-15 08:22:03 +00:00
filename = "/my/path/to/dynamic-conf.toml"
2019-06-26 16:18:04 +00:00
```
2019-07-15 08:22:03 +00:00
```yaml tab="File (YAML)"
2019-06-26 16:18:04 +00:00
providers:
2019-07-15 08:22:03 +00:00
file:
filename: "/my/path/to/dynamic-conf.yml"
```
```bash tab="CLI"
--providers.file.filename=/my/path/to/dynamic_conf.toml
2019-06-26 16:18:04 +00:00
```
2019-03-14 15:46:05 +00:00
2019-06-26 16:18:04 +00:00
Declaring Routers, Middlewares & Services:
```toml tab="TOML"
2019-03-14 15:46:05 +00:00
[http]
# Add the router
[http.routers]
[http.routers.router0]
2019-04-15 09:14:05 +00:00
entryPoints = ["web"]
2019-03-14 15:46:05 +00:00
middlewares = ["my-basic-auth"]
service = "service-foo"
2019-09-03 16:02:05 +00:00
rule = "Path(`/foo`)"
2019-03-14 15:46:05 +00:00
# Add the middleware
[http.middlewares]
2019-07-01 09:30:05 +00:00
[http.middlewares.my-basic-auth.basicAuth]
2019-03-14 15:46:05 +00:00
users = ["test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/",
"test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0"]
usersFile = "etc/traefik/.htpasswd"
# Add the service
[http.services]
[http.services.service-foo]
2019-07-01 09:30:05 +00:00
[http.services.service-foo.loadBalancer]
[[http.services.service-foo.loadBalancer.servers]]
2019-03-14 15:46:05 +00:00
url = "http://foo/"
2019-07-01 09:30:05 +00:00
[[http.services.service-foo.loadBalancer.servers]]
2019-03-14 15:46:05 +00:00
url = "http://bar/"
```
2019-06-26 16:18:04 +00:00
```yaml tab="YAML"
http:
2019-07-01 09:30:05 +00:00
# Add the router
2019-06-26 16:18:04 +00:00
routers:
router0:
2019-07-01 09:30:05 +00:00
entryPoints:
2019-06-26 16:18:04 +00:00
- web
middlewares:
- my-basic-auth
service: service-foo
2019-09-03 16:02:05 +00:00
rule: Path(`/foo`)
2019-07-01 09:30:05 +00:00
# Add the middleware
2019-06-26 16:18:04 +00:00
middlewares:
my-basic-auth:
basicAuth:
users:
- test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/
- test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0
2019-07-01 09:30:05 +00:00
usersFile: etc/traefik/.htpasswd
# Add the service
2019-06-26 16:18:04 +00:00
services:
service-foo:
2019-07-01 09:30:05 +00:00
loadBalancer:
2019-06-26 16:18:04 +00:00
servers:
- url: http://foo/
- url: http://bar/
2019-07-01 09:30:05 +00:00
passHostHeader: false
2019-06-26 16:18:04 +00:00
```
2019-02-26 13:50:07 +00:00
2019-09-23 12:32:04 +00:00
## Provider Configuration
2019-02-26 13:50:07 +00:00
2019-09-23 12:32:04 +00:00
If you're in a hurry, maybe you'd rather go through the [dynamic configuration ](../reference/dynamic-configuration/file.md ) references and the [static configuration ](../reference/static-configuration/overview.md ).
2019-04-24 15:44:04 +00:00
2019-09-23 12:32:04 +00:00
### `filename`
2019-02-26 13:50:07 +00:00
2019-03-14 15:46:05 +00:00
Defines the path of the configuration file.
2019-07-15 08:22:03 +00:00
```toml tab="File (TOML)"
2019-03-14 15:46:05 +00:00
[providers]
[providers.file]
2019-07-15 08:22:03 +00:00
filename = "dynamic_conf.toml"
2019-03-14 15:46:05 +00:00
```
2019-07-15 08:22:03 +00:00
```yaml tab="File (YAML)"
2019-06-26 16:18:04 +00:00
providers:
file:
2019-07-15 08:22:03 +00:00
filename: dynamic_conf.yml
```
```bash tab="CLI"
--providers.file.filename=dynamic_conf.toml
2019-06-26 16:18:04 +00:00
```
2019-04-24 15:44:04 +00:00
### `directory`
2019-03-14 15:46:05 +00:00
Defines the directory that contains the configuration files.
2019-07-15 08:22:03 +00:00
```toml tab="File (TOML)"
2019-03-14 15:46:05 +00:00
[providers]
[providers.file]
directory = "/path/to/config"
```
2019-07-15 08:22:03 +00:00
```yaml tab="File (YAML)"
2019-06-26 16:18:04 +00:00
providers:
file:
directory: /path/to/config
```
2019-07-15 08:22:03 +00:00
```bash tab="CLI"
--providers.file.directory=/path/to/config
```
2019-04-24 15:44:04 +00:00
### `watch`
2019-03-14 15:46:05 +00:00
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.
2019-07-15 08:22:03 +00:00
```toml tab="File (TOML)"
2019-03-14 15:46:05 +00:00
[providers]
[providers.file]
2019-07-15 08:22:03 +00:00
filename = "dynamic_conf.toml"
2019-03-14 15:46:05 +00:00
watch = true
```
2019-07-15 08:22:03 +00:00
```yaml tab="File (YAML)"
2019-06-26 16:18:04 +00:00
providers:
file:
2019-07-15 08:22:03 +00:00
filename: dynamic_conf.yml
2019-06-26 16:18:04 +00:00
watch: true
```
2019-07-15 08:22:03 +00:00
```bash tab="CLI"
--providers.file.filename=dynamic_conf.toml
--providers.file.watch=true
```
2019-06-26 16:18:04 +00:00
### Go Templating
2019-03-14 15:46:05 +00:00
!!! warning
2019-09-23 12:32:04 +00:00
Go Templating only works along with dedicated dynamic configuration files.
Templating does not work in the Traefik main static configuration file.
2019-03-14 15:46:05 +00:00
2019-06-26 16:18:04 +00:00
Traefik allows using Go templating.
2019-03-14 15:46:05 +00:00
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"
2019-06-26 16:18:04 +00:00
```toml tab="TOML"
2019-03-14 15:46:05 +00:00
# template-rules.toml
[http]
[http.routers]
{{ range $i, $e := until 100 }}
[http.routers.router{{ $e }}]
# ...
{{ end }}
2019-07-01 09:30:05 +00:00
[http.services]
2019-03-14 15:46:05 +00:00
{{ range $i, $e := until 100 }}
[http.services.service{{ $e }}]
# ...
{{ end }}
[tcp]
[tcp.routers]
{{ range $i, $e := until 100 }}
[tcp.routers.router{{ $e }}]
# ...
{{ end }}
2019-07-01 09:30:05 +00:00
[tcp.services]
2019-03-14 15:46:05 +00:00
{{ range $i, $e := until 100 }}
[http.services.service{{ $e }}]
# ...
{{ end }}
{{ range $i, $e := until 10 }}
2019-06-27 21:58:03 +00:00
[[tls.certificates]]
2019-07-01 09:30:05 +00:00
certFile = "/etc/traefik/cert-{{ $e }}.pem"
keyFile = "/etc/traefik/cert-{{ $e }}.key"
store = ["my-store-foo-{{ $e }}", "my-store-bar-{{ $e }}"]
2019-03-14 15:46:05 +00:00
{{ end }}
2019-06-27 21:58:03 +00:00
[tls.config]
2019-03-14 15:46:05 +00:00
{{ range $i, $e := until 10 }}
2019-06-27 21:58:03 +00:00
[tls.config.TLS{{ $e }}]
2019-03-14 15:46:05 +00:00
# ...
{{ end }}
```
2019-06-26 16:18:04 +00:00
```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:
2019-06-27 21:58:03 +00:00
certificates:
2019-07-01 09:30:05 +00:00
- certFile: "/etc/traefik/cert-{{ $e }}.pem"
keyFile: "/etc/traefik/cert-{{ $e }}.key"
2019-06-27 21:58:03 +00:00
store:
- "my-store-foo-{{ $e }}"
- "my-store-bar-{{ $e }}"
2019-06-26 16:18:04 +00:00
{{end}}
```