From 2d956da3e1d8b01e843eaf71927032c7953e2cd9 Mon Sep 17 00:00:00 2001 From: emile Date: Tue, 22 Sep 2015 10:33:37 +0200 Subject: [PATCH] Docs --- README.md | 15 +- docs/ROADMAP.md | 9 +- docs/img/backends.png | Bin 24787 -> 0 bytes docs/img/traefik.logo.png | Bin 8394 -> 0 bytes docs/img/web.frontend.png | Bin 0 -> 65330 bytes docs/index.md | 451 ++++++++++++++++++++++++++++++++++++++ traefik.toml | 12 +- web.go | 4 +- 8 files changed, 474 insertions(+), 17 deletions(-) delete mode 100644 docs/img/backends.png delete mode 100644 docs/img/traefik.logo.png create mode 100644 docs/img/web.frontend.png create mode 100644 docs/index.md diff --git a/README.md b/README.md index f4d8a688e..31d769b0d 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,12 @@ ![Træfɪk](http://traefik.github.io/traefik.logo.svg "Træfɪk") +___ [![Circle CI](https://img.shields.io/circleci/project/EmileVauge/traefik.svg)](https://circleci.com/gh/EmileVauge/traefik) -[![Forks](https://img.shields.io/github/forks/EmileVauge/traefik.svg)](https://github.com/EmileVauge/traefik) -[![Stars](https://img.shields.io/github/stars/EmileVauge/traefik.svg)](https://github.com/EmileVauge/traefik) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/EmileVauge/traefik/blob/master/LICENSE.md) 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). +It supports several backends ([Docker :whale:](https://www.docker.com/), [Mesos/Marathon](https://mesosphere.github.io/marathon/), [Consul](https://consul.io/), [Etcd](https://coreos.com/etcd/), Rest API, file...) to manage its configuration automatically and dynamically. -![Backends](docs/img/backends.png "Backends") # Features @@ -19,10 +17,13 @@ It supports several backends (Docker, Mesos/Marathon, Consul, Etcd, Rest API, fi * 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 +* WebUI # Plumbing @@ -33,7 +34,7 @@ It supports several backends (Docker, Mesos/Marathon, Consul, Etcd, Rest API, fi # Quick start -* The simple way: grab the latest binary from [![the Github releases page](https://img.shields.io/github/downloads/EmileVauge/traefik/latest/total.svg)](https://github.com/emilevauge/traefik/releases) and just run it with the sample configuration file: +* The simple way: grab the latest binary from the [releases](https://github.com/emilevauge/traefik/releases) page and just run it with the [sample configuration file](https://raw.githubusercontent.com/EmileVauge/traefik/master/traefik.sample.toml): ``` ./traefik traefik.toml @@ -45,4 +46,6 @@ It supports several backends (Docker, Mesos/Marathon, Consul, Etcd, Rest API, fi docker run -d -p 8080:8080 -p 80:80 -v $PWD/traefik.toml:/traefik.toml emilevauge/traefik ``` -# Configuration +# Documentation + +You can find the complete documentation [here](docs/index.md). diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index a288c3593..f672330a0 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -1,4 +1,7 @@ -# Træfɪk Roadmap +![Træfɪk](http://traefik.github.io/traefik.logo.svg "Træfɪk") +___ + +# Roadmap * Add traefik.protocol label * Providers recovery @@ -11,7 +14,6 @@ * README * API enhancements * Godoc -* Website * Kubernetes support @@ -26,7 +28,8 @@ * ~~Logs~~ * ~~SSL frontend support~~ * ~~SSL backends support~~ -* ~~Static files~~ +* ~~Static files with go-bindata~~ * ~~Metrics~~ * ~~Dockerfile~~ * ~~Use Negroni middlewares for metrics, grace, logs~~ +* ~~Website~~ diff --git a/docs/img/backends.png b/docs/img/backends.png deleted file mode 100644 index 75b07abf8b7521fd6ec80dc8fdeec17504572539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24787 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 diff --git a/docs/img/web.frontend.png b/docs/img/web.frontend.png new file mode 100644 index 0000000000000000000000000000000000000000..1de527a27fbeb1ee54b7ff33efe3bdbc5d25f19b GIT binary patch literal 65330 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͘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 F{{f4=szU$( literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..d4bf2d5d7 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,451 @@ +![Træfɪk](http://traefik.github.io/traefik.logo.svg "Træfɪk") +___ + + +# Documentation + +* [Basics](#basics) +* [Global configuration](#global) +* [File backend](#file) +* [API backend](#api) +* [Docker backend](#docker) +* [Mesos/Marathon backend](#marathon) +* [Consul backend](#consul) + + +## :anchor: Basics + + +Træfɪk is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease. +It supports several backends ([Docker :whale:](https://www.docker.com/), [Mesos/Marathon](https://mesosphere.github.io/marathon/), [Consul](https://consul.io/), [Etcd](https://coreos.com/etcd/), Rest API, file...) to manage its configuration automatically and dynamically. + +Basically, Træfɪk is a http router, which sends traffic from frontends to http backends, following rules you have configured. + +### Frontends + +Frontends can be defined using the following rules: + + * ```Headers```: Headers adds a matcher for request header values. It accepts a sequence of key/value pairs to be matched. For example: ```application/json``` + * ```HeadersRegexp```: Regular expressions can be used with headers as well. It accepts a sequence of key/value pairs, where the value has regex support. For example: ```application/(text|json)``` + * ```Host```: Host adds a matcher for the URL host. It accepts a template with zero or more URL variables enclosed by {}. Variables can define an optional regexp pattern to be matched: ```www.traefik.io```, ```{subdomain:[a-z]+}.traefik.io``` + * ```Methods```: Methods adds a matcher for HTTP methods. It accepts a sequence of one or more methods to be matched, e.g.: ```GET```, ```POST```, ```PUT``` + * ```Path```: Path adds a matcher for the URL path. It accepts a template with zero or more URL variables enclosed by {}. The template must start with a "/". For exemple ```/products/``` ```/articles/{category}/{id:[0-9]+}``` + * ```PathPrefix```: PathPrefix adds a matcher for the URL path prefix. This matches if the given template is a prefix of the full URL path. + + + A frontend is a set of rules that forwards the incoming http traffic to a backend. + +### HTTP Backends + +A backend is responsible to load-balance the traffic coming from one or more frontends to a set of http servers. +Various types of load-balancing is supported: + +* Weighted round robin +* Rebalancer: increases weights on servers that perform better than others. It also rolls back to original weights if the servers have changed. + +A circuit breaker can also be applied to a backend, preventing high loads on failing servers. + +## :anchor: Global configuration + +```toml +# traefik.toml +################################################################ +# Global configuration +################################################################ + +# Reverse proxy port +# +# Optional +# Default: ":80" +# +# port = ":80" + +# Timeout in seconds. +# Duration to give active requests a chance to finish during hot-reloads +# +# Optional +# Default: 10 +# +# graceTimeOut = 10 + +# Traefik logs file +# +# Optional +# +# traefikLogsFile = "log/traefik.log" + +# Traefik log to standard output +# +# Optional +# Default: true +# +# traefikLogsStdout = true + +# Access logs file +# +# Optional +# +# accessLogsFile = "log/access.log" + +# Log level +# +# Optional +# Default: "ERROR" +# +# logLevel = "ERROR" + +# SSL certificate and key used +# +# Optional +# +# CertFile = "traefik.crt" +# KeyFile = "traefik.key" +``` + + +## :anchor: File backend + +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.toml``` : + +```toml +# traefik.toml +port = ":80" +graceTimeOut = 10 +logLevel = "DEBUG" +traefikLogsStdout = true + +[file] + +# rules +[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 + + [frontends] + [frontends.frontend1] + backend = "backend2" + [frontends.frontend1.routes.test_1] + rule = "Host" + value = "test.localhost" + [frontends.frontend2] + backend = "backend1" + [frontends.frontend2.routes.test_2] + rule = "Path" + value = "/test" + +``` + +* or put your rules in a separate file, for example ```rules.tml```: + +```toml +# traefik.toml +port = ":80" +graceTimeOut = 10 +logLevel = "DEBUG" +traefikLogsStdout = true + +[file] +filename = "rules.toml" +``` + +```toml +# rules.toml +[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 + +[frontends] + [frontends.frontend1] + backend = "backend2" + [frontends.frontend1.routes.test_1] + rule = "Host" + value = "test.localhost" + [frontends.frontend2] + backend = "backend1" + [frontends.frontend2.routes.test_2] + rule = "Path" + value = "/test" +``` + +If you want Træfɪk to watch file changes automatically, just add: + +```toml +[file] +watch = true +``` + +## :anchor: API backend + +Træfik can be configured using a restful api. +To enable it: + +```toml +[web] +address = ":8080" +``` +* ```/```: provides a simple HTML frontend of Træfik + +![HTML frontend](img/web.frontend.png) + +* ```/health```: ```GET``` json metrics + +```sh +$ curl -s "http://localhost:8080/health" | jq . +{ + "average_response_time_sec": 0, + "average_response_time": "0", + "total_response_time_sec": 0, + "total_response_time": "0", + "total_count": 0, + "pid": 12861, + "uptime": "7m12.80607635s", + "uptime_sec": 432.80607635, + "time": "2015-09-22 10:25:16.448023473 +0200 CEST", + "unixtime": 1442910316, + "status_code_count": {}, + "total_status_code_count": {}, + "count": 0 +} +``` + +* ```/api```: ```GET``` or ```PUT``` a configuration + +```sh +$ curl -s "http://localhost:8082/api" | jq . +{ + "Frontends": { + "frontend-traefik": { + "Routes": { + "route-host-traefik": { + "Value": "traefik.docker.localhost", + "Rule": "Host" + } + }, + "Backend": "backend-test2" + }, + "frontend-test": { + "Routes": { + "route-host-test": { + "Value": "test.docker.localhost", + "Rule": "Host" + } + }, + "Backend": "backend-test1" + } + }, + "Backends": { + "backend-test2": { + "Servers": { + "server-stoic_brattain": { + "Weight": 0, + "Url": "http://172.17.0.8:80" + }, + "server-jovial_khorana": { + "Weight": 0, + "Url": "http://172.17.0.12:80" + }, + "server-jovial_franklin": { + "Weight": 0, + "Url": "http://172.17.0.11:80" + }, + "server-elegant_panini": { + "Weight": 0, + "Url": "http://172.17.0.9:80" + }, + "server-adoring_elion": { + "Weight": 0, + "Url": "http://172.17.0.10:80" + } + } + }, + "backend-test1": { + "Servers": { + "server-trusting_wozniak": { + "Weight": 0, + "Url": "http://172.17.0.5:80" + }, + "server-sharp_jang": { + "Weight": 0, + "Url": "http://172.17.0.7:80" + }, + "server-dreamy_feynman": { + "Weight": 0, + "Url": "http://172.17.0.6:80" + } + } + } + } +} + +``` + +* ```/api/backends```: ```GET``` backends +* ```/api/backends/{backend}```: ```GET``` a backend +* ```/api/backends/{backend}/servers```: ```GET``` servers in a backend +* ```/api/backends/{backend}/servers/{server}```: ```GET``` a server in a backend +* ```/api/frontends```: ```GET``` frontends +* ```/api/frontends/{frontend}```: ```GET``` a frontend + + +## :anchor: Docker backend + +Træfɪk can be configured to use Docker as a backend configuration: + +```toml +################################################################ +# Docker configuration backend +################################################################ + +# Enable Docker configuration backend +# +# Optional +# +[docker] + +# Docker server endpoint. Can be a tcp or a unix socket endpoint. +# +# Required +# +endpoint = "unix:///var/run/docker.sock" + +# Default domain used. +# Can be overridden by setting the "traefik.domain" label on a container. +# +# Required +# +domain = "docker.localhost" + +# Enable watch docker changes +# +# Optional +# +watch = true + +# Override default configuration template. For advanced users :) +# +# Optional +# +# filename = "docker.tmpl" +``` + +Labels can be used on containers to override default behaviour: + +* ```traefik.backend=foo```: assign the container to ```foo``` backend +* ```traefik.port=80```: register this port. Useful when the container exposes multiples ports. +* ```traefik.weight=10```: assign this weight to the container + +## :anchor: Marathon backend + +Træfɪk can be configured to use Marathon as a backend configuration: + + +```toml +################################################################ +# Mesos/Marathon configuration backend +################################################################ + +# Enable Marathon configuration backend +# +# Optional +# +[marathon] + +# Marathon server endpoint. +# You can also specify multiple endpoint for Marathon: +# endpoint := "http://10.241.1.71:8080,10.241.1.72:8080,10.241.1.73:8080" +# +# Required +# +endpoint = "http://127.0.0.1:8080" + +# Network interface used to call Marathon web services +# Optional +# Default: "eth0" +# +# networkInterface = "eth0" + +# Enable watch Marathon changes +# +# Optional +# +watch = true + +# Default domain used. +# Can be overridden by setting the "traefik.domain" label on an application. +# +# Required +# +domain = "marathon.localhost" + +# Override default configuration template. For advanced users :) +# +# Optional +# +# filename = "marathon.tmpl" +``` + +Labels can be used on containers to override default behaviour: + +* ```traefik.backend=foo```: assign the application to ```foo``` backend +* ```traefik.port=80```: register this port. Useful when the application exposes multiples ports. +* ```traefik.weight=10```: assign this weight to the application + +## :anchor: Consul backend + +Træfɪk can be configured to use Consul as a backend configuration: + +```toml +################################################################ +# Consul KV configuration backend +################################################################ + +# Enable Consul KV configuration backend +# +# Optional +# +[consul] + +# Consul server endpoint +# +# Required +# +endpoint = "http://127.0.0.1:8500" + +# Enable watch Consul changes +# +# Optional +# +watch = true + +# Prefix used for KV store. +# +# Optional +# +prefix = "traefik" + +# Override default configuration template. For advanced users :) +# +# Optional +# +# filename = "consul.tmpl" +``` diff --git a/traefik.toml b/traefik.toml index 1950edbe5..4934d2722 100644 --- a/traefik.toml +++ b/traefik.toml @@ -75,7 +75,7 @@ address = ":8082" # # Optional # -[file] +# [file] # Rules file # If defined, traefik will load rules from this file, @@ -89,7 +89,7 @@ address = ":8082" # # Optional # -watch = true +# watch = true ################################################################ @@ -100,26 +100,26 @@ watch = true # # Optional # -# [docker] +[docker] # Docker server endpoint. Can be a tcp or a unix socket endpoint. # # Required # -# endpoint = "unix:///var/run/docker.sock" +endpoint = "unix:///var/run/docker.sock" # Enable watch docker changes # # Optional # -# watch = true +watch = true # Default domain used. # Can be overridden by setting the "traefik.domain" label on a container. # # Required # -# domain = "docker.localhost" +domain = "docker.localhost" # Override default configuration template. For advanced users :) # diff --git a/web.go b/web.go index 04688fe15..f15d32fc3 100644 --- a/web.go +++ b/web.go @@ -22,7 +22,7 @@ func (provider *WebProvider) Provide(configurationChan chan<- *Configuration) { systemRouter.Methods("GET").Path("/").Handler(http.HandlerFunc(GetHtmlConfigHandler)) systemRouter.Methods("GET").Path("/health").Handler(http.HandlerFunc(GetHealthHandler)) systemRouter.Methods("GET").Path("/api").Handler(http.HandlerFunc(GetConfigHandler)) - systemRouter.Methods("POST").Path("/api").Handler(http.HandlerFunc( + systemRouter.Methods("PUT").Path("/api").Handler(http.HandlerFunc( func(rw http.ResponseWriter, r *http.Request) { configuration := new(Configuration) b, _ := ioutil.ReadAll(r.Body) @@ -109,4 +109,4 @@ func GetServerHandler(rw http.ResponseWriter, r *http.Request) { }else{ http.NotFound(rw, r) } -} \ No newline at end of file +}