From 7fc42ebb025f35a101b8bd03c4936e8d4effcb92 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 23 Sep 2020 10:43:07 +0200 Subject: [PATCH] chore: apply new documentation style. Co-authored-by: jbdoumenjou --- .github/CODEOWNERS | 24 -- .github/ISSUE_TEMPLATE.md | 4 +- .github/ISSUE_TEMPLATE/Bug_report.md | 4 +- .github/ISSUE_TEMPLATE/Feature_request.md | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .travis.yml | 13 +- CODE_OF_CONDUCT.md | 2 +- CONTRIBUTING.md | 4 +- README.md | 28 +- 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 | 4 +- docs/content/contributing/building-testing.md | 14 +- docs/content/contributing/data-collection.md | 4 +- docs/content/contributing/documentation.md | 6 +- docs/content/contributing/maintainers.md | 8 +- .../content/contributing/submitting-issues.md | 6 +- .../contributing/submitting-pull-requests.md | 2 +- docs/content/contributing/thank-you.md | 4 +- .../getting-started/install-traefik.md | 12 +- docs/content/getting-started/quick-start.md | 2 +- docs/content/glossary.md | 2 +- docs/content/index.md | 10 +- docs/content/middlewares/overview.md | 2 +- docs/content/migration/v1-to-v2.md | 8 +- docs/content/providers/docker.md | 4 +- docs/content/providers/kubernetes-crd.md | 4 +- docs/content/providers/kubernetes-ingress.md | 6 +- docs/content/providers/marathon.md | 2 +- docs/content/providers/overview.md | 2 +- .../routing/providers/kubernetes-crd.md | 54 ++-- .../routing/providers/kubernetes-ingress.md | 12 +- .../user-guides/crd-acme/03-deployments.yml | 2 +- docs/content/user-guides/crd-acme/index.md | 2 +- .../acme-dns/docker-compose.yml | 2 +- .../acme-dns/docker-compose_secrets.yml | 2 +- .../acme-http/docker-compose.yml | 2 +- .../acme-tls/docker-compose.yml | 2 +- .../basic-example/docker-compose.yml | 2 +- .../docker-compose/basic-example/index.md | 2 +- docs/content/user-guides/marathon.md | 4 +- docs/mkdocs.yml | 12 +- 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 | 4 +- docs/theme/partials/company-header.html | 251 ++++++++++++++++++ docs/theme/partials/containous-header.html | 238 ----------------- docs/theme/partials/product-switcher.html | 38 +-- webui/src/components/_commons/NavBar.vue | 2 +- 62 files changed, 577 insertions(+), 437 deletions(-) delete mode 100644 .github/CODEOWNERS 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 create mode 100644 docs/theme/partials/company-header.html delete mode 100644 docs/theme/partials/containous-header.html diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index f6315449b..000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,24 +0,0 @@ -provider/kubernetes/** @containous/kubernetes -provider/rancher/** @containous/rancher -provider/marathon/** @containous/marathon -provider/docker/** @containous/docker - -docs/user-guide/kubernetes.md @containous/kubernetes -docs/user-guide/marathon.md @containous/marathon -docs/user-guide/swarm.md @containous/docker -docs/user-guide/swarm-mode.md @containous/docker - -docs/configuration/backends/docker.md @containous/docker -docs/configuration/backends/kubernetes.md @containous/kubernetes -docs/configuration/backends/marathon.md @containous/marathon -docs/configuration/backends/rancher.md @containous/rancher - -examples/k8s/ @containous/kubernetes -examples/compose-k8s.yaml @containous/kubernetes -examples/k8s.namespace.yaml @containous/kubernetes -examples/compose-rancher.yml @containous/rancher -examples/compose-marathon.yml @containous/marathon - -vendor/github.com/gambol99/go-marathon @containous/marathon -vendor/github.com/rancher @containous/rancher -vendor/k8s.io/ @containous/kubernetes diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index ff440d3a1..8d124b341 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -8,7 +8,7 @@ DO NOT FILE ISSUES FOR GENERAL SUPPORT QUESTIONS. The issue tracker is for reporting bugs and feature requests only. For end-user related support questions, please refer to one of the following: -- the Traefik community forum: https://community.containo.us/ +- the Traefik community forum: https://community.traefik.io/ --> @@ -17,7 +17,7 @@ Bug diff --git a/.github/ISSUE_TEMPLATE/Bug_report.md b/.github/ISSUE_TEMPLATE/Bug_report.md index 973a474cb..4b60b6f3a 100644 --- a/.github/ISSUE_TEMPLATE/Bug_report.md +++ b/.github/ISSUE_TEMPLATE/Bug_report.md @@ -13,7 +13,7 @@ DO NOT FILE ISSUES FOR GENERAL SUPPORT QUESTIONS. The issue tracker is for reporting bugs and feature requests only. For end-user related support questions, please refer to one of the following: -- the Traefik community forum: https://community.containo.us/ +- the Traefik community forum: https://community.traefik.io/ --> @@ -22,7 +22,7 @@ Bug diff --git a/.github/ISSUE_TEMPLATE/Feature_request.md b/.github/ISSUE_TEMPLATE/Feature_request.md index 2495c9aec..375094da0 100644 --- a/.github/ISSUE_TEMPLATE/Feature_request.md +++ b/.github/ISSUE_TEMPLATE/Feature_request.md @@ -13,7 +13,7 @@ DO NOT FILE ISSUES FOR GENERAL SUPPORT QUESTIONS. The issue tracker is for reporting bugs and feature requests only. For end-user related support questions, please refer to one of the following: -- the Traefik community forum: https://community.containo.us/ +- the Traefik community forum: https://community.traefik.io/ --> 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 0506388cc..1624a8298 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,19 +42,18 @@ deploy: skip_cleanup: true file_glob: true on: - repo: containous/traefik + repo: traefik/traefik tags: true - provider: script script: sh script/deploy.sh skip_cleanup: true on: - repo: containous/traefik + 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: containous/traefik + repo: traefik/traefik all_branches: true + diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index ab197c5d9..89f92ae2c 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -36,7 +36,7 @@ Representation of a project may be further defined and clarified by project main ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at contact@containo.us +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at contact@traefik.io All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 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 628c5c303..faadd02c3 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@

[![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/containous/traefik)](https://goreportcard.com/report/containous/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/containous/traefik/blob/master/LICENSE.md) -[![Join the community support forum at https://community.containo.us/](https://img.shields.io/badge/style-register-green.svg?style=social&label=Discourse)](https://community.containo.us/) +[![Join the community support forum at https://community.traefik.io/](https://img.shields.io/badge/style-register-green.svg?style=social&label=Discourse)](https://community.traefik.io/) [![Twitter](https://img.shields.io/twitter/follow/traefik.svg?style=social)](https://twitter.com/intent/follow?screen_name=traefik) @@ -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,18 +87,18 @@ 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). ## Support To get community support, you can: -- join 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/) +- join 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/) -If you need commercial support, please contact [Containo.us](https://containo.us) by mail: . +If you need commercial support, please contact [Traefik.io](https://traefik.io) by mail: . ## Download @@ -122,7 +122,7 @@ git clone https://github.com/containous/traefik ## Introductory Videos -You can find high level and deep dive videos on [videos.containo.us](https://videos.containo.us). +You can find high level and deep dive videos on [videos.traefik.io](https://videos.traefik.io). ## Maintainers diff --git a/cmd/traefik/traefik.go b/cmd/traefik/traefik.go index 0551ddabe..e600363cf 100644 --- a/cmd/traefik/traefik.go +++ b/cmd/traefik/traefik.go @@ -435,13 +435,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..baefca825 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 #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..eea7c0b9a 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; +} \ No newline at end of file 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 1052f8caf..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/containous/traefik/wiki/Awesome-Traefik). +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/building-testing.md b/docs/content/contributing/building-testing.md index fd0cad182..665852872 100644 --- a/docs/content/contributing/building-testing.md +++ b/docs/content/contributing/building-testing.md @@ -35,7 +35,7 @@ Step 1/10 : FROM golang:1.14-alpine [...] Successfully built 5c3c1a911277 Successfully tagged traefik-dev:4475--feature-documentation -docker run -e "TEST_CONTAINER=1" -v "/var/run/docker.sock:/var/run/docker.sock" -it -e OS_ARCH_ARG -e OS_PLATFORM_ARG -e TESTFLAGS -e VERBOSE -e VERSION -e CODENAME -e TESTDIRS -e CI -e CONTAINER=DOCKER -v "/home/ldez/sources/go/src/github.com/containous/traefik/"dist":/go/src/github.com/containous/traefik/"dist"" "traefik-dev:4475--feature-documentation" ./script/make.sh generate binary +docker run -e "TEST_CONTAINER=1" -v "/var/run/docker.sock:/var/run/docker.sock" -it -e OS_ARCH_ARG -e OS_PLATFORM_ARG -e TESTFLAGS -e VERBOSE -e VERSION -e CODENAME -e TESTDIRS -e CI -e CONTAINER=DOCKER -v "/home/ldez/sources/go/src/github.com/traefik/traefik/"dist":/go/src/github.com/traefik/traefik/"dist"" "traefik-dev:4475--feature-documentation" ./script/make.sh generate binary ---> Making bundle: generate (in .) removed 'autogen/genstatic/gen.go' @@ -68,7 +68,7 @@ Requirements: !!! tip "Source Directory" - It is recommended that you clone Traefik into the `~/go/src/github.com/containous/traefik` directory. + It is recommended that you clone Traefik into the `~/go/src/github.com/traefik/traefik` directory. This is the official golang workspace hierarchy that will allow dependencies to be properly resolved. !!! note "Environment" @@ -104,7 +104,7 @@ Once you've set up your go environment and cloned the source repository, you can Beforehand, you need to get [go-bindata](https://github.com/containous/go-bindata) (the first time) in order to be able to use the `go generate` command (which is part of the build process). ```bash -cd ~/go/src/github.com/containous/traefik +cd ~/go/src/github.com/traefik/traefik # Get go-bindata. (Important: the ellipses are required.) GO111MODULE=off go get github.com/containous/go-bindata/... @@ -124,7 +124,7 @@ go generate go build ./cmd/traefik ``` -You will find the Traefik executable (`traefik`) in the `~/go/src/github.com/containous/traefik` directory. +You will find the Traefik executable (`traefik`) in the `~/go/src/github.com/traefik/traefik` directory. ## Testing @@ -138,13 +138,13 @@ Run all tests (unit and integration) using the `test` target. $ make test-unit docker build -t "traefik-dev:your-feature-branch" -f build.Dockerfile . # […] -docker run --rm -it -e OS_ARCH_ARG -e OS_PLATFORM_ARG -e TESTFLAGS -v "/home/user/go/src/github/containous/traefik/dist:/go/src/github.com/containous/traefik/dist" "traefik-dev:your-feature-branch" ./script/make.sh generate test-unit +docker run --rm -it -e OS_ARCH_ARG -e OS_PLATFORM_ARG -e TESTFLAGS -v "/home/user/go/src/github/traefik/traefik/dist:/go/src/github.com/traefik/traefik/dist" "traefik-dev:your-feature-branch" ./script/make.sh generate test-unit ---> Making bundle: generate (in .) removed 'gen.go' ---> Making bundle: test-unit (in .) + go test -cover -coverprofile=cover.out . -ok github.com/containous/traefik 0.005s coverage: 4.1% of statements +ok github.com/traefik/traefik 0.005s coverage: 4.1% of statements Test success ``` @@ -172,7 +172,7 @@ More: https://labix.org/gocheck Unit tests can be run from the cloned directory using `$ go test ./...` which should return `ok`, similar to: ```test -ok _/home/user/go/src/github/containous/traefik 0.004s +ok _/home/user/go/src/github/traefik/traefik 0.004s ``` Integration tests must be run from the `integration/` directory and require the `-integration` switch: `$ cd integration && go test -integration ./...`. diff --git a/docs/content/contributing/data-collection.md b/docs/content/contributing/data-collection.md index a91ef9e2b..e82f4812a 100644 --- a/docs/content/contributing/data-collection.md +++ b/docs/content/contributing/data-collection.md @@ -29,7 +29,7 @@ For this very reason, the sendAnonymousUsage option is mandatory: we want you to ## Collected Data -This feature comes from the public proposal [here](https://github.com/containous/traefik/issues/2369). +This feature comes from the public proposal [here](https://github.com/traefik/traefik/issues/2369). In order to help us learn more about how Traefik is being used and improve it, we collect anonymous usage statistics from running instances. Those data help us prioritize our developments and focus on what's important for our users (for example, which provider is popular, and which is not). @@ -90,6 +90,6 @@ Once a day (the first call begins 10 minutes after the start of Traefik), we col ## The Code for Data Collection -If you want to dig into more details, here is the source code of the collecting system: [collector.go](https://github.com/containous/traefik/blob/master/pkg/collector/collector.go) +If you want to dig into more details, here is the source code of the collecting system: [collector.go](https://github.com/traefik/traefik/blob/master/pkg/collector/collector.go) By default we anonymize all configuration fields, except fields tagged with `export=true`. diff --git a/docs/content/contributing/documentation.md b/docs/content/contributing/documentation.md index eb5f176f1..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` @@ -20,7 +20,7 @@ You can build the documentation and test it locally (with live reloading), using $ make docs docker build -t traefik-docs -f docs.Dockerfile . # […] -docker run --rm -v /home/user/go/github/containous/traefik:/mkdocs -p 8000:8000 traefik-docs mkdocs serve +docker run --rm -v /home/user/go/github/traefik/traefik:/mkdocs -p 8000:8000 traefik-docs mkdocs serve # […] [I 170828 20:47:48 server:283] Serving on http://0.0.0.0:8000 [I 170828 20:47:48 handlers:60] Start watching changes @@ -75,7 +75,7 @@ To check that the documentation meets standard expectations (no dead links, html $ make docs-verify docker build -t traefik-docs-verify ./script/docs-verify-docker-image ## Build Validator image ... -docker run --rm -v /home/travis/build/containous/traefik:/app traefik-docs-verify ## Check for dead links and w3c compliance +docker run --rm -v /home/travis/build/traefik/traefik:/app traefik-docs-verify ## Check for dead links and w3c compliance === Checking HTML content... Running ["HtmlCheck", "ImageCheck", "ScriptCheck", "LinkCheck"] on /app/site/basics/index.html on *.html... ``` diff --git a/docs/content/contributing/maintainers.md b/docs/content/contributing/maintainers.md index b95a54663..9c4dde672 100644 --- a/docs/content/contributing/maintainers.md +++ b/docs/content/contributing/maintainers.md @@ -20,7 +20,7 @@ ## Contributions Daily Meeting -* 3 Maintainers should attend to a Contributions Daily Meeting where we sort and label new issues ([is:issue label:status/0-needs-triage](https://github.com/containous/traefik/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Astatus%2F0-needs-triage+)), and review every Pull Requests +* 3 Maintainers should attend to a Contributions Daily Meeting where we sort and label new issues ([is:issue label:status/0-needs-triage](https://github.com/traefik/traefik/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Astatus%2F0-needs-triage+)), and review every Pull Requests * Every pull request should be checked during the Contributions Daily Meeting * Even if it’s already assigned * Even PR labelled with `contributor/waiting-for-corrections` or `contributor/waiting-for-feedback` @@ -43,7 +43,7 @@ We use [PRM](https://github.com/ldez/prm) to manage locally pull requests. ## Bots -### [Myrmica Lobicornis](https://github.com/containous/lobicornis/) +### [Myrmica Lobicornis](https://github.com/traefik/lobicornis/) Update and Merge Pull Request. @@ -67,12 +67,12 @@ This label is used when: * Merging branches into the master * Preparing the release -### [Myrmica Bibikoffi](https://github.com/containous/bibikoffi/) +### [Myrmica Bibikoffi](https://github.com/traefik/bibikoffi/) * closes stale issues [cron] * use some criterion as number of days between creation, last update, labels, ... -### [Myrmica Aloba](https://github.com/containous/aloba) +### [Myrmica Aloba](https://github.com/traefik/aloba) Manage GitHub labels. diff --git a/docs/content/contributing/submitting-issues.md b/docs/content/contributing/submitting-issues.md index 4370eda67..512a06b53 100644 --- a/docs/content/contributing/submitting-issues.md +++ b/docs/content/contributing/submitting-issues.md @@ -3,7 +3,7 @@ Help Us Help You! {: .subtitle } -We use the [GitHub issue tracker](https://github.com/containous/traefik/issues) to keep track of issues in Traefik. +We use the [GitHub issue tracker](https://github.com/traefik/traefik/issues) to keep track of issues in Traefik. The process of sorting and checking the issues is a daunting task, and requires a lot of work (more than an hour a day ... just for sorting). To save us some time and get quicker feedback, be sure to follow the guide lines below. @@ -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 @@ -22,7 +22,7 @@ The title must be short and descriptive. (~60 characters) ## Description -Follow the [issue template](https://github.com/containous/traefik/blob/master/.github/ISSUE_TEMPLATE.md) as much as possible. +Follow the [issue template](https://github.com/traefik/traefik/blob/master/.github/ISSUE_TEMPLATE.md) as much as possible. Explain us in which conditions you encountered the issue, what is your context. diff --git a/docs/content/contributing/submitting-pull-requests.md b/docs/content/contributing/submitting-pull-requests.md index 1de31241a..b388e4fa0 100644 --- a/docs/content/contributing/submitting-pull-requests.md +++ b/docs/content/contributing/submitting-pull-requests.md @@ -15,7 +15,7 @@ The title must be short and descriptive. (~60 characters) ## Description -Follow the [pull request template](https://github.com/containous/traefik/blob/master/.github/PULL_REQUEST_TEMPLATE.md) as much as possible. +Follow the [pull request template](https://github.com/traefik/traefik/blob/master/.github/PULL_REQUEST_TEMPLATE.md) as much as possible. Explain the conditions which led you to write this PR: give us context. The context should lead to something, an idea or a problem that you’re facing. diff --git a/docs/content/contributing/thank-you.md b/docs/content/contributing/thank-you.md index ab4dd7153..55411ef4f 100644 --- a/docs/content/contributing/thank-you.md +++ b/docs/content/contributing/thank-you.md @@ -3,8 +3,8 @@ _You_ Made It {: .subtitle} -Traefik truly is an [open-source project](https://github.com/containous/traefik/), -and wouldn't have become what it is today without the help of our [many contributors](https://github.com/containous/traefik/graphs/contributors) (at the time of writing this), +Traefik truly is an [open-source project](https://github.com/traefik/traefik/), +and wouldn't have become what it is today without the help of our [many contributors](https://github.com/traefik/traefik/graphs/contributors) (at the time of writing this), not accounting for people having helped with issues, tests, comments, articles, ... or just enjoying it and letting others know. So once again, thank you for your invaluable help on making Traefik such a good product. diff --git a/docs/content/getting-started/install-traefik.md b/docs/content/getting-started/install-traefik.md index 04703c0e6..853b1753d 100644 --- a/docs/content/getting-started/install-traefik.md +++ b/docs/content/getting-started/install-traefik.md @@ -9,7 +9,7 @@ You can install Traefik with the following flavors: ## Use the Official Docker Image -Choose one of the [official Docker images](https://hub.docker.com/_/traefik) and run it with the [sample configuration file](https://raw.githubusercontent.com/containous/traefik/v2.2/traefik.sample.toml): +Choose one of the [official Docker images](https://hub.docker.com/_/traefik) and run it with the [sample configuration file](https://raw.githubusercontent.com/traefik/traefik/v2.2/traefik.sample.toml): ```bash docker run -d -p 8080:8080 -p 80:80 \ @@ -30,9 +30,9 @@ 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 . +Traefik can be installed in Kubernetes using the Helm chart from . Ensure that the following requirements are met: @@ -42,7 +42,7 @@ Ensure that the following requirements are met: Add Traefik's chart repository to Helm: ```bash -helm repo add traefik https://containous.github.io/traefik-helm-chart +helm repo add traefik https://traefik.github.io/traefik-helm-chart ``` You can update the chart repository by running: @@ -76,7 +76,7 @@ helm install traefik traefik/traefik {: #helm-custom-values } The values are not (yet) documented, but are self-explanatory: - you can look at the [default `values.yaml`](https://github.com/containous/traefik-helm-chart/blob/master/traefik/values.yaml) file to explore possibilities. + you can look at the [default `values.yaml`](https://github.com/traefik/traefik-helm-chart/blob/master/traefik/values.yaml) file to explore possibilities. You can also set Traefik command line flags using `additionalArguments`. Example of installation with logging set to `DEBUG`: @@ -128,7 +128,7 @@ spec: ## Use the Binary Distribution -Grab the latest binary from the [releases](https://github.com/containous/traefik/releases) page. +Grab the latest binary from the [releases](https://github.com/traefik/traefik/releases) page. ??? info "Check the integrity of the downloaded file" diff --git a/docs/content/getting-started/quick-start.md b/docs/content/getting-started/quick-start.md index b5df1d368..9ec92d9f3 100644 --- a/docs/content/getting-started/quick-start.md +++ b/docs/content/getting-started/quick-start.md @@ -48,7 +48,7 @@ Edit your `docker-compose.yml` file and add the following at the end of your fil # ... whoami: # A container that exposes an API to show its IP address - image: containous/whoami + image: traefik/whoami labels: - "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)" ``` 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 4806ab7ca..112b90df4 100644 --- a/docs/content/index.md +++ b/docs/content/index.md @@ -3,7 +3,7 @@ ![Architecture](assets/img/traefik-architecture.png) -Traefik is an [open-source](https://github.com/containous/traefik) *Edge Router* that makes publishing your services a fun and easy experience. +Traefik is an [open-source](https://github.com/traefik/traefik) *Edge Router* that makes publishing your services a fun and easy experience. It receives requests on behalf of your system and finds out which components are responsible for handling them. What sets Traefik apart, besides its many features, is that it automatically discovers the right configuration for your services. @@ -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/middlewares/overview.md b/docs/content/middlewares/overview.md index 622db7e86..557811d41 100644 --- a/docs/content/middlewares/overview.md +++ b/docs/content/middlewares/overview.md @@ -17,7 +17,7 @@ Pieces of middleware can be combined in chains to fit every scenario. # As a Docker Label whoami: # A container that exposes an API to show its IP address - image: containous/whoami + image: traefik/whoami labels: # Create a middleware named `foo-add-prefix` - "traefik.http.middlewares.foo-add-prefix.addprefix.prefix=/foo" diff --git a/docs/content/migration/v1-to-v2.md b/docs/content/migration/v1-to-v2.md index fb8e0f983..075f62480 100644 --- a/docs/content/migration/v1-to-v2.md +++ b/docs/content/migration/v1-to-v2.md @@ -10,7 +10,7 @@ feature by feature, of how the configuration looked like in v1, and how it now l !!! info "Migration Helper" - We created a tool to help during the migration: [traefik-migration-tool](https://github.com/containous/traefik-migration-tool) + We created a tool to help during the migration: [traefik-migration-tool](https://github.com/traefik/traefik-migration-tool) This tool allows to: @@ -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.2/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.2/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/providers/docker.md b/docs/content/providers/docker.md index a79efd7e6..12126e749 100644 --- a/docs/content/providers/docker.md +++ b/docs/content/providers/docker.md @@ -163,12 +163,12 @@ 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) - [To DinD or not to DinD](https://blog.loof.fr/2018/01/to-dind-or-not-do-dind.html) - - [Traefik issue GH-4174 about security with Docker socket](https://github.com/containous/traefik/issues/4174) + - [Traefik issue GH-4174 about security with Docker socket](https://github.com/traefik/traefik/issues/4174) - [Inspecting Docker Activity with Socat](https://developers.redhat.com/blog/2015/02/25/inspecting-docker-activity-with-socat/) - [Letting Traefik run on Worker Nodes](https://blog.mikesir87.io/2018/07/letting-traefik-run-on-worker-nodes/) - [Docker Socket Proxy from Tecnativa](https://github.com/Tecnativa/docker-socket-proxy) diff --git a/docs/content/providers/kubernetes-crd.md b/docs/content/providers/kubernetes-crd.md index 32538a861..f79f5e954 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). diff --git a/docs/content/providers/kubernetes-ingress.md b/docs/content/providers/kubernetes-ingress.md index cbd27ff28..8dc070fb8 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). @@ -357,4 +357,4 @@ providers: ### Further If one wants to know more about the various aspects of the Ingress spec that Traefik supports, -many examples of Ingresses definitions are located in the tests [data](https://github.com/containous/traefik/tree/v2.2/pkg/provider/kubernetes/ingress/fixtures) of the Traefik repository. +many examples of Ingresses definitions are located in the tests [data](https://github.com/traefik/traefik/tree/v2.2/pkg/provider/kubernetes/ingress/fixtures) of the Traefik repository. diff --git a/docs/content/providers/marathon.md b/docs/content/providers/marathon.md index 7fcf3ac49..5b7239f88 100644 --- a/docs/content/providers/marathon.md +++ b/docs/content/providers/marathon.md @@ -32,7 +32,7 @@ See also [Marathon user guide](../user-guides/marathon.md). "container": { "type": "DOCKER", "docker": { - "image": "containous/whoami", + "image": "traefik/whoami", "network": "BRIDGE", "portMappings": [ { diff --git a/docs/content/providers/overview.md b/docs/content/providers/overview.md index 71b4d974f..5d7bbbe90 100644 --- a/docs/content/providers/overview.md +++ b/docs/content/providers/overview.md @@ -42,7 +42,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/routing/providers/kubernetes-crd.md b/docs/content/routing/providers/kubernetes-crd.md index 655309ce7..f41f19ba9 100644 --- a/docs/content/routing/providers/kubernetes-crd.md +++ b/docs/content/routing/providers/kubernetes-crd.md @@ -160,24 +160,24 @@ The Kubernetes Ingress Controller, The Custom Resource Way. name: whoami namespace: default labels: - app: containous + app: myapp name: whoami spec: replicas: 2 selector: matchLabels: - app: containous + app: myapp task: whoami template: metadata: labels: - app: containous + app: myapp task: whoami spec: containers: - - name: containouswhoami - image: containous/whoami + - name: whoami + image: traefik/whoami ports: - containerPort: 80 @@ -193,7 +193,7 @@ The Kubernetes Ingress Controller, The Custom Resource Way. - name: http port: 80 selector: - app: containous + app: myapp task: whoami --- @@ -203,24 +203,24 @@ The Kubernetes Ingress Controller, The Custom Resource Way. name: whoamitcp namespace: default labels: - app: containous + app: myapp name: whoamitcp spec: replicas: 2 selector: matchLabels: - app: containous + app: myapp task: whoamitcp template: metadata: labels: - app: containous + app: myapp task: whoamitcp spec: containers: - - name: containouswhoamitcp - image: containous/whoamitcp + - name: whoamitcp + image: traefik/whoamitcp ports: - containerPort: 8080 @@ -236,7 +236,7 @@ The Kubernetes Ingress Controller, The Custom Resource Way. - protocol: TCP port: 8080 selector: - app: containous + app: myapp task: whoamitcp --- @@ -246,24 +246,24 @@ The Kubernetes Ingress Controller, The Custom Resource Way. name: whoamiudp namespace: default labels: - app: containous + app: myapp name: whoamiudp spec: replicas: 2 selector: matchLabels: - app: containous + app: myapp task: whoamiudp template: metadata: labels: - app: containous + app: myapp task: whoamiudp spec: containers: - - name: containouswhoamiudp - image: containous/whoamiudp:dev + - name: whoamiudp + image: traefik/whoamiudp ports: - containerPort: 8080 @@ -278,7 +278,7 @@ The Kubernetes Ingress Controller, The Custom Resource Way. ports: - port: 8080 selector: - app: containous + app: myapp task: whoamiudp ``` @@ -687,7 +687,7 @@ More information in the dedicated server [load balancing](../services/index.md#l - name: http port: 80 selector: - app: containous + app: myapp task: app1 --- apiVersion: v1 @@ -701,7 +701,7 @@ More information in the dedicated server [load balancing](../services/index.md#l - name: http port: 80 selector: - app: containous + app: myapp task: app2 ``` @@ -780,7 +780,7 @@ More information in the dedicated [Weighted Round Robin](../services/index.md#we - name: http port: 80 selector: - app: containous + app: myapp task: app1 --- apiVersion: v1 @@ -794,7 +794,7 @@ More information in the dedicated [Weighted Round Robin](../services/index.md#we - name: http port: 80 selector: - app: containous + app: myapp task: app2 --- apiVersion: v1 @@ -808,7 +808,7 @@ More information in the dedicated [Weighted Round Robin](../services/index.md#we - name: http port: 80 selector: - app: containous + app: myapp task: app3 ``` @@ -891,7 +891,7 @@ More information in the dedicated [mirroring](../services/index.md#mirroring-ser - name: http port: 80 selector: - app: containous + app: myapp task: app1 --- apiVersion: v1 @@ -905,7 +905,7 @@ More information in the dedicated [mirroring](../services/index.md#mirroring-ser - name: http port: 80 selector: - app: containous + app: myapp task: app2 ``` @@ -1026,7 +1026,7 @@ and there is a second level because each whoami service is a `replicaset` and is spec: containers: - name: whoami1 - image: containous/whoami + image: traefik/whoami ports: - name: web containerPort: 80 @@ -1052,7 +1052,7 @@ and there is a second level because each whoami service is a `replicaset` and is spec: containers: - name: whoami2 - image: containous/whoami + image: traefik/whoami ports: - name: web containerPort: 80 diff --git a/docs/content/routing/providers/kubernetes-ingress.md b/docs/content/routing/providers/kubernetes-ingress.md index 7f6c0e2c6..354fa5f1d 100644 --- a/docs/content/routing/providers/kubernetes-ingress.md +++ b/docs/content/routing/providers/kubernetes-ingress.md @@ -149,24 +149,24 @@ which in turn will create the resulting routers, services, handlers, etc. metadata: name: whoami labels: - app: containous + app: myapp name: whoami spec: replicas: 2 selector: matchLabels: - app: containous + app: myapp task: whoami template: metadata: labels: - app: containous + app: myapp task: whoami spec: containers: - - name: containouswhoami - image: containous/whoami + - name: whoami + image: traefik/whoami ports: - containerPort: 80 @@ -181,7 +181,7 @@ which in turn will create the resulting routers, services, handlers, etc. - name: http port: 80 selector: - app: containous + app: myapp task: whoami ``` diff --git a/docs/content/user-guides/crd-acme/03-deployments.yml b/docs/content/user-guides/crd-acme/03-deployments.yml index a168cfcfe..45afabca5 100644 --- a/docs/content/user-guides/crd-acme/03-deployments.yml +++ b/docs/content/user-guides/crd-acme/03-deployments.yml @@ -68,7 +68,7 @@ spec: spec: containers: - name: whoami - image: containous/whoami + image: traefik/whoami ports: - name: web containerPort: 80 diff --git a/docs/content/user-guides/crd-acme/index.md b/docs/content/user-guides/crd-acme/index.md index 8b14a5bd4..100f63b89 100644 --- a/docs/content/user-guides/crd-acme/index.md +++ b/docs/content/user-guides/crd-acme/index.md @@ -51,7 +51,7 @@ Also note the RBAC authorization resources; they'll be referenced through the `s ### Services -Then, the services. One for Traefik itself, and one for the app it routes for, i.e. in this case our demo HTTP server: [whoami](https://github.com/containous/whoami). +Then, the services. One for Traefik itself, and one for the app it routes for, i.e. in this case our demo HTTP server: [whoami](https://github.com/traefik/whoami). ```yaml --8<-- "content/user-guides/crd-acme/02-services.yml" diff --git a/docs/content/user-guides/docker-compose/acme-dns/docker-compose.yml b/docs/content/user-guides/docker-compose/acme-dns/docker-compose.yml index 3c6b4975b..7c94bb761 100644 --- a/docs/content/user-guides/docker-compose/acme-dns/docker-compose.yml +++ b/docs/content/user-guides/docker-compose/acme-dns/docker-compose.yml @@ -31,7 +31,7 @@ services: - "/var/run/docker.sock:/var/run/docker.sock:ro" whoami: - image: "containous/whoami" + image: "traefik/whoami" container_name: "simple-service" labels: - "traefik.enable=true" diff --git a/docs/content/user-guides/docker-compose/acme-dns/docker-compose_secrets.yml b/docs/content/user-guides/docker-compose/acme-dns/docker-compose_secrets.yml index f3962425a..0426cda9a 100644 --- a/docs/content/user-guides/docker-compose/acme-dns/docker-compose_secrets.yml +++ b/docs/content/user-guides/docker-compose/acme-dns/docker-compose_secrets.yml @@ -46,7 +46,7 @@ services: - "/var/run/docker.sock:/var/run/docker.sock:ro" whoami: - image: "containous/whoami" + image: "traefik/whoami" container_name: "simple-service" labels: - "traefik.enable=true" diff --git a/docs/content/user-guides/docker-compose/acme-http/docker-compose.yml b/docs/content/user-guides/docker-compose/acme-http/docker-compose.yml index 6d91125f4..c9f6eb71c 100644 --- a/docs/content/user-guides/docker-compose/acme-http/docker-compose.yml +++ b/docs/content/user-guides/docker-compose/acme-http/docker-compose.yml @@ -26,7 +26,7 @@ services: - "/var/run/docker.sock:/var/run/docker.sock:ro" whoami: - image: "containous/whoami" + image: "traefik/whoami" container_name: "simple-service" labels: - "traefik.enable=true" diff --git a/docs/content/user-guides/docker-compose/acme-tls/docker-compose.yml b/docs/content/user-guides/docker-compose/acme-tls/docker-compose.yml index 71c609736..8a4b7907c 100644 --- a/docs/content/user-guides/docker-compose/acme-tls/docker-compose.yml +++ b/docs/content/user-guides/docker-compose/acme-tls/docker-compose.yml @@ -23,7 +23,7 @@ services: - "/var/run/docker.sock:/var/run/docker.sock:ro" whoami: - image: "containous/whoami" + image: "traefik/whoami" container_name: "simple-service" labels: - "traefik.enable=true" diff --git a/docs/content/user-guides/docker-compose/basic-example/docker-compose.yml b/docs/content/user-guides/docker-compose/basic-example/docker-compose.yml index 7187dcbef..baba1f465 100644 --- a/docs/content/user-guides/docker-compose/basic-example/docker-compose.yml +++ b/docs/content/user-guides/docker-compose/basic-example/docker-compose.yml @@ -18,7 +18,7 @@ services: - "/var/run/docker.sock:/var/run/docker.sock:ro" whoami: - image: "containous/whoami" + image: "traefik/whoami" container_name: "simple-service" labels: - "traefik.enable=true" diff --git a/docs/content/user-guides/docker-compose/basic-example/index.md b/docs/content/user-guides/docker-compose/basic-example/index.md index a6350dc9f..aef9910e5 100644 --- a/docs/content/user-guides/docker-compose/basic-example/index.md +++ b/docs/content/user-guides/docker-compose/basic-example/index.md @@ -35,7 +35,7 @@ This will also be used as a starting point for the other docker-compose guides. ## Details -- As an example we use [whoami](https://github.com/containous/whoami) (a tiny Go server that prints os information and HTTP request to output) which was used to define our `simple-service` container. +- As an example we use [whoami](https://github.com/traefik/whoami) (a tiny Go server that prints os information and HTTP request to output) which was used to define our `simple-service` container. - We define an entry point, along with the exposure of the matching port within docker-compose, which basically allow us to "open and accept" HTTP traffic: diff --git a/docs/content/user-guides/marathon.md b/docs/content/user-guides/marathon.md index 6d416ee58..8fa26aecc 100644 --- a/docs/content/user-guides/marathon.md +++ b/docs/content/user-guides/marathon.md @@ -105,7 +105,7 @@ As such, there is no way to handle this situation deterministically. Finally, Marathon health checks are not mandatory (the default is to use the task state as reported by Mesos), so requiring them for Traefik would raise the entry barrier for Marathon users. -Traefik used to use the health check results as a strict requirement but moved away from it as [users reported the dramatic consequences](https://github.com/containous/traefik/issues/653). +Traefik used to use the health check results as a strict requirement but moved away from it as [users reported the dramatic consequences](https://github.com/traefik/traefik/issues/653). #### Draining @@ -117,4 +117,4 @@ However, implementing this fully within Traefik seems like a non-trivial underta Additionally, the approach is less flexible compared to a custom termination handler since only the latter allows for the implementation of custom termination sequences that go beyond simple request draining (e.g., persisting a snapshot state to disk prior to terminating). -The feature is currently not implemented; a request for draining in general is at [issue 41](https://github.com/containous/traefik/issues/41). +The feature is currently not implemented; a request for draining in general is at [issue 41](https://github.com/traefik/traefik/issues/41). diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index cce63de4c..142133508 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -1,11 +1,11 @@ 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' -repo_url: 'https://github.com/containous/traefik' +repo_url: 'https://github.com/traefik/traefik' docs_dir: 'content' @@ -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: @@ -26,7 +26,7 @@ theme: prev: 'Previous' next: 'Next' -copyright: "Copyright © 2016-2020 Containous" +copyright: "Copyright © 2016-2020 Containous; 2020 Traefik Labs" extra_css: - assets/styles/root.css diff --git a/docs/scripts/verify.sh b/docs/scripts/verify.sh index b4ba696fe..29a3c26ad 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\/$/,/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\/traefik/,/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 176befcce..804895802 100644 --- a/docs/theme/main.html +++ b/docs/theme/main.html @@ -11,7 +11,7 @@ {% endblock %} {% block header %} - {% include "partials/containous-header.html" %} + {% include "partials/company-header.html" %} {% include "partials/header.html" %} {% endblock %} @@ -77,7 +77,7 @@ diff --git a/docs/theme/partials/company-header.html b/docs/theme/partials/company-header.html new file mode 100644 index 000000000..cb5559294 --- /dev/null +++ b/docs/theme/partials/company-header.html @@ -0,0 +1,251 @@ + diff --git a/docs/theme/partials/containous-header.html b/docs/theme/partials/containous-header.html deleted file mode 100644 index ade0a1ace..000000000 --- a/docs/theme/partials/containous-header.html +++ /dev/null @@ -1,238 +0,0 @@ - diff --git a/docs/theme/partials/product-switcher.html b/docs/theme/partials/product-switcher.html index b57a9a14a..453154cf1 100644 --- a/docs/theme/partials/product-switcher.html +++ b/docs/theme/partials/product-switcher.html @@ -2,7 +2,7 @@