Go to file
Vincent Demeester 6f3afe8213 Add .dockerignore to lightweight build context
Ignoring vendor/ and dist/

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-10-30 12:10:13 +01:00
docs Correct BoltDB backend. Fixes #68 2015-10-23 22:21:16 +02:00
integration Add a regression test for #56 :) 2015-10-17 14:46:31 +02:00
middlewares Pass websocket headers to backend 2015-10-29 22:45:41 +01:00
script Add a all target than runs default tasks 2015-10-30 09:11:43 +01:00
static refactor(rest) : add json annotation on configuration 2015-10-10 14:24:36 +02:00
templates Correct BoltDB backend. Fixes #68 2015-10-23 22:21:16 +02:00
tests Adds traefik.frontend. rule and value labels in Docker and Marathon. Fixes #64. Fixes #73 2015-10-23 17:46:50 +02:00
.dockerignore Add .dockerignore to lightweight build context 2015-10-30 12:10:13 +01:00
.gitignore Update package management with Glide 2015-10-13 22:56:44 +02:00
adapters.go Fix some typos, fmt and imports :) 2015-09-24 17:16:13 +02:00
boltdb.go libkv support https://github.com/EmileVauge/traefik/issues/25 https://github.com/EmileVauge/traefik/issues/9 2015-10-02 11:36:16 +02:00
build.Dockerfile Update package management with Glide 2015-10-13 22:56:44 +02:00
circle.yml Fixing circleci builds 2015-10-29 14:41:32 +01:00
configuration.go Move config objects to configuration.go 2015-10-23 17:46:50 +02:00
consul.go libkv support https://github.com/EmileVauge/traefik/issues/25 https://github.com/EmileVauge/traefik/issues/9 2015-10-02 11:36:16 +02:00
docker.go Code review corrections 2015-10-27 00:26:35 +01:00
Dockerfile Corrects https://github.com/EmileVauge/traefik/issues/21 2015-09-25 17:46:52 +02:00
etcd.go libkv support https://github.com/EmileVauge/traefik/issues/25 https://github.com/EmileVauge/traefik/issues/9 2015-10-02 11:36:16 +02:00
file.go Add /api/providers API 2015-10-03 16:50:53 +02:00
file_test.go Update building stuff 2015-09-15 23:09:48 +02:00
generate.go Use go generate for dockerversion 2015-10-29 22:10:59 +01:00
glide.yaml update docs 2015-10-14 13:21:40 +02:00
kv.go Correct BoltDB backend. Fixes #68 2015-10-23 22:21:16 +02:00
LICENSE.md Licence 2015-09-10 10:02:51 +02:00
Makefile Add a all target than runs default tasks 2015-10-30 09:11:43 +01:00
marathon.go Code review corrections 2015-10-27 00:26:35 +01:00
provider.go libkv support https://github.com/EmileVauge/traefik/issues/25 https://github.com/EmileVauge/traefik/issues/9 2015-10-02 11:36:16 +02:00
README.md Update docs with Slack 2015-10-28 13:25:57 +01:00
traefik.go Remove providerTemplates dir, moved in templates 2015-10-23 17:46:50 +02:00
traefik.sample.toml Rename BackendsThrottleDuration to ProvidersThrottleDuration 2015-10-17 14:14:20 +02:00
web.go Remove providerTemplates dir, moved in templates 2015-10-23 17:46:50 +02:00
zk.go libkv support https://github.com/EmileVauge/traefik/issues/25 https://github.com/EmileVauge/traefik/issues/9 2015-10-02 11:36:16 +02:00

Træfɪk


Circle CI License Join the chat at https://traefik.herokuapp.com

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, Zookeeper, BoltDB, 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
  • Clean AngularJS Web UI
  • Websocket support

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

Web UI

You can access to a simple HTML frontend of Træfik.

Web UI Providers Web UI Health

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 glide in order to build traefik.

Setting up your go environment

  • You need go v1.5
  • You need to set export GO15VENDOREXPERIMENT=1 environment variable
  • If you clone Træfɪk into something like ~/go/src/github.com/traefik, your GOPATH variable will have to be set to ~/go: export GOPATH=~/go.

Using Docker and Makefile

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

$ make binary
docker build -t "traefik-dev:no-more-godep-ever" -f build.Dockerfile .
Sending build context to Docker daemon 295.3 MB
Step 0 : FROM golang:1.5
 ---> 8c6473912976
Step 1 : RUN go get github.com/Masterminds/glide
[...]
docker run --rm  -v "/var/run/docker.sock:/var/run/docker.sock" -it -e OS_ARCH_ARG -e OS_PLATFORM_ARG -e TESTFLAGS -v "/home/emile/dev/go/src/github.com/emilevauge/traefik/"dist":/go/src/github.com/emilevauge/traefik/"dist"" "traefik-dev:no-more-godep-ever" ./script/make.sh generate binary
---> Making bundle: generate (in .)
removed 'gen.go'

---> Making bundle: binary (in .)

$ ls dist/
traefik*

Using glide

The idea behind glide is the following :

  • when checkout(ing) a project, run glide up to install (go get …) the dependencies in the GOPATH.
  • if you need another dependency, import and use it in the source, and run glide get github.com/Masterminds/cookoo to save it in vendor and add it to your glide.yaml.
$ glide up --update-vendored
# generate
$ go generate
# Simple go build
$ go build
# Using gox to build multiple platform
$ gox "linux darwin" "386 amd64 arm" \
    -output="dist/traefik_{{.OS}}-{{.Arch}}"
# run other commands like tests
$ 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