No description
middlewares | ||
providerTemplates | ||
static | ||
templates | ||
configuration.go | ||
docker.go | ||
Dockerfile.run | ||
file.go | ||
generate.go | ||
LICENSE.md | ||
marathon.go | ||
provider.go | ||
README.md | ||
ROADMAP.md | ||
traefik.go | ||
traefik.toml | ||
web.go |
/Træfɪk/
/Træfɪk/ is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease. It supports several backends (Docker, Mesos/Marathon, Consul, Etcd, Rest API, file...) to manage its configuration automatically and dynamically (hot-reload).
Features
- No dependency hell, single binary made with go
- Simple json Rest API
- Simple TOML file configuration
- Multiple backends supported: Docker, Mesos/Marathon, Consul, Etcd, and more to come
- Watchers for backends, can listen change in backends to apply a new configuration automatically
- Hot-reloading of configuration. No need to restart the process
- Graceful shutdown http connections during hot-reloads
- Rest Metrics
- Tiny docker image included
- SSL backends support
- SSL frontend support
Plumbing
- Oxy: an awsome proxy librarymade by Mailgun guys
- Gorilla mux: famous request router
- Negroni: web middlewares made simple
- Graceful: graceful shutdown of http.Handler servers
Quick start
- The simple way: go to the releases page and get a binary.
- Or simply execute:
go get github.com/emilevauge/traefik
- Just run it!
./traefik traefik.toml
Configuration
Here is a sample configuration TOML file:
port = ":80"
graceTimeOut = 10
traefikLogsFile = "log/traefik.log"
traefikLogsStdout = true
accessLogsFile = "log/access.log"
logLevel = "DEBUG"
# CertFile = "traefik.crt"
# KeyFile = "traefik.key"
[docker]
endpoint = "unix:///var/run/docker.sock"
watch = true
domain = "localhost"
# filename = "docker.tmpl"
# [marathon]
# endpoint = "http://127.0.0.1:8080"
# networkInterface = "eth0"
# watch = true
# domain = "localhost"
# filename = "marathon.tmpl"
[web]
address = ":8080"
# [file]
# filename = "rules.toml"
# watch = true
[backends]
[backends.backend1]
[backends.backend1.servers.server1]
url = "http://172.17.0.2:80"
weight = 10
[backends.backend1.servers.server2]
url = "http://172.17.0.3:80"
weight = 1
[backends.backend2]
[backends.backend2.servers.server1]
url = "http://172.17.0.4:80"
weight = 1
[routes]
[routes.route1]
backend = "backend2"
[routes.route1.rules.test1]
category = "Host"
value = "test.localhost"
[routes.route2]
backend = "backend1"
[routes.route2.rules.test2]
category = "Path"
value = "/test"