No description
Find a file
2015-09-14 13:27:19 +02:00
docs README 2015-09-14 11:14:37 +02:00
middlewares docker backoff, routes middleware 2015-09-12 19:22:44 +02:00
providerTemplates go-bindata static files and templates 2015-09-11 18:47:54 +02:00
static static 2015-09-11 16:55:44 +02:00
templates Weights 2015-09-11 09:59:29 +02:00
circle.yml CircleCi 2015-09-14 13:27:19 +02:00
configuration.go Negroni middlewares 2015-09-12 15:10:03 +02:00
docker.go docker backoff, routes middleware 2015-09-12 19:22:44 +02:00
Dockerfile Dockerfile rename 2015-09-14 11:34:31 +02:00
file.go Negroni middlewares 2015-09-12 15:10:03 +02:00
generate.go Negroni middlewares 2015-09-12 15:10:03 +02:00
LICENSE.md Licence 2015-09-10 10:02:51 +02:00
marathon.go Negroni middlewares 2015-09-12 15:10:03 +02:00
provider.go web provider 2015-09-08 13:33:10 +02:00
README.md CircleCi 2015-09-14 11:41:50 +02:00
traefik.go docker backoff, routes middleware 2015-09-12 19:22:44 +02:00
traefik.toml README 2015-09-14 11:01:47 +02:00
web.go Negroni middlewares 2015-09-12 15:10:03 +02:00

Træfɪk

Circle CI

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).

Backends

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 library made 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

Global configuration

# traefik.toml
port = ":80"
graceTimeOut = 10
logLevel = "DEBUG"
traefikLogsStdout = true
# traefikLogsFile = "log/traefik.log"
# accessLogsFile = "log/access.log"
# CertFile = "traefik.crt"
# KeyFile = "traefik.key"

File backend

Like any other reverse proxy, Træfɪk can be configured with a file. You have two choices:

  • simply add your configuration at the end of the global configuration file traefik.tml :
# traefik.toml
port = ":80"
graceTimeOut = 10
logLevel = "DEBUG"
traefikLogsStdout = true
# traefikLogsFile = "log/traefik.log"
# accessLogsFile = "log/access.log"
# CertFile = "traefik.crt"
# KeyFile = "traefik.key"

[file]

[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"

  • or put your configuration in a separate file, for example rules.tml:
# traefik.toml
port = ":80"
graceTimeOut = 10
logLevel = "DEBUG"
traefikLogsStdout = true
# traefikLogsFile = "log/traefik.log"
# accessLogsFile = "log/access.log"
# CertFile = "traefik.crt"
# KeyFile = "traefik.key"

[file]
filename = "rules.toml"
# rules.toml
[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"

If you want Træfɪk to watch file changes automatically, just add:

[file]
watch = true