2016-02-29 18:27:09 +01:00
< p align = "center" >
2017-03-31 06:29:03 +02:00
< img src = "docs/img/traefik.logo.png" alt = "Træfik" title = "Træfik" / >
2016-02-29 18:27:09 +01:00
< / p >
2015-09-13 19:34:05 +02:00
2016-02-24 16:43:39 +01:00
[![Build Status ](https://travis-ci.org/containous/traefik.svg?branch=master )](https://travis-ci.org/containous/traefik)
2016-03-22 17:25:57 +01:00
[![Docs ](https://img.shields.io/badge/docs-current-brightgreen.svg )](https://docs.traefik.io)
2016-12-23 14:18:04 +01:00
[![Go Report Card ](https://goreportcard.com/badge/containous/traefik )](http://goreportcard.com/report/containous/traefik)
2016-09-30 15:04:37 +02:00
[![ ](https://images.microbadger.com/badges/image/traefik.svg )](https://microbadger.com/images/traefik)
2016-03-15 16:50:14 +01:00
[![License ](https://img.shields.io/badge/license-MIT-blue.svg )](https://github.com/containous/traefik/blob/master/LICENSE.md)
2015-10-28 11:39:24 +01: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 10:25:59 +01:00
[![Twitter ](https://img.shields.io/twitter/follow/traefikproxy.svg?style=social )](https://twitter.com/intent/follow?screen_name=traefikproxy)
2015-09-22 16:07:49 +02:00
2017-04-20 00:18:34 +02: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-08 18:53:34 -07: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 17:25:57 +01: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 06:29:03 +02:00
Here enters Træfik.
2016-03-22 17:25:57 +01:00
![Architecture ](docs/img/architecture.png )
2017-03-31 06:29:03 +02: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 17:25:57 +01:00
Routes to your services will be created instantly.
Run it and forget it!
2017-03-31 06:29:03 +02:00
2015-09-13 19:34:05 +02:00
2015-09-14 11:01:47 +02:00
2015-10-05 23:22:12 +02:00
## Features
2016-04-05 20:47:38 +02:00
- [It's fast ](http://docs.traefik.io/benchmarks )
2015-10-05 23:22:12 +02:00
- No dependency hell, single binary made with go
2016-03-15 16:50:14 +01:00
- Rest API
2016-09-30 15:04:37 +02:00
- Multiple backends supported: Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, and more to come
2016-07-18 14:55:45 +09:00
- Watchers for backends, can listen for changes in backends to apply a new configuration automatically
2015-10-05 23:22:12 +02:00
- Hot-reloading of configuration. No need to restart the process
2016-03-04 11:32:23 +01:00
- Graceful shutdown http connections
2015-10-05 23:22:12 +02:00
- Circuit breakers on backends
- Round Robin, rebalancer load-balancers
- Rest Metrics
2016-10-27 16:17:02 +02:00
- [Tiny ](https://microbadger.com/images/traefik ) [official ](https://hub.docker.com/r/_/traefik/ ) docker image included
2015-10-05 23:22:12 +02:00
- SSL backends support
2016-03-15 16:50:14 +01:00
- SSL frontend support (with SNI)
2015-10-13 18:05:50 +02:00
- Clean AngularJS Web UI
- Websocket support
2016-02-18 10:31:56 +01:00
- HTTP/2 support
2016-03-29 22:25:32 +02:00
- Retry request if network error
2016-07-05 21:02:14 +02:00
- [Let's Encrypt ](https://letsencrypt.org ) support (Automatic HTTPS with renewal)
2016-09-30 15:04:37 +02:00
- High Availability with cluster mode
2015-10-05 23:22:12 +02:00
2016-09-20 14:49:43 +02:00
## Quickstart
2015-09-28 18:25:41 +02:00
2017-03-31 06:29:03 +02: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 18:25:41 +02:00
2016-10-06 12:24:52 +02:00
Here is a talk given by [Ed Robinson ](https://github.com/errm ) at the [ContainerCamp UK ](https://container.camp ) conference.
2017-03-31 06:29:03 +02:00
You will learn fundamental Træfik features and see some demos with Kubernetes.
2016-10-06 12:24:52 +02:00
[![Traefik ContainerCamp UK ](http://img.youtube.com/vi/aFtpIShV60I/0.jpg )](https://www.youtube.com/watch?v=aFtpIShV60I)
2017-03-31 06:29:03 +02: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 17:32:39 +02:00
[![Traefik Devoxx France ](http://img.youtube.com/vi/QvAz9mVx5TI/0.jpg )](http://www.youtube.com/watch?v=QvAz9mVx5TI)
2015-09-28 18:25:41 +02:00
2015-10-13 18:05:50 +02:00
## Web UI
2017-04-18 22:12:17 +02:00
You can access the simple HTML frontend of Træfik.
2015-10-13 18:05:50 +02:00
![Web UI Providers ](docs/img/web.frontend.png )
![Web UI Health ](docs/img/traefik-health.png )
2015-10-05 23:22:12 +02:00
## Plumbing
2015-09-13 19:34:05 +02:00
2016-04-21 23:38:44 +01:00
- [Oxy ](https://github.com/vulcand/oxy ): an awesome proxy library made by Mailgun guys
2015-10-05 23:22:12 +02:00
- [Gorilla mux ](https://github.com/gorilla/mux ): famous request router
- [Negroni ](https://github.com/codegangsta/negroni ): web middlewares made simple
2016-03-15 16:50:14 +01:00
- [Lego ](https://github.com/xenolf/lego ): the best [Let's Encrypt ](https://letsencrypt.org ) library in go
2015-09-13 19:34:05 +02:00
2016-10-06 12:24:52 +02:00
## Test it
2015-09-13 19:34:05 +02:00
2016-02-24 16:43:39 +01: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 19:34:05 +02:00
2015-10-05 23:22:12 +02:00
```shell
2016-05-30 11:37:12 +02:00
./traefik --configFile=traefik.toml
2015-09-13 19:34:05 +02:00
```
2015-09-14 14:38:21 +02:00
2015-10-05 23:22:12 +02:00
- Use the tiny Docker image:
2015-09-13 19:34:05 +02:00
2015-10-05 23:22:12 +02:00
```shell
2016-04-07 15:36:48 +02:00
docker run -d -p 8080:8080 -p 80:80 -v $PWD/traefik.toml:/etc/traefik/traefik.toml traefik
2015-09-13 19:34:05 +02:00
```
2015-10-05 23:22:12 +02:00
- From sources:
2015-09-22 10:50:33 +02:00
2015-10-05 23:22:12 +02:00
```shell
2016-02-24 16:43:39 +01:00
git clone https://github.com/containous/traefik
2015-09-22 10:50:33 +02:00
```
2015-10-05 23:22:12 +02:00
## Documentation
2015-09-22 10:33:37 +02:00
2016-03-22 17:25:57 +01:00
You can find the complete documentation [here ](https://docs.traefik.io ).
2015-09-22 12:03:15 +02:00
2016-02-18 10:25:59 +01:00
## Contributing
2015-09-26 14:42:56 +02:00
2016-02-18 10:25:59 +01:00
Please refer to [this section ](.github/CONTRIBUTING.md ).
2015-09-26 14:42:56 +02:00
2016-08-22 12:15:50 +01: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 17:32:39 +02: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 14:55:45 +09:00
If you prefer commercial support, please contact [containo.us ](https://containo.us ) by mail: < mailto:support @containo .us > .
2016-05-13 17:32:39 +02:00
2016-06-07 19:45:12 +02:00
## Maintainers
2016-07-05 21:02:14 +02:00
2016-06-07 19:45:12 +02:00
- Emile Vauge [@emilevauge ](https://github.com/emilevauge )
- Vincent Demeester [@vdemeester ](https://github.com/vdemeester )
2016-07-05 21:02:14 +02:00
- Russell Clare [@Russell-IO ](https://github.com/Russell-IO )
- Ed Robinson [@errm ](https://github.com/errm )
2016-11-09 21:59:58 +01:00
- Daniel Tomcej [@dtomcej ](https://github.com/dtomcej )
- Manuel Laufenberg [@SantoDE ](https://github.com/SantoDE )
2017-03-07 00:38:44 +01:00
- Thomas Recloux [@trecloux ](https://github.com/trecloux )
2017-03-02 02:00:53 +01:00
- Timo Reimann [@timoreimann ](https://github.com/timoreimann )
2016-04-27 00:02:03 +02:00
## Credits
2017-04-24 15:34:12 +02: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/).