2016-02-29 17:27:09 +00:00
< p align = "center" >
2017-03-31 04:29:03 +00:00
< img src = "docs/img/traefik.logo.png" alt = "Træfik" title = "Træfik" / >
2016-02-29 17:27:09 +00:00
< / p >
2015-09-13 17:34:05 +00:00
2016-02-24 15:43:39 +00:00
[![Build Status ](https://travis-ci.org/containous/traefik.svg?branch=master )](https://travis-ci.org/containous/traefik)
2016-03-22 16:25:57 +00:00
[![Docs ](https://img.shields.io/badge/docs-current-brightgreen.svg )](https://docs.traefik.io)
2016-12-23 13:18:04 +00:00
[![Go Report Card ](https://goreportcard.com/badge/containous/traefik )](http://goreportcard.com/report/containous/traefik)
2016-09-30 13:04:37 +00:00
[![ ](https://images.microbadger.com/badges/image/traefik.svg )](https://microbadger.com/images/traefik)
2016-03-15 15:50:14 +00:00
[![License ](https://img.shields.io/badge/license-MIT-blue.svg )](https://github.com/containous/traefik/blob/master/LICENSE.md)
2015-10-28 10:39:24 +00:00
[![Join the chat at https://traefik.herokuapp.com ](https://img.shields.io/badge/style-register-green.svg?style=social&label=Slack )](https://traefik.herokuapp.com)
2016-02-18 09:25:59 +00:00
[![Twitter ](https://img.shields.io/twitter/follow/traefikproxy.svg?style=social )](https://twitter.com/intent/follow?screen_name=traefikproxy)
2015-09-22 14:07:49 +00:00
2017-04-19 22:18:34 +00:00
Træfik (pronounced like [traffic ](https://speak-ipa.bearbin.net/speak.cgi?speak=%CB%88tr%C3%A6f%C9%AAk )) is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease.
2017-03-09 01:53:34 +00:00
It supports several backends ([Docker](https://www.docker.com/), [Swarm ](https://docs.docker.com/swarm ), [Kubernetes ](http://kubernetes.io ), [Marathon ](https://mesosphere.github.io/marathon/ ), [Mesos ](https://github.com/apache/mesos ), [Consul ](https://www.consul.io/ ), [Etcd ](https://coreos.com/etcd/ ), [Zookeeper ](https://zookeeper.apache.org ), [BoltDB ](https://github.com/boltdb/bolt ), [Eureka ](https://github.com/Netflix/eureka ), [Amazon DynamoDB ](https://aws.amazon.com/dynamodb/ ), Rest API, file...) to manage its configuration automatically and dynamically.
2016-03-22 16:25:57 +00:00
## Overview
Imagine that you have deployed a bunch of microservices on your infrastructure. You probably used a service registry (like etcd or consul) and/or an orchestrator (swarm, Mesos/Marathon) to manage all these services.
If you want your users to access some of your microservices from the Internet, you will have to use a reverse proxy and configure it using virtual hosts or prefix paths:
- domain `api.domain.com` will point the microservice `api` in your private network
- path `domain.com/web` will point the microservice `web` in your private network
- domain `backoffice.domain.com` will point the microservices `backoffice` in your private network, load-balancing between your multiple instances
But a microservices architecture is dynamic... Services are added, removed, killed or upgraded often, eventually several times a day.
Traditional reverse-proxies are not natively dynamic. You can't change their configuration and hot-reload easily.
2017-03-31 04:29:03 +00:00
Here enters Træfik.
2016-03-22 16:25:57 +00:00
![Architecture ](docs/img/architecture.png )
2017-03-31 04:29:03 +00:00
Træfik can listen to your service registry/orchestrator API, and knows each time a microservice is added, removed, killed or upgraded, and can generate its configuration automatically.
2016-03-22 16:25:57 +00:00
Routes to your services will be created instantly.
Run it and forget it!
2017-03-31 04:29:03 +00:00
2015-09-13 17:34:05 +00:00
2015-09-14 09:01:47 +00:00
2015-10-05 21:22:12 +00:00
## Features
2016-04-05 18:47:38 +00:00
- [It's fast ](http://docs.traefik.io/benchmarks )
2015-10-05 21:22:12 +00:00
- No dependency hell, single binary made with go
2016-03-15 15:50:14 +00:00
- Rest API
2016-09-30 13:04:37 +00:00
- Multiple backends supported: Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, and more to come
2016-07-18 05:55:45 +00:00
- Watchers for backends, can listen for changes in backends to apply a new configuration automatically
2015-10-05 21:22:12 +00:00
- Hot-reloading of configuration. No need to restart the process
2016-03-04 10:32:23 +00:00
- Graceful shutdown http connections
2015-10-05 21:22:12 +00:00
- Circuit breakers on backends
- Round Robin, rebalancer load-balancers
- Rest Metrics
2016-10-27 14:17:02 +00:00
- [Tiny ](https://microbadger.com/images/traefik ) [official ](https://hub.docker.com/r/_/traefik/ ) docker image included
2015-10-05 21:22:12 +00:00
- SSL backends support
2016-03-15 15:50:14 +00:00
- SSL frontend support (with SNI)
2015-10-13 16:05:50 +00:00
- Clean AngularJS Web UI
- Websocket support
2016-02-18 09:31:56 +00:00
- HTTP/2 support
2016-03-29 20:25:32 +00:00
- Retry request if network error
2016-07-05 19:02:14 +00:00
- [Let's Encrypt ](https://letsencrypt.org ) support (Automatic HTTPS with renewal)
2016-09-30 13:04:37 +00:00
- High Availability with cluster mode
2015-10-05 21:22:12 +00:00
2016-09-20 12:49:43 +00:00
## Quickstart
2015-09-28 16:25:41 +00:00
2017-03-31 04:29:03 +00:00
You can have a quick look at Træfik in this [Katacoda tutorial ](https://www.katacoda.com/courses/traefik/deploy-load-balancer ) that shows how to load balance requests between multiple Docker containers.
2015-09-28 16:25:41 +00:00
2016-10-06 10:24:52 +00:00
Here is a talk given by [Ed Robinson ](https://github.com/errm ) at the [ContainerCamp UK ](https://container.camp ) conference.
2017-03-31 04:29:03 +00:00
You will learn fundamental Træfik features and see some demos with Kubernetes.
2016-10-06 10:24:52 +00:00
[![Traefik ContainerCamp UK ](http://img.youtube.com/vi/aFtpIShV60I/0.jpg )](https://www.youtube.com/watch?v=aFtpIShV60I)
2017-03-31 04:29:03 +00:00
Here is a talk (in French) given by [Emile Vauge ](https://github.com/emilevauge ) at the [Devoxx France 2016 ](http://www.devoxx.fr ) conference.
You will learn fundamental Træfik features and see some demos with Docker, Mesos/Marathon and Let's Encrypt.
2016-05-13 15:32:39 +00:00
[![Traefik Devoxx France ](http://img.youtube.com/vi/QvAz9mVx5TI/0.jpg )](http://www.youtube.com/watch?v=QvAz9mVx5TI)
2015-09-28 16:25:41 +00:00
2015-10-13 16:05:50 +00:00
## Web UI
2017-04-18 20:12:17 +00:00
You can access the simple HTML frontend of Træfik.
2015-10-13 16:05:50 +00:00
![Web UI Providers ](docs/img/web.frontend.png )
![Web UI Health ](docs/img/traefik-health.png )
2015-10-05 21:22:12 +00:00
## Plumbing
2015-09-13 17:34:05 +00:00
2016-04-21 22:38:44 +00:00
- [Oxy ](https://github.com/vulcand/oxy ): an awesome proxy library made by Mailgun guys
2015-10-05 21:22:12 +00:00
- [Gorilla mux ](https://github.com/gorilla/mux ): famous request router
- [Negroni ](https://github.com/codegangsta/negroni ): web middlewares made simple
2016-03-15 15:50:14 +00:00
- [Lego ](https://github.com/xenolf/lego ): the best [Let's Encrypt ](https://letsencrypt.org ) library in go
2015-09-13 17:34:05 +00:00
2016-10-06 10:24:52 +00:00
## Test it
2015-09-13 17:34:05 +00:00
2016-02-24 15:43:39 +00:00
- The simple way: grab the latest binary from the [releases ](https://github.com/containous/traefik/releases ) page and just run it with the [sample configuration file ](https://raw.githubusercontent.com/containous/traefik/master/traefik.sample.toml ):
2015-09-13 17:34:05 +00:00
2015-10-05 21:22:12 +00:00
```shell
2016-05-30 09:37:12 +00:00
./traefik --configFile=traefik.toml
2015-09-13 17:34:05 +00:00
```
2015-09-14 12:38:21 +00:00
2015-10-05 21:22:12 +00:00
- Use the tiny Docker image:
2015-09-13 17:34:05 +00:00
2015-10-05 21:22:12 +00:00
```shell
2016-04-07 13:36:48 +00:00
docker run -d -p 8080:8080 -p 80:80 -v $PWD/traefik.toml:/etc/traefik/traefik.toml traefik
2015-09-13 17:34:05 +00:00
```
2015-10-05 21:22:12 +00:00
- From sources:
2015-09-22 08:50:33 +00:00
2015-10-05 21:22:12 +00:00
```shell
2016-02-24 15:43:39 +00:00
git clone https://github.com/containous/traefik
2015-09-22 08:50:33 +00:00
```
2015-10-05 21:22:12 +00:00
## Documentation
2015-09-22 08:33:37 +00:00
2016-03-22 16:25:57 +00:00
You can find the complete documentation [here ](https://docs.traefik.io ).
2015-09-22 10:03:15 +00:00
2016-02-18 09:25:59 +00:00
## Contributing
2015-09-26 12:42:56 +00:00
2016-02-18 09:25:59 +00:00
Please refer to [this section ](.github/CONTRIBUTING.md ).
2015-09-26 12:42:56 +00:00
2016-08-22 11:15:50 +00:00
## Code Of Conduct
Please note that this project is released with a [Contributor Code of Conduct ](CODE_OF_CONDUCT.md ). By participating in this project you agree to abide by its terms.
2016-05-13 15:32:39 +00:00
## Support
You can join [![Join the chat at https://traefik.herokuapp.com ](https://img.shields.io/badge/style-register-green.svg?style=social&label=Slack )](https://traefik.herokuapp.com) to get basic support.
2016-07-18 05:55:45 +00:00
If you prefer commercial support, please contact [containo.us ](https://containo.us ) by mail: < mailto:support @ containo . us > .
2016-05-13 15:32:39 +00:00
2016-06-07 17:45:12 +00:00
## Maintainers
2016-07-05 19:02:14 +00:00
2016-06-07 17:45:12 +00:00
- Emile Vauge [@emilevauge ](https://github.com/emilevauge )
- Vincent Demeester [@vdemeester ](https://github.com/vdemeester )
2016-07-05 19:02:14 +00:00
- Russell Clare [@Russell-IO ](https://github.com/Russell-IO )
- Ed Robinson [@errm ](https://github.com/errm )
2016-11-09 20:59:58 +00:00
- Daniel Tomcej [@dtomcej ](https://github.com/dtomcej )
- Manuel Laufenberg [@SantoDE ](https://github.com/SantoDE )
2017-03-06 23:38:44 +00:00
- Thomas Recloux [@trecloux ](https://github.com/trecloux )
2017-03-02 01:00:53 +00:00
- Timo Reimann [@timoreimann ](https://github.com/timoreimann )
2016-04-26 22:02:03 +00:00
## Credits
2017-04-24 13:34:12 +00:00
Kudos to [Peka ](http://peka.byethost11.com/photoblog/ ) for his awesome work on the logo ![logo ](docs/img/traefik.icon.png ).
Traefik's logo licensed under the Creative Commons 3.0 Attributions license.
Traefik's logo was inspired by the gopher stickers made by Takuya Ueda (https://twitter.com/tenntenn).
The original Go gopher was designed by Renee French (http://reneefrench.blogspot.com/).