traefik/README.md

156 lines
3.7 KiB
Markdown
Raw Normal View History

2015-09-14 09:01:47 +00:00
![/Træfɪk/](docs/img/traefik.logo.png "/Træfɪk/")
2015-09-13 17:34:05 +00:00
/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 (hot-reload).
2015-09-14 09:01:47 +00:00
![Backends](docs/img/backends.png "Backends")
# Features
2015-09-13 17:34:05 +00:00
* 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
* Rest Metrics
* Tiny docker image included
* SSL backends support
* SSL frontend support
2015-09-14 09:01:47 +00:00
# Plumbing
2015-09-13 17:34:05 +00:00
2015-09-14 09:01:47 +00:00
* [Oxy](https://github.com/mailgun/oxy/): an awsome proxy library made by Mailgun guys
2015-09-13 19:12:24 +00:00
* [Gorilla mux](https://github.com/gorilla/mux): famous request router
* [Negroni](https://github.com/codegangsta/negroni): web middlewares made simple
* [Graceful](https://github.com/tylerb/graceful): graceful shutdown of http.Handler servers
2015-09-13 17:34:05 +00:00
2015-09-14 09:01:47 +00:00
# Quick start
2015-09-13 17:34:05 +00:00
* The simple way: go to the [releases](https://github.com/emilevauge/traefik/releases) page and get a binary.
* Or simply execute:
```
go get github.com/emilevauge/traefik
```
* Just run it!
```
./traefik traefik.toml
```
2015-09-14 09:01:47 +00:00
# Configuration
## Global configuration
```toml
# traefik.toml
port = ":80"
graceTimeOut = 10
logLevel = "DEBUG"
traefikLogsStdout = true
# traefikLogsFile = "log/traefik.log"
# accessLogsFile = "log/access.log"
# CertFile = "traefik.crt"
# KeyFile = "traefik.key"
```
## File backend
2015-09-13 17:34:05 +00:00
2015-09-14 09:01:47 +00:00
Like any other reverse proxy, /Træfɪk/ can be configured with a file. You have two choices:
* simply add your configuration at the end of the global configuration file ```traefik.tml``` :
2015-09-13 17:34:05 +00:00
```toml
2015-09-14 09:01:47 +00:00
# traefik.toml
2015-09-13 17:34:05 +00:00
port = ":80"
graceTimeOut = 10
logLevel = "DEBUG"
2015-09-13 19:08:43 +00:00
traefikLogsStdout = true
# traefikLogsFile = "log/traefik.log"
# accessLogsFile = "log/access.log"
2015-09-13 17:34:05 +00:00
# CertFile = "traefik.crt"
# KeyFile = "traefik.key"
2015-09-14 09:01:47 +00:00
[file]
[backends]
[backends.backend1]
[backends.backend1.servers.server1]
url = "http://172.17.0.2:80"
weight = 10
[backends.backend1.servers.server2]
url = "http://172.17.0.3:80"
weight = 1
[backends.backend2]
[backends.backend2.servers.server1]
url = "http://172.17.0.4:80"
weight = 1
[routes]
[routes.route1]
backend = "backend2"
[routes.route1.rules.test1]
category = "Host"
value = "test.localhost"
[routes.route2]
backend = "backend1"
[routes.route2.rules.test2]
category = "Path"
value = "/test"
```
2015-09-13 19:08:43 +00:00
2015-09-14 09:01:47 +00:00
* or put your configuration in a separate file, for example ```rules.tml```:
2015-09-13 17:34:05 +00:00
2015-09-14 09:01:47 +00:00
```toml
# traefik.toml
port = ":80"
graceTimeOut = 10
logLevel = "DEBUG"
traefikLogsStdout = true
# traefikLogsFile = "log/traefik.log"
# accessLogsFile = "log/access.log"
# CertFile = "traefik.crt"
# KeyFile = "traefik.key"
2015-09-13 17:34:05 +00:00
2015-09-14 09:01:47 +00:00
[file]
filename = "rules.toml"
```
2015-09-13 17:34:05 +00:00
2015-09-14 09:01:47 +00:00
```toml
# rules.toml
2015-09-13 17:34:05 +00:00
[backends]
[backends.backend1]
[backends.backend1.servers.server1]
url = "http://172.17.0.2:80"
weight = 10
[backends.backend1.servers.server2]
url = "http://172.17.0.3:80"
weight = 1
[backends.backend2]
[backends.backend2.servers.server1]
url = "http://172.17.0.4:80"
weight = 1
[routes]
[routes.route1]
backend = "backend2"
[routes.route1.rules.test1]
category = "Host"
value = "test.localhost"
[routes.route2]
backend = "backend1"
[routes.route2.rules.test2]
category = "Path"
value = "/test"
2015-09-14 09:01:47 +00:00
```
If you want /Træfɪk/ to watch file changes automatically, just add:
2015-09-13 17:34:05 +00:00
2015-09-14 09:01:47 +00:00
```toml
[file]
watch = true
2015-09-13 17:34:05 +00:00
```