No description
Find a file
Thorhallur Sverrisson a07e395181 Refactoring REST API to handle multiple providers.
I changed what I think is needed and I have done manual testing on this.

I tried to keep the changes to a minimun.

The changes are approx:

* HTML output now includes the provider name in parenthesis.
  * I'm not versed in bootstrap, should the output group providers in a
  * table?
* PUT is only enabled on /api/web.
* GET on /api returns a map containing all providers configuration
* GET on /api/{provider} will return the config as before on that
* provider.
2015-09-23 11:45:18 +00:00
docs Configuration on cicuitbreakers and load balancers 2015-09-28 23:16:32 +02:00
Godeps Add initial test-integration suites 2015-09-28 20:29:35 +02:00
integration Make fixtures files template-able :) 2015-09-28 22:46:45 +02:00
middlewares Configuration on cicuitbreakers and load balancers 2015-09-28 23:16:32 +02:00
providerTemplates Configuration on cicuitbreakers and load balancers 2015-09-28 23:16:32 +02:00
script Update build toolchain to the use of docker… 2015-09-28 20:27:59 +02:00
static static 2015-09-11 16:55:44 +02:00
templates Refactoring REST API to handle multiple providers. 2015-09-23 11:45:18 +00:00
tests Configuration on cicuitbreakers and load balancers 2015-09-28 23:16:32 +02:00
.gitignore Merge PR https://github.com/EmileVauge/traefik/pull/3 2015-09-22 11:29:41 +02:00
adapters.go Fix some typos, fmt and imports :) 2015-09-24 17:16:13 +02:00
build.Dockerfile Update build toolchain to the use of docker… 2015-09-28 20:27:59 +02:00
circle.yml Use curl to wait for docker to be up on circleci… 2015-09-28 23:18:15 +02:00
configuration.go Configuration on cicuitbreakers and load balancers 2015-09-28 23:16:32 +02:00
consul.go Configuration on cicuitbreakers and load balancers 2015-09-28 23:16:32 +02:00
docker.go Adding caching and merging of configurations 2015-09-23 11:25:11 +00:00
Dockerfile Corrects https://github.com/EmileVauge/traefik/issues/21 2015-09-25 17:46:52 +02:00
file.go Adding caching and merging of configurations 2015-09-23 11:25:11 +00:00
file_test.go Update building stuff 2015-09-15 23:09:48 +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
Makefile Update build toolchain to the use of docker… 2015-09-28 20:27:59 +02:00
marathon.go Adding caching and merging of configurations 2015-09-23 11:25:11 +00:00
provider.go Adding caching and merging of configurations 2015-09-23 11:25:11 +00:00
README.md Merge branch 'master' into zero-downtime-reload 2015-09-28 18:52:08 +01:00
traefik.go Configuration on cicuitbreakers and load balancers 2015-09-28 23:16:32 +02:00
traefik.sample.toml Configuration on cicuitbreakers and load balancers 2015-09-28 23:16:32 +02:00
web.go Refactoring REST API to handle multiple providers. 2015-09-23 11:45:18 +00:00

Træfɪk


Circle CI License Join the chat at https://gitter.im/EmileVauge/traefik

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.

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
  • Circuit breakers on backends
  • Round Robin, rebalancer load-balancers
  • Rest Metrics
  • Tiny docker image included
  • SSL backends support
  • SSL frontend support
  • WebUI

Demo

Here is a demo of Træfɪk using Docker backend, showing a load-balancing between two servers, hot reloading of configuration, and graceful shutdown.

asciicast

Plumbing

  • Oxy: an awsome proxy library made by Mailgun guys
  • Gorilla mux: famous request router
  • Negroni: web middlewares made simple
  • Manners: graceful shutdown of http.Handler servers

Quick start

./traefik traefik.toml
  • Use the tiny Docker image:
docker run -d -p 8080:8080 -p 80:80 -v $PWD/traefik.toml:/traefik.toml emilevauge/traefik
  • From sources:
git clone https://github.com/EmileVauge/traefik

Documentation

You can find the complete documentation here.

Benchmarks

Refer to the benchmarks section in the documentation.

Contributing

Building

You need either Docker and make, or go and godep in order to build traefik.

Using Docker and Makefile

You need to run the binary target. This will create binaries for linux and darwin platforms in the dist folder.

$ make binary
docker build -t "traefik-dev:your-feature-branch" -f build.Dockerfile .
# […]
docker run --rm -it -e OS_ARCH_ARG -e OS_PLATFORM_ARG -e TESTFLAGS -v "/home/vincent/src/github/vdemeester/traefik/dist:/go/src/github.com/emilevauge/traefik/dist" "traefik-dev:your-feature-branch" ./script/make.sh generate binary
---> Making bundle: generate (in .)
removed 'gen.go'

---> Making bundle: binary (in .)
Number of parallel builds: 8

-->       linux/arm: github.com/emilevauge/traefik
-->    darwin/amd64: github.com/emilevauge/traefik
-->      darwin/386: github.com/emilevauge/traefik
-->       linux/386: github.com/emilevauge/traefik
-->     linux/amd64: github.com/emilevauge/traefik

$ ls dist/
traefik*  traefik_darwin-386*  traefik_darwin-amd64*  traefik_linux-386*  traefik_linux-amd64*  traefik_linux-arm*

Using godep

The idea behind godep is the following :

  • when checkout(ing) a project, run godep restore to install (go get …) the dependencies in the GOPATH.
  • if you need another dependency, go get it, import and use it in the source, and **run godep save ./... to save it in Godeps/Godeps.json and vendoring it in Godeps/_workspace/src.
$ godep restore
# Generate
$ godep go generate
# Simple go build
$ godep go build
# Using gox to build multiple platform
$ GOPATH=`godep path`:$GOPATH gox "linux darwin" "386 amd64 arm" \
    -output="dist/traefik_{{.OS}}-{{.Arch}}"
# run other commands like tests
$ godep go test ./...
ok      _/home/vincent/src/github/vdemeester/traefik    0.004s

Tests

You can run unit tests using the test-unit target and the integration test using the test-integration target.

$ make test-unit
docker build -t "traefik-dev:your-feature-branch" -f build.Dockerfile .
# […]
docker run --rm -it -e OS_ARCH_ARG -e OS_PLATFORM_ARG -e TESTFLAGS -v "/home/vincent/src/github/vdemeester/traefik/dist:/go/src/github.com/emilevauge/traefik/dist" "traefik-dev:your-feature-branch" ./script/make.sh generate test-unit
---> Making bundle: generate (in .)
removed 'gen.go'

---> Making bundle: test-unit (in .)
+ go test -cover -coverprofile=cover.out .
ok      github.com/emilevauge/traefik   0.005s  coverage: 4.1% of statements

Test success