From e983bbe3e37a1e2e0a03ed9d544fbfd348bfc642 Mon Sep 17 00:00:00 2001 From: emile Date: Mon, 14 Sep 2015 11:01:47 +0200 Subject: [PATCH] README --- README.md | 107 +++++++++++++++++++++++++--------- ROADMAP.md => docs/ROADMAP.md | 3 +- docs/img/backends.png | Bin 0 -> 25739 bytes docs/img/traefik.logo.png | Bin 0 -> 8127 bytes traefik.toml | 17 +++--- 5 files changed, 93 insertions(+), 34 deletions(-) rename ROADMAP.md => docs/ROADMAP.md (92%) create mode 100644 docs/img/backends.png create mode 100644 docs/img/traefik.logo.png diff --git a/README.md b/README.md index 5abea417a..0aafdee6a 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ -# /Træfɪk/ +![/Træfɪk/](docs/img/traefik.logo.png "/Træfɪk/") /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). -## Features +![Backends](docs/img/backends.png "Backends") + +# Features * No dependency hell, single binary made with go * Simple json Rest API @@ -17,14 +19,14 @@ It supports several backends (Docker, Mesos/Marathon, Consul, Etcd, Rest API, fi * SSL backends support * SSL frontend support -## Plumbing +# Plumbing -* [Oxy](https://github.com/mailgun/oxy/): an awsome proxy librarymade by Mailgun guys +* [Oxy](https://github.com/mailgun/oxy/): an awsome proxy library made by Mailgun guys * [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 -## Quick start +# Quick start * The simple way: go to the [releases](https://github.com/emilevauge/traefik/releases) page and get a binary. * Or simply execute: @@ -38,11 +40,30 @@ go get github.com/emilevauge/traefik ./traefik traefik.toml ``` -## Configuration +# Configuration -Here is a sample configuration TOML file: +## 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 + +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``` : + +```toml +# traefik.toml port = ":80" graceTimeOut = 10 logLevel = "DEBUG" @@ -52,25 +73,7 @@ traefikLogsStdout = true # CertFile = "traefik.crt" # KeyFile = "traefik.key" -[web] -address = ":8080" - -# [docker] -# endpoint = "unix:///var/run/docker.sock" -# watch = true -# domain = "localhost" -# filename = "docker.tmpl" - -# [marathon] -# endpoint = "http://127.0.0.1:8080" -# networkInterface = "eth0" -# watch = true -# domain = "localhost" -# filename = "marathon.tmpl" - -# [file] -# filename = "rules.toml" -# watch = true +[file] [backends] [backends.backend1] @@ -98,3 +101,55 @@ address = ":8080" value = "/test" ``` + +* or put your configuration in a separate file, for example ```rules.tml```: + +```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] +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 + +[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" +``` + +If you want /Træfɪk/ to watch file changes automatically, just add: + +```toml +[file] +watch = true +``` diff --git a/ROADMAP.md b/docs/ROADMAP.md similarity index 92% rename from ROADMAP.md rename to docs/ROADMAP.md index fb6dde2f6..8b2f54167 100644 --- a/ROADMAP.md +++ b/docs/ROADMAP.md @@ -1,5 +1,6 @@ - # /træfɪk/ +# /Træfɪk/ +* Add traefik.protocol label * Providers recovery * tls client verification * Default configuration values diff --git a/docs/img/backends.png b/docs/img/backends.png new file mode 100644 index 0000000000000000000000000000000000000000..7e387c6bcdd0ffa937c071f6d6331d10f129b70e GIT binary patch literal 25739 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 literal 0 HcmV?d00001 diff --git a/docs/img/traefik.logo.png b/docs/img/traefik.logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9e5c88252ec0208a5de6adb9c98761bbf1725743 GIT binary patch literal 8127 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 literal 0 HcmV?d00001 diff --git a/traefik.toml b/traefik.toml index bdd05ca27..84fc95dfd 100644 --- a/traefik.toml +++ b/traefik.toml @@ -2,7 +2,7 @@ port = ":8001" graceTimeOut = 10 # traefikLogsFile = "log/traefik.log" traefikLogsStdout = true -# accessLogsFile = "log/access.log" +accessLogsFile = "log/access.log" logLevel = "DEBUG" # CertFile = "traefik.crt" # KeyFile = "traefik.key" @@ -10,7 +10,7 @@ logLevel = "DEBUG" [docker] endpoint = "unix:///var/run/docker.sock" watch = true -domain = "toto.fr" +domain = "localhost" # filename = "docker.tmpl" # [marathon] @@ -23,9 +23,9 @@ domain = "toto.fr" [web] address = ":8010" -# [file] +#[file] # filename = "rules.toml" -# watch = true +watch = true [backends] [backends.backend1] @@ -37,15 +37,18 @@ address = ":8010" weight = 1 [backends.backend2] [backends.backend2.servers.server1] - url = "http://172.17.0.2:80" - weight = 100 + url = "https://www.google.fr" + weight = 1 + [backends.backend2.servers.server2] + url = "http://www.wikipedia.fr" + weight = 2 [routes] [routes.route1] backend = "backend2" [routes.route1.rules.test_zenika_1] category = "Host" - value = "test.zenika.fr" + value = "test.localhost" [routes.route2] backend = "backend1" [routes.route2.rules.test_zenika_2]