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
2017-05-18 20:36:10 +00:00
[![Build Status SemaphoreCI ](https://semaphoreci.com/api/v1/containous/traefik/branches/master/shields_badge.svg )](https://semaphoreci.com/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
2018-02-16 12:22:02 +00:00
Træfik (pronounced like _traffic_ ) is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease.
2017-09-01 17:44:03 +00:00
It supports several backends ([Docker](https://www.docker.com/), [Swarm mode ](https://docs.docker.com/engine/swarm/ ), [Kubernetes ](https://kubernetes.io ), [Marathon ](https://mesosphere.github.io/marathon/ ), [Consul ](https://www.consul.io/ ), [Etcd ](https://coreos.com/etcd/ ), [Rancher ](https://rancher.com ), [Amazon ECS ](https://aws.amazon.com/ecs ), and a lot more) to manage its configuration automatically and dynamically.
2016-03-22 16:25:57 +00:00
2017-08-10 15:29:32 +00:00
---
2017-09-11 17:10:04 +00:00
. ** [Overview ](#overview )** .
**[Features](#features)** .
**[Supported backends](#supported-backends)** .
**[Quickstart](#quickstart)** .
**[Web UI](#web-ui)** .
**[Test it](#test-it)** .
**[Documentation](#documentation)** .
. ** [Support ](#support )** .
**[Release cycle](#release-cycle)** .
**[Contributing](#contributing)** .
**[Maintainers](#maintainers)** .
**[Plumbing](#plumbing)** .
**[Credits](#credits)** .
2017-08-10 15:29:32 +00:00
---
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
2017-12-13 17:22:05 +00:00
Microservices are often deployed in dynamic environments where services are added, removed, killed, upgraded or scaled many times a day.
2016-03-22 16:25:57 +00:00
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!
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
2017-09-01 17:44:03 +00:00
- [It's fast ](https://docs.traefik.io/benchmarks )
2015-10-05 21:22:12 +00:00
- No dependency hell, single binary made with go
2017-09-11 17:10:04 +00:00
- [Tiny ](https://microbadger.com/images/traefik ) [official ](https://hub.docker.com/r/_/traefik/ ) docker image
2016-03-15 15:50:14 +00:00
- Rest API
2015-10-05 21:22:12 +00:00
- Hot-reloading of configuration. No need to restart the process
2017-08-25 18:40:03 +00:00
- Circuit breakers, retry
2015-10-05 21:22:12 +00:00
- Round Robin, rebalancer load-balancers
2017-11-08 14:14:03 +00:00
- Metrics (Rest, Prometheus, Datadog, Statsd, InfluxDB)
2015-10-13 16:05:50 +00:00
- Clean AngularJS Web UI
2017-08-25 18:40:03 +00:00
- Websocket, HTTP/2, GRPC ready
- Access Logs (JSON, CLF)
2016-07-05 19:02:14 +00:00
- [Let's Encrypt ](https://letsencrypt.org ) support (Automatic HTTPS with renewal)
2017-08-25 19:32:03 +00:00
- [Proxy Protocol ](https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt ) support
- High Availability with cluster mode (beta)
2015-10-05 21:22:12 +00:00
2017-08-25 18:40:03 +00:00
## Supported backends
- [Docker ](https://www.docker.com/ ) / [Swarm mode ](https://docs.docker.com/engine/swarm/ )
2017-09-01 17:44:03 +00:00
- [Kubernetes ](https://kubernetes.io )
2017-08-25 18:40:03 +00:00
- [Mesos ](https://github.com/apache/mesos ) / [Marathon ](https://mesosphere.github.io/marathon/ )
- [Rancher ](https://rancher.com ) (API, Metadata)
- [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 ECS ](https://aws.amazon.com/ecs )
- [Amazon DynamoDB ](https://aws.amazon.com/dynamodb )
- File
- Rest API
2017-08-10 15:29:32 +00:00
2016-09-20 12:49:43 +00:00
## Quickstart
2015-09-28 16:25:41 +00:00
2017-06-09 15:22:32 +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. If you are looking for a more comprehensive and real use-case example, you can also check [Play-With-Docker ](http://training.play-with-docker.com/traefik-load-balancing/ ) to see how to load balance between multiple nodes.
2015-09-28 16:25:41 +00:00
2017-08-11 13:19:36 +00:00
Here is a talk given by [Emile Vauge ](https://github.com/emilevauge ) at [GopherCon 2017 ](https://gophercon.com/ ).
2017-09-07 10:02:03 +00:00
You will learn Træfik basics in less than 10 minutes.
2016-10-06 10:24:52 +00:00
2017-09-01 17:44:03 +00:00
[![Traefik GopherCon 2017 ](https://img.youtube.com/vi/RgudiksfL-k/0.jpg )](https://www.youtube.com/watch?v=RgudiksfL-k)
2016-10-06 10:24:52 +00:00
2017-08-11 13:19:36 +00:00
Here is a talk given by [Ed Robinson ](https://github.com/errm ) at [ContainerCamp UK ](https://container.camp ) conference.
You will learn fundamental Træfik features and see some demos with Kubernetes.
2016-05-13 15:32:39 +00:00
2017-09-01 17:44:03 +00:00
[![Traefik ContainerCamp UK ](https://img.youtube.com/vi/aFtpIShV60I/0.jpg )](https://www.youtube.com/watch?v=aFtpIShV60I)
2015-09-28 16:25:41 +00:00
2017-08-10 15:29:32 +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-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
2017-08-10 15:29:32 +00:00
- Use the tiny Docker image 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-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
```
2017-08-10 15:29:32 +00:00
2015-10-05 21:22:12 +00:00
## Documentation
2015-09-22 08:33:37 +00:00
2017-08-25 18:40:03 +00:00
You can find the complete documentation at [https://docs.traefik.io ](https://docs.traefik.io ).
2017-09-07 10:02:03 +00:00
A collection of contributions around Træfik can be found at [https://awesome.traefik.io ](https://awesome.traefik.io ).
2015-09-22 10:03:15 +00:00
2016-08-22 11:15:50 +00:00
2016-05-13 15:32:39 +00:00
## Support
2017-08-10 15:29:32 +00:00
To get basic support, you can:
2017-09-07 10:02:03 +00:00
- join the Træfik community Slack channel: [![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)
2017-08-10 15:29:32 +00:00
- use [Stack Overflow ](https://stackoverflow.com/questions/tagged/traefik ) (using the `traefik` tag)
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
2017-08-10 15:29:32 +00:00
2017-06-30 15:35:26 +00:00
## Release cycle
- Release: We try to release a new version every 2 months
- i.e.: 1.3.0, 1.4.0, 1.5.0
- Release candidate: we do RC (1.**x**.0-rc**y**) before the final release (1.**x**.0)
- i.e.: 1.1.0-rc1 -> 1.1.0-rc2 -> 1.1.0-rc3 -> 1.1.0-rc4 -> 1.1.0
- Bug-fixes: For each version we release bug fixes
- i.e.: 1.1.1, 1.1.2, 1.1.3
- those versions contain only bug-fixes
- no additional features are delivered in those versions
- Each version is supported until the next one is released
- i.e.: 1.1.x will be supported until 1.2.0 is out
- We use [Semantic Versioning ](http://semver.org/ )
2017-08-10 15:29:32 +00:00
## Contributing
2017-08-12 13:40:07 +00:00
Please refer to [contributing documentation ](CONTRIBUTING.md ).
2017-08-10 15:29:32 +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-06-07 17:45:12 +00:00
## Maintainers
2016-07-05 19:02:14 +00:00
2017-08-12 13:40:07 +00:00
[Information about process and maintainers ](MAINTAINER.md )
2017-08-10 15:29:32 +00:00
## Plumbing
- [Oxy ](https://github.com/vulcand/oxy ): an awesome proxy library made by Mailgun folks
- [Gorilla mux ](https://github.com/gorilla/mux ): famous request router
- [Negroni ](https://github.com/urfave/negroni ): web middlewares made simple
- [Lego ](https://github.com/xenolf/lego ): the best [Let's Encrypt ](https://letsencrypt.org ) library in go
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).
2017-05-18 20:36:10 +00:00
The original Go gopher was designed by Renee French (http://reneefrench.blogspot.com/).