From 6445befe874ae32176ea6c48bcfb77f5ddb39b81 Mon Sep 17 00:00:00 2001 From: Ludovic Fernandez Date: Fri, 18 Sep 2020 09:26:03 +0200 Subject: [PATCH 1/9] fix: start of Traefik Pilot --- cmd/traefik/plugins.go | 2 +- netlify.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/traefik/plugins.go b/cmd/traefik/plugins.go index aa4e9bcbe..15c698199 100644 --- a/cmd/traefik/plugins.go +++ b/cmd/traefik/plugins.go @@ -36,5 +36,5 @@ func isPilotEnabled(staticCfg *static.Configuration) bool { func hasPlugins(staticCfg *static.Configuration) bool { return staticCfg.Experimental != nil && - len(staticCfg.Experimental.Plugins) > 0 || staticCfg.Experimental.DevPlugin != nil + (len(staticCfg.Experimental.Plugins) > 0 || staticCfg.Experimental.DevPlugin != nil) } diff --git a/netlify.toml b/netlify.toml index 330706385..606175fa1 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,6 +1,6 @@ [build] # Path relative to the root of the repository -publish = "docs/site" +publish = "site" base = "docs" # Path relative to the "base" directory From 7e482e9f8b0d16818de6ede968dd35a3b974feb6 Mon Sep 17 00:00:00 2001 From: Ludovic Fernandez Date: Fri, 18 Sep 2020 15:36:04 +0200 Subject: [PATCH 2/9] fix: pilot metrics unit for req duration. --- pkg/metrics/pilot.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/metrics/pilot.go b/pkg/metrics/pilot.go index 9ed199246..653bd455e 100644 --- a/pkg/metrics/pilot.go +++ b/pkg/metrics/pilot.go @@ -57,12 +57,12 @@ func RegisterPilot() *PilotRegistry { standardRegistry.entryPointReqsCounter = pr.newCounter(pilotEntryPointReqsTotalName) standardRegistry.entryPointReqsTLSCounter = pr.newCounter(pilotEntryPointReqsTLSTotalName) - standardRegistry.entryPointReqDurationHistogram, _ = NewHistogramWithScale(pr.newHistogram(pilotEntryPointReqDurationName), time.Second) + standardRegistry.entryPointReqDurationHistogram, _ = NewHistogramWithScale(pr.newHistogram(pilotEntryPointReqDurationName), time.Millisecond) standardRegistry.entryPointOpenConnsGauge = pr.newGauge(pilotEntryPointOpenConnsName) standardRegistry.serviceReqsCounter = pr.newCounter(pilotServiceReqsTotalName) standardRegistry.serviceReqsTLSCounter = pr.newCounter(pilotServiceReqsTLSTotalName) - standardRegistry.serviceReqDurationHistogram, _ = NewHistogramWithScale(pr.newHistogram(pilotServiceReqDurationName), time.Second) + standardRegistry.serviceReqDurationHistogram, _ = NewHistogramWithScale(pr.newHistogram(pilotServiceReqDurationName), time.Millisecond) standardRegistry.serviceOpenConnsGauge = pr.newGauge(pilotServiceOpenConnsName) standardRegistry.serviceRetriesCounter = pr.newCounter(pilotServiceRetriesTotalName) standardRegistry.serviceServerUpGauge = pr.newGauge(pilotServiceServerUpName) From 8e016cf67270ad574980faa6a31ebd39467d2e24 Mon Sep 17 00:00:00 2001 From: Ludovic Fernandez Date: Fri, 18 Sep 2020 17:20:03 +0200 Subject: [PATCH 3/9] Prepare release v2.3.0-rc7 --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e3f3dcfb..3dd43d411 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [v2.3.0-rc7](https://github.com/traefik/traefik/tree/v2.3.0-rc7) (2020-09-18) +[All Commits](https://github.com/traefik/traefik/compare/v2.3.0-rc6...v2.3.0-rc7) + +**Bug fixes:** +- **[pilot]** fix: pilot metrics unit for req duration. ([#7309](https://github.com/traefik/traefik/pull/7309) by [ldez](https://github.com/ldez)) +- **[pilot]** fix: start of Traefik Pilot ([#7304](https://github.com/traefik/traefik/pull/7304) by [ldez](https://github.com/ldez)) + ## [v2.3.0-rc6](https://github.com/traefik/traefik/tree/v2.3.0-rc6) (2020-09-16) [All Commits](https://github.com/traefik/traefik/compare/v2.3.0-rc5...v2.3.0-rc6) From b40d35b77957301897881b4f0e70f4d18acd672c Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 23 Sep 2020 10:20:04 +0200 Subject: [PATCH 4/9] chore: apply new documentation style. Co-authored-by: jbdoumenjou --- .github/ISSUE_TEMPLATE.md | 2 +- .github/ISSUE_TEMPLATE/Bug_report.md | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .travis.yml | 8 +- CONTRIBUTING.md | 4 +- README.md | 20 ++-- cmd/traefik/traefik.go | 4 +- contrib/systemd/traefik.service | 2 +- docs/content/CNAME | 1 - docs/content/assets/img/traefik.icon.png | Bin 2064 -> 0 bytes .../assets/img/traefik.logo.horizontal.png | Bin 17101 -> 0 bytes docs/content/assets/img/traefik.logo.png | Bin 35056 -> 0 bytes .../assets/img/traefikproxy-icon-color.png | Bin 0 -> 7736 bytes .../img/traefikproxy-vertical-logo-color.svg | 9 ++ docs/content/assets/styles/header.css | 58 +++++++---- .../assets/styles/product-switcher.css | 13 +++ docs/content/contributing/advocating.md | 2 +- docs/content/contributing/documentation.md | 2 +- .../content/contributing/submitting-issues.md | 2 +- .../getting-started/install-traefik.md | 2 +- docs/content/glossary.md | 2 +- docs/content/index.md | 8 +- docs/content/migration/v1-to-v2.md | 6 +- docs/content/plugins/overview.md | 2 +- docs/content/providers/docker.md | 2 +- docs/content/providers/kubernetes-crd.md | 8 +- docs/content/providers/kubernetes-ingress.md | 4 +- docs/content/providers/overview.md | 2 +- .../reference/dynamic-configuration/file.yaml | 2 +- docs/mkdocs.yml | 8 +- docs/scripts/verify.sh | 5 +- .../assets/images/traefik-enterprise-logo.svg | 20 ++++ docs/theme/assets/images/traefik-labs.svg | 12 +++ .../theme/assets/images/traefik-mesh-logo.svg | 20 ++++ .../assets/images/traefik-pilot-logo.svg | 20 ++++ .../assets/images/traefik-proxy-logo-long.svg | 14 +++ .../assets/images/traefik-proxy-logo.svg | 20 ++++ docs/theme/main.html | 2 +- docs/theme/partials/company-header.html | 95 ++++++++++-------- docs/theme/partials/product-switcher.html | 40 ++++---- webui/src/components/_commons/NavBar.vue | 2 +- 41 files changed, 295 insertions(+), 132 deletions(-) delete mode 100644 docs/content/CNAME delete mode 100644 docs/content/assets/img/traefik.icon.png delete mode 100644 docs/content/assets/img/traefik.logo.horizontal.png delete mode 100644 docs/content/assets/img/traefik.logo.png create mode 100644 docs/content/assets/img/traefikproxy-icon-color.png create mode 100644 docs/content/assets/img/traefikproxy-vertical-logo-color.svg create mode 100644 docs/theme/assets/images/traefik-enterprise-logo.svg create mode 100644 docs/theme/assets/images/traefik-labs.svg create mode 100644 docs/theme/assets/images/traefik-mesh-logo.svg create mode 100644 docs/theme/assets/images/traefik-pilot-logo.svg create mode 100644 docs/theme/assets/images/traefik-proxy-logo-long.svg create mode 100644 docs/theme/assets/images/traefik-proxy-logo.svg diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index ff440d3a1..51e54094c 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -17,7 +17,7 @@ Bug diff --git a/.github/ISSUE_TEMPLATE/Bug_report.md b/.github/ISSUE_TEMPLATE/Bug_report.md index 973a474cb..9a3f7ea76 100644 --- a/.github/ISSUE_TEMPLATE/Bug_report.md +++ b/.github/ISSUE_TEMPLATE/Bug_report.md @@ -22,7 +22,7 @@ Bug diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 8662d2654..714b5e78e 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -13,7 +13,7 @@ Enhancements: - for Traefik v1: we only accept bug fixes - for Traefik v2: use branch master -HOW TO WRITE A GOOD PULL REQUEST? https://docs.traefik.io/contributing/submitting-pull-requests/ +HOW TO WRITE A GOOD PULL REQUEST? https://doc.traefik.io/traefik/contributing/submitting-pull-requests/ --> diff --git a/.travis.yml b/.travis.yml index 17c1766dc..a941da8ea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,11 +50,9 @@ deploy: on: repo: traefik/traefik tags: true - - provider: pages - edge: false - github_token: ${GITHUB_TOKEN} - local_dir: site + - provider: script + script: mixtus --dst-doc-path="./traefik" --dst-owner=traefik --dst-repo-name=doc --git-user-email="30906710+traefiker@users.noreply.github.com" --git-user-name=traefiker --src-doc-path="./site" --src-owner=containous --src-repo-name=traefik skip_cleanup: true on: repo: traefik/traefik - all_branches: true + all_branches: true \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e774b3e04..767c6de93 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ # Contributing -- https://docs.traefik.io/contributing/submitting-pull-requests/ -- https://docs.traefik.io/contributing/submitting-issues/ +- https://doc.traefik.io/traefik/contributing/submitting-pull-requests/ +- https://doc.traefik.io/traefik/contributing/submitting-issues/ diff --git a/README.md b/README.md index 47b9dd850..887d6e575 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

[![Build Status SemaphoreCI](https://semaphoreci.com/api/v1/containous/traefik/branches/master/shields_badge.svg)](https://semaphoreci.com/containous/traefik) -[![Docs](https://img.shields.io/badge/docs-current-brightgreen.svg)](https://docs.traefik.io) +[![Docs](https://img.shields.io/badge/docs-current-brightgreen.svg)](https://doc.traefik.io/traefik) [![Go Report Card](https://goreportcard.com/badge/traefik/traefik)](https://goreportcard.com/report/traefik/traefik) [![](https://images.microbadger.com/badges/image/traefik.svg)](https://microbadger.com/images/traefik) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/traefik/traefik/blob/master/LICENSE.md) @@ -33,7 +33,7 @@ Pointing Traefik at your orchestrator should be the _only_ configuration step yo --- -:warning: Please be aware that the old configurations for Traefik v1.x are NOT compatible with the v2.x config as of now. If you're running v2, please ensure you are using a [v2 configuration](https://docs.traefik.io/). +:warning: Please be aware that the old configurations for Traefik v1.x are NOT compatible with the v2.x config as of now. If you're running v2, please ensure you are using a [v2 configuration](https://doc.traefik.io/traefik/). ## Overview @@ -69,15 +69,15 @@ _(But if you'd rather configure some of your routes manually, Traefik supports t ## Supported Backends -- [Docker](https://docs.traefik.io/providers/docker/) / [Swarm mode](https://docs.traefik.io/providers/docker/) -- [Kubernetes](https://docs.traefik.io/providers/kubernetes-crd/) -- [Marathon](https://docs.traefik.io/providers/marathon/) -- [Rancher](https://docs.traefik.io/providers/rancher/) (Metadata) -- [File](https://docs.traefik.io/providers/file/) +- [Docker](https://doc.traefik.io/traefik/providers/docker/) / [Swarm mode](https://doc.traefik.io/traefik/providers/docker/) +- [Kubernetes](https://doc.traefik.io/traefik/providers/kubernetes-crd/) +- [Marathon](https://doc.traefik.io/traefik/providers/marathon/) +- [Rancher](https://doc.traefik.io/traefik/providers/rancher/) (Metadata) +- [File](https://doc.traefik.io/traefik/providers/file/) ## Quickstart -To get your hands on Traefik, you can use the [5-Minute Quickstart](https://docs.traefik.io/getting-started/quick-start/) in our documentation (you will need Docker). +To get your hands on Traefik, you can use the [5-Minute Quickstart](https://doc.traefik.io/traefik/getting-started/quick-start/) in our documentation (you will need Docker). ## Web UI @@ -87,9 +87,9 @@ You can access the simple HTML frontend of Traefik. ## Documentation -You can find the complete documentation of Traefik v2 at [https://docs.traefik.io](https://docs.traefik.io). +You can find the complete documentation of Traefik v2 at [https://doc.traefik.io/traefik/](https://doc.traefik.io/traefik/). -If you are using Traefik v1, you can find the complete documentation at [https://docs.traefik.io/v1.7/](https://docs.traefik.io/v1.7/). +If you are using Traefik v1, you can find the complete documentation at [https://doc.traefik.io/traefik/v1.7/](https://doc.traefik.io/traefik/v1.7/). A collection of contributions around Traefik can be found at [https://awesome.traefik.io](https://awesome.traefik.io). diff --git a/cmd/traefik/traefik.go b/cmd/traefik/traefik.go index 2d7aa3825..a84516103 100644 --- a/cmd/traefik/traefik.go +++ b/cmd/traefik/traefik.go @@ -478,13 +478,13 @@ func stats(staticConfiguration *static.Configuration) { logger.Info(`Stats collection is enabled.`) logger.Info(`Many thanks for contributing to Traefik's improvement by allowing us to receive anonymous information from your configuration.`) logger.Info(`Help us improve Traefik by leaving this feature on :)`) - logger.Info(`More details on: https://docs.traefik.io/contributing/data-collection/`) + logger.Info(`More details on: https://doc.traefik.io/traefik/contributing/data-collection/`) collect(staticConfiguration) } else { logger.Info(` Stats collection is disabled. Help us improve Traefik by turning this feature on :) -More details on: https://docs.traefik.io/contributing/data-collection/ +More details on: https://doc.traefik.io/traefik/contributing/data-collection/ `) } } diff --git a/contrib/systemd/traefik.service b/contrib/systemd/traefik.service index 5b1d04975..2fdc7e238 100644 --- a/contrib/systemd/traefik.service +++ b/contrib/systemd/traefik.service @@ -1,6 +1,6 @@ [Unit] Description=Traefik -Documentation=https://docs.traefik.io +Documentation=https://doc.traefik.io/traefik/ #After=network-online.target #AssertFileIsExecutable=/usr/bin/traefik #AssertPathExists=/etc/traefik/traefik.toml diff --git a/docs/content/CNAME b/docs/content/CNAME deleted file mode 100644 index f4446d431..000000000 --- a/docs/content/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs.traefik.io \ No newline at end of file diff --git a/docs/content/assets/img/traefik.icon.png b/docs/content/assets/img/traefik.icon.png deleted file mode 100644 index 9708dd0bafa443603742797cc4898a86919c1864..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2064 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 meeHLrd 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 Yp(iqhcv5ZuKkHi+MW{lJoaNj90^nE4OaK4? literal 0 HcmV?d00001 diff --git a/docs/content/assets/img/traefikproxy-vertical-logo-color.svg b/docs/content/assets/img/traefikproxy-vertical-logo-color.svg new file mode 100644 index 000000000..7cd80f443 --- /dev/null +++ b/docs/content/assets/img/traefikproxy-vertical-logo-color.svg @@ -0,0 +1,9 @@ + + + TraefikProxy-vertical-logo-color + + + + + + \ No newline at end of file diff --git a/docs/content/assets/styles/header.css b/docs/content/assets/styles/header.css index 5c539a5ca..eb11e68d8 100644 --- a/docs/content/assets/styles/header.css +++ b/docs/content/assets/styles/header.css @@ -189,6 +189,10 @@ .nav-dropdown-menu--solutions .nav-dropdown-menu-wrapper { padding: 20px; } +.nav-dropdown-menu--products .nav-dropdown-menu-wrapper { + height: 430px; +} + .nav-dropdown-menu--products .dm-header, .nav-dropdown-menu--solutions .dm-header { font-size: 1.1em; @@ -204,7 +208,7 @@ .nav-dropdown-menu--products .dm-item, .nav-dropdown-menu--solutions .dm-item { border: none; - margin: 0 0 20px; + margin: 0 0 24px; color: #06102a; transition: all 0.1s; position: relative; @@ -214,12 +218,11 @@ .nav-dropdown-menu--solutions .dm-item:last-child { margin-bottom: 0; } -.nav-dropdown-menu--products .dm-item .dmi-image, -.nav-dropdown-menu--solutions .dm-item .dmi-image { - width: 118px; - height: 92px; +.nav-dropdown-menu--products .dm-item .dmi-image { + width: 104px; + height: 72px; position: absolute; - background: #f4f4f4; + /*background: #f4f4f4;*/ display: flex; align-items: center; justify-content: center; @@ -227,13 +230,22 @@ border-radius: 4px; z-index: 0; } -.nav-dropdown-menu--products .dm-item .dmi-image img, + +.nav-dropdown-menu--solutions .dm-item .dmi-image { + width: 65px; + padding: 10px; + background: white; + height: auto; + position: absolute; + z-index: 0; +} + .nav-dropdown-menu--solutions .dm-item .dmi-image img { width: 100%; } .nav-dropdown-menu--products .dm-item .dmi-details, .nav-dropdown-menu--solutions .dm-item .dmi-details { - padding: 8px 0 10px 135px; + padding: 6px 0 0 127px; width: 100%; background: transparent; display: block; @@ -262,12 +274,6 @@ transform: scale(1.1); } -.nav-dropdown-menu--solutions .dm-item .dmi-image { - width: 65px; - padding: 10px; - background: white; - height: auto; -} .nav-dropdown-menu--solutions .dm-item .dmi-details { padding: 5px 0 0 80px; } @@ -275,7 +281,7 @@ margin-bottom: 10px; } -/* Dropdown menu: Learn */ +/* Dropdown menu: Learn and Company */ .nav-dropdown-menu--learn { width: 250px; } @@ -420,7 +426,7 @@ display: none; } -@media (max-width: 1060px) { +@media (max-width: 1219px) { .site-header__nav .menu-item-wrapper { padding-left: 20px; } @@ -453,10 +459,26 @@ } .md-header .md-search { - margin-left: 12.1rem; -} + margin-right: 12.1rem; +} .site-header__main { display: flex; align-items: center; } + +.dmi-image.proxy { + background-color: #24a1c1; +} + +.dmi-image.mesh { + background-color: #9d0fb0; +} + +.dmi-image.enterprise { + background-color: #0060e0; +} + +.dmi-image.pilot { + background-color: #db7d11; +} diff --git a/docs/content/assets/styles/product-switcher.css b/docs/content/assets/styles/product-switcher.css index a4bfcb9bb..fa6c6c472 100644 --- a/docs/content/assets/styles/product-switcher.css +++ b/docs/content/assets/styles/product-switcher.css @@ -6,6 +6,19 @@ -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } +.product-switcher .menu-item-wrapper { + padding-left: 15px; +} + .product-switcher img { margin-right: 10px; } + +.product-switcher img.gopher { + margin: 0 2px 0 16px; +} + +.product-switcher .nav-dropdown-menu--products .nav-dropdown-menu-wrapper { + width: auto; + height: auto; +} diff --git a/docs/content/contributing/advocating.md b/docs/content/contributing/advocating.md index 791338526..22083ee46 100644 --- a/docs/content/contributing/advocating.md +++ b/docs/content/contributing/advocating.md @@ -5,6 +5,6 @@ Spread the Love & Tell Us about It There are many ways to contribute to the project, and there is one that always spark joy: when we see/read about users talking about how Traefik helps them solve their problems. -If you're talking about Traefik, [let us know](https://blog.containo.us/spread-the-love-ba5a40aa72e7) and we'll promote your enthusiasm! +If you're talking about Traefik, [let us know](https://blog.traefik.io/spread-the-love-ba5a40aa72e7) and we'll promote your enthusiasm! Also, if you've written about Traefik or shared useful information you'd like to promote, feel free to add links in the [dedicated wiki page on Github](https://github.com/traefik/traefik/wiki/Awesome-Traefik). diff --git a/docs/content/contributing/documentation.md b/docs/content/contributing/documentation.md index 374d36671..6b3e0316c 100644 --- a/docs/content/contributing/documentation.md +++ b/docs/content/contributing/documentation.md @@ -10,7 +10,7 @@ Let's see how. ### General -This [documentation](https://docs.traefik.io/) is built with [mkdocs](https://mkdocs.org/). +This [documentation](https://doc.traefik.io/traefik/) is built with [mkdocs](https://mkdocs.org/). ### Method 1: `Docker` and `make` diff --git a/docs/content/contributing/submitting-issues.md b/docs/content/contributing/submitting-issues.md index 1fa0bf61a..512a06b53 100644 --- a/docs/content/contributing/submitting-issues.md +++ b/docs/content/contributing/submitting-issues.md @@ -14,7 +14,7 @@ To save us some time and get quicker feedback, be sure to follow the guide lines For end-user related support questions, try using first: - - the Traefik community forum: [![Join the chat at https://community.containo.us/](https://img.shields.io/badge/style-register-green.svg?style=social&label=Discourse)](https://community.containo.us/) + - the Traefik community forum: [![Join the chat at https://community.traefik.io/](https://img.shields.io/badge/style-register-green.svg?style=social&label=Discourse)](https://community.traefik.io/) ## Issue Title diff --git a/docs/content/getting-started/install-traefik.md b/docs/content/getting-started/install-traefik.md index a91cb5075..a10d58212 100644 --- a/docs/content/getting-started/install-traefik.md +++ b/docs/content/getting-started/install-traefik.md @@ -30,7 +30,7 @@ For more details, go to the [Docker provider documentation](../providers/docker. !!! warning The Traefik Chart from - [Helm's default charts repository](https://github.com/helm/charts/tree/master/stable/traefik) is still using [Traefik v1.7](https://docs.traefik.io/v1.7). + [Helm's default charts repository](https://github.com/helm/charts/tree/master/stable/traefik) is still using [Traefik v1.7](https://doc.traefik.io/traefik/v1.7). Traefik can be installed in Kubernetes using the Helm chart from . diff --git a/docs/content/glossary.md b/docs/content/glossary.md index ab645e458..cd5ba446a 100644 --- a/docs/content/glossary.md +++ b/docs/content/glossary.md @@ -12,7 +12,7 @@ Where Every Technical Word finds its Definition` - [ ] [Static configuration](getting-started/configuration-overview.md#the-static-configuration) - [ ] [Dynamic configuration](getting-started/configuration-overview.md#the-dynamic-configuration) - [ ] ACME -- [ ] TraefikEE +- [ ] Traefik Enterprise - [ ] Tracing - [ ] Metrics - [ ] Orchestrator diff --git a/docs/content/index.md b/docs/content/index.md index c84bd380c..112b90df4 100644 --- a/docs/content/index.md +++ b/docs/content/index.md @@ -20,9 +20,9 @@ Developing Traefik, our main goal is to make it simple to use, and we're sure yo !!! info - Join our user friendly and active [Community Forum](https://community.containo.us) to discuss, learn, and connect with the traefik community. + Join our user friendly and active [Community Forum](https://community.traefik.io) to discuss, learn, and connect with the traefik community. If you're a business running critical services behind Traefik, - know that [Containous](https://containo.us), the company that sponsors Traefik's development, - can provide [commercial support](https://info.containo.us/commercial-services) - and develops an [Enterprise Edition](https://containo.us/traefikee/) of Traefik. + know that [Traefik Labs](https://traefik.io), the company that sponsors Traefik's development, + can provide [commercial support](https://info.traefik.io/commercial-services) + and develops an [Enterprise Edition](https://traefik.io/traefik-enterprise/) of Traefik. diff --git a/docs/content/migration/v1-to-v2.md b/docs/content/migration/v1-to-v2.md index 812dfeb67..7840726ed 100644 --- a/docs/content/migration/v1-to-v2.md +++ b/docs/content/migration/v1-to-v2.md @@ -104,7 +104,7 @@ Then any router can refer to an instance of the wanted middleware. ```yaml tab="K8s IngressRoute" # The definitions below require the definitions for the Middleware and IngressRoute kinds. - # https://docs.traefik.io/v2.2/reference/dynamic-configuration/kubernetes-crd/#definitions + # https://doc.traefik.io/traefik/v2.3/reference/dynamic-configuration/kubernetes-crd/#definitions apiVersion: traefik.containo.us/v1alpha1 kind: Middleware metadata: @@ -275,7 +275,7 @@ Then, a [router's TLS field](../routing/routers/index.md#tls) can refer to one o ```yaml tab="K8s IngressRoute" # The definitions below require the definitions for the TLSOption and IngressRoute kinds. - # https://docs.traefik.io/v2.2/reference/dynamic-configuration/kubernetes-crd/#definitions + # https://doc.traefik.io/traefik/v2.3/reference/dynamic-configuration/kubernetes-crd/#definitions apiVersion: traefik.containo.us/v1alpha1 kind: TLSOption metadata: @@ -1145,4 +1145,4 @@ Supported [providers](../providers/overview.md), for now: - Now, configuration elements can be referenced between different providers by using the provider namespace notation: `@`. For instance, a router named `myrouter` in a File Provider can refer to a service named `myservice` defined in Docker Provider with the following notation: `myservice@docker`. - Middlewares are applied in the same order as their declaration in router. -- If you have any questions feel free to join our [community forum](https://community.containo.us). +- If you have any questions feel free to join our [community forum](https://community.traefik.io). diff --git a/docs/content/plugins/overview.md b/docs/content/plugins/overview.md index 5f8950892..2ebd9977b 100644 --- a/docs/content/plugins/overview.md +++ b/docs/content/plugins/overview.md @@ -6,7 +6,7 @@ Overview Traefik Pilot is a software-as-a-service (SaaS) platform that connects to Traefik to extend its capabilities. It does this through *plugins*, which are dynamically loaded components that enable new features. -For example, Traefik plugins can add features to modify requests or headers, issue redirects, add authentication, and so on, providing similar functionality to Traefik [middlewares](https://docs.traefik.io/middlewares/overview/). +For example, Traefik plugins can add features to modify requests or headers, issue redirects, add authentication, and so on, providing similar functionality to Traefik [middlewares](https://doc.traefik.io/traefik/middlewares/overview/). Traefik Pilot can also monitor connected Traefik instances and issue alerts when one is not responding, or when it is subject to security vulnerabilities. diff --git a/docs/content/providers/docker.md b/docs/content/providers/docker.md index dbc02d4f5..f5e48a626 100644 --- a/docs/content/providers/docker.md +++ b/docs/content/providers/docker.md @@ -163,7 +163,7 @@ You can specify which Docker API Endpoint to use with the directive [`endpoint`] ??? info "More Resources and Examples" - ["Paranoid about mounting /var/run/docker.sock?"](https://medium.com/@containeroo/traefik-2-0-paranoid-about-mounting-var-run-docker-sock-22da9cb3e78c) - - [Traefik and Docker: A Discussion with Docker Captain, Bret Fisher](https://blog.containo.us/traefik-and-docker-a-discussion-with-docker-captain-bret-fisher-7f0b9a54ff88) + - [Traefik and Docker: A Discussion with Docker Captain, Bret Fisher](https://blog.traefik.io/traefik-and-docker-a-discussion-with-docker-captain-bret-fisher-7f0b9a54ff88) - [KubeCon EU 2018 Keynote, Running with Scissors, from Liz Rice](https://www.youtube.com/watch?v=ltrV-Qmh3oY) - [Don't expose the Docker socket (not even to a container)](https://www.lvh.io/posts/dont-expose-the-docker-socket-not-even-to-a-container/) - [A thread on Stack Overflow about sharing the `/var/run/docker.sock` file](https://news.ycombinator.com/item?id=17983623) diff --git a/docs/content/providers/kubernetes-crd.md b/docs/content/providers/kubernetes-crd.md index 32538a861..5f3f06086 100644 --- a/docs/content/providers/kubernetes-crd.md +++ b/docs/content/providers/kubernetes-crd.md @@ -53,9 +53,9 @@ For this reason, users can run multiple instances of Traefik at the same time to When using a single instance of Traefik with LetsEncrypt, no issues should be encountered, however this could be a single point of failure. Unfortunately, it is not possible to run multiple instances of Traefik 2.0 with LetsEncrypt enabled, because there is no way to ensure that the correct instance of Traefik will receive the challenge request, and subsequent responses. -Previous versions of Traefik used a [KV store](https://docs.traefik.io/v1.7/configuration/acme/#storage) to attempt to achieve this, but due to sub-optimal performance was dropped as a feature in 2.0. +Previous versions of Traefik used a [KV store](https://doc.traefik.io/traefik/v1.7/configuration/acme/#storage) to attempt to achieve this, but due to sub-optimal performance was dropped as a feature in 2.0. -If you require LetsEncrypt with HA in a kubernetes environment, we recommend using [TraefikEE](https://containo.us/traefikee/) where distributed LetsEncrypt is a supported feature. +If you require LetsEncrypt with HA in a kubernetes environment, we recommend using [Traefik Enterprise](https://traefik.io/traefik-enterprise/) where distributed LetsEncrypt is a supported feature. If you are wanting to continue to run Traefik Community Edition, LetsEncrypt HA can be achieved by using a Certificate Controller such as [Cert-Manager](https://docs.cert-manager.io/en/latest/index.html). When using Cert-Manager to manage certificates, it will create secrets in your namespaces that can be referenced as TLS secrets in your [ingress objects](https://kubernetes.io/docs/concepts/services-networking/ingress/#tls). @@ -78,7 +78,7 @@ _Optional, Default=empty_ ```yaml tab="File (YAML)" providers: kubernetesCRD: - endpoint = "http://localhost:8080" + endpoint: "http://localhost:8080" # ... ``` @@ -112,7 +112,7 @@ _Optional, Default=empty_ ```yaml tab="File (YAML)" providers: kubernetesCRD: - token = "mytoken" + token: "mytoken" # ... ``` diff --git a/docs/content/providers/kubernetes-ingress.md b/docs/content/providers/kubernetes-ingress.md index 7f7d70d36..1e58f4f44 100644 --- a/docs/content/providers/kubernetes-ingress.md +++ b/docs/content/providers/kubernetes-ingress.md @@ -65,11 +65,11 @@ When using a single instance of Traefik with LetsEncrypt, no issues should be en however this could be a single point of failure. Unfortunately, it is not possible to run multiple instances of Traefik 2.0 with LetsEncrypt enabled, because there is no way to ensure that the correct instance of Traefik will receive the challenge request, and subsequent responses. -Previous versions of Traefik used a [KV store](https://docs.traefik.io/v1.7/configuration/acme/#storage) to attempt to achieve this, +Previous versions of Traefik used a [KV store](https://doc.traefik.io/traefik/v1.7/configuration/acme/#storage) to attempt to achieve this, but due to sub-optimal performance was dropped as a feature in 2.0. If you require LetsEncrypt with HA in a kubernetes environment, -we recommend using [TraefikEE](https://containo.us/traefikee/) where distributed LetsEncrypt is a supported feature. +we recommend using [Traefik Enterprise](https://traefik.io/traefik-enterprise/) where distributed LetsEncrypt is a supported feature. If you are wanting to continue to run Traefik Community Edition, LetsEncrypt HA can be achieved by using a Certificate Controller such as [Cert-Manager](https://docs.cert-manager.io/en/latest/index.html). diff --git a/docs/content/providers/overview.md b/docs/content/providers/overview.md index cb651de64..a3b26b028 100644 --- a/docs/content/providers/overview.md +++ b/docs/content/providers/overview.md @@ -43,7 +43,7 @@ Below is the list of the currently supported providers in Traefik. !!! info "More Providers" The current version of Traefik doesn't support (yet) every provider. - See the [previous version (v1.7)](https://docs.traefik.io/v1.7/) for more providers. + See the [previous version (v1.7)](https://doc.traefik.io/traefik/v1.7/) for more providers. ### Configuration reload frequency diff --git a/docs/content/reference/dynamic-configuration/file.yaml b/docs/content/reference/dynamic-configuration/file.yaml index ba168964f..fe39110fd 100644 --- a/docs/content/reference/dynamic-configuration/file.yaml +++ b/docs/content/reference/dynamic-configuration/file.yaml @@ -256,7 +256,7 @@ http: Middleware14: plugin: PluginConf: - foo = "bar" + foo: bar Middleware15: rateLimit: average: 42 diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 5870029e9..6613bfc93 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -1,7 +1,7 @@ site_name: Traefik site_description: Traefik Documentation -site_author: containo.us -site_url: https://docs.traefik.io +site_author: traefik.io +site_url: https://doc.traefik.io/traefik dev_addr: 0.0.0.0:8000 repo_name: 'GitHub' @@ -15,8 +15,8 @@ theme: custom_dir: 'theme' language: en include_sidebar: true - favicon: assets/img/traefik.icon.png - logo: assets/img/traefik.logo.png + favicon: assets/img/traefikproxy-icon-color.png + logo: assets/img/traefikproxy-vertical-logo-color.svg feature: tabs: false palette: diff --git a/docs/scripts/verify.sh b/docs/scripts/verify.sh index 848d83d52..029462564 100755 --- a/docs/scripts/verify.sh +++ b/docs/scripts/verify.sh @@ -19,9 +19,10 @@ find "${PATH_TO_SITE}" -type f -not -path "/app/site/theme/*" \ htmlproofer \ --check-html \ --check_external_hash \ - --alt_ignore="/traefik.logo.png/" \ + --alt_ignore="/traefikproxy-vertical-logo-color.svg/" \ --http_status_ignore="0,500,501,503" \ - --url_ignore="/https://groups.google.com/a/traefik.io/forum/#!forum/security/,/localhost:/,/127.0.0.1:/,/fonts.gstatic.com/,/.minikube/,/github.com\/containous\/traefik\/*edit*/,/github.com\/containous\/traefik\/$/,/github.com\/traefik\/traefik\/*edit*/,/github.com\/traefik\/traefik\/$/,/docs.traefik.io/,/github\.com\/golang\/oauth2\/blob\/36a7019397c4c86cf59eeab3bc0d188bac444277\/.+/,/www.akamai.com/,/pilot.traefik.io\/profile/,/containo.us/,/docs.mae.sh/,/www.mkdocs.org/,/squidfunk.github.io/,/ietf.org/" \ + --file_ignore="/404.html/" \ + --url_ignore="/https://groups.google.com/a/traefik.io/forum/#!forum/security/,/localhost:/,/127.0.0.1:/,/fonts.gstatic.com/,/.minikube/,/github.com\/traefik\/traefik\/*edit*/,/github.com\/traefik\/traefik/,/doc.traefik.io/,/github\.com\/golang\/oauth2\/blob\/36a7019397c4c86cf59eeab3bc0d188bac444277\/.+/,/www.akamai.com/,/pilot.traefik.io\/profile/,/traefik.io/,/doc.traefik.io\/traefik-mesh/,/www.mkdocs.org/,/squidfunk.github.io/,/ietf.org/" \ '{}' 1>/dev/null ## HTML-proofer options at https://github.com/gjtorikian/html-proofer#configuration diff --git a/docs/theme/assets/images/traefik-enterprise-logo.svg b/docs/theme/assets/images/traefik-enterprise-logo.svg new file mode 100644 index 000000000..f183189f9 --- /dev/null +++ b/docs/theme/assets/images/traefik-enterprise-logo.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/theme/assets/images/traefik-labs.svg b/docs/theme/assets/images/traefik-labs.svg new file mode 100644 index 000000000..1a1fb942f --- /dev/null +++ b/docs/theme/assets/images/traefik-labs.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/theme/assets/images/traefik-mesh-logo.svg b/docs/theme/assets/images/traefik-mesh-logo.svg new file mode 100644 index 000000000..6f0a7f2d7 --- /dev/null +++ b/docs/theme/assets/images/traefik-mesh-logo.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/theme/assets/images/traefik-pilot-logo.svg b/docs/theme/assets/images/traefik-pilot-logo.svg new file mode 100644 index 000000000..30dc2d91b --- /dev/null +++ b/docs/theme/assets/images/traefik-pilot-logo.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/theme/assets/images/traefik-proxy-logo-long.svg b/docs/theme/assets/images/traefik-proxy-logo-long.svg new file mode 100644 index 000000000..3f0ef49db --- /dev/null +++ b/docs/theme/assets/images/traefik-proxy-logo-long.svg @@ -0,0 +1,14 @@ + + + TraefikProxy-horizontal-logo-color + + + + + + + + + + + \ No newline at end of file diff --git a/docs/theme/assets/images/traefik-proxy-logo.svg b/docs/theme/assets/images/traefik-proxy-logo.svg new file mode 100644 index 000000000..9a7ff2e4b --- /dev/null +++ b/docs/theme/assets/images/traefik-proxy-logo.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/theme/main.html b/docs/theme/main.html index 8abec98bf..804895802 100644 --- a/docs/theme/main.html +++ b/docs/theme/main.html @@ -77,7 +77,7 @@ diff --git a/docs/theme/partials/company-header.html b/docs/theme/partials/company-header.html index f1acb902a..a32909c32 100644 --- a/docs/theme/partials/company-header.html +++ b/docs/theme/partials/company-header.html @@ -8,11 +8,11 @@
@@ -32,13 +32,39 @@