# JupyterHub Traefik Proxy
[![Documentation build status](https://img.shields.io/readthedocs/jupyterhub-traefik-proxy?logo=read-the-docs)](https://jupyterhub-traefik-proxy.readthedocs.org/en/latest/)
[![GitHub Workflow Status](https://github.com/jupyterhub/traefik-proxy/actions/workflows/test.yml/badge.svg)](https://github.com/jupyterhub/traefik-proxy/actions/workflows/test.yml)
[![Latest PyPI version](https://img.shields.io/pypi/v/jupyterhub-traefik-proxy?logo=pypi)](https://pypi.python.org/pypi/jupyterhub-traefik-proxy)
[![GitHub](https://img.shields.io/badge/issue_tracking-github-blue?logo=github)](https://github.com/jupyterhub/traefik-proxy/issues)
[![Discourse](https://img.shields.io/badge/help_forum-discourse-blue?logo=discourse)](https://discourse.jupyter.org/c/jupyterhub)
[![Gitter](https://img.shields.io/badge/social_chat-gitter-blue?logo=gitter)](https://gitter.im/jupyterhub/jupyterhub)
When JupyterHub starts a server for a user, it will _dynamically configure a
proxy server_ so that accessing `jupyterhub.example.com/user/<user>` routes to
the individual Jupyter server. This project contains what JupyterHub need to
dynamically configure the routes of a [traefik](https://traefik.io) proxy
server! There are three implementations of the [JupyterHub proxy
API](https://jupyterhub.readthedocs.io/en/stable/reference/proxy.html),
depending on how traefik store its routing configuration.
For **smaller**, single-node deployments:
- TraefikFileProviderProxy
For **distributed** setups:
- TraefikEtcdProxy
- TraefikConsulProxy
## Installation
The [documentation](https://jupyterhub-traefik-proxy.readthedocs.io) contains a
[complete installation
guide](https://jupyterhub-traefik-proxy.readthedocs.io/en/latest/install.html)
with examples for the three different implementations.
- [For TraefikFileProviderProxy](https://jupyterhub-traefik-proxy.readthedocs.io/en/latest/file.html#example-setup)
- [For TraefikEtcdProxy](https://jupyterhub-traefik-proxy.readthedocs.io/en/latest/etcd.html#example-setup)
- [For TraefikConsulProxy](https://jupyterhub-traefik-proxy.readthedocs.io/en/latest/consul.html#example-setup)
## Running tests
There are some tests that use _etcdctl_ command line client for etcd. Make sure
to set environment variable `ETCDCTL_API=3` before running the tests, so that
the v3 API to be used, e.g.:
```
$ export ETCDCTL_API=3
```
You can then run the all the test suite from the _traefik-proxy_ directory with:
```
$ pytest -v ./tests
```
Or you can run a specific test file with:
```
$ pytest -v ./tests/<test-file-name>
```
Raw data
{
"_id": null,
"home_page": "https://jupyterhub-traefik-proxy.readthedocs.io",
"name": "jupyterhub-traefik-proxy",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "",
"keywords": "jupyter jupyterhub traefik proxy",
"author": "Project Jupyter Contributors",
"author_email": "jupyter@googlegroups.com",
"download_url": "https://files.pythonhosted.org/packages/66/ae/4da951fac82b454cb3cd9e9dfdd64ca7253ecc348471865e7eca87aeddc0/jupyterhub-traefik-proxy-1.1.0.tar.gz",
"platform": null,
"description": "# JupyterHub Traefik Proxy\n\n[![Documentation build status](https://img.shields.io/readthedocs/jupyterhub-traefik-proxy?logo=read-the-docs)](https://jupyterhub-traefik-proxy.readthedocs.org/en/latest/)\n[![GitHub Workflow Status](https://github.com/jupyterhub/traefik-proxy/actions/workflows/test.yml/badge.svg)](https://github.com/jupyterhub/traefik-proxy/actions/workflows/test.yml)\n[![Latest PyPI version](https://img.shields.io/pypi/v/jupyterhub-traefik-proxy?logo=pypi)](https://pypi.python.org/pypi/jupyterhub-traefik-proxy)\n[![GitHub](https://img.shields.io/badge/issue_tracking-github-blue?logo=github)](https://github.com/jupyterhub/traefik-proxy/issues)\n[![Discourse](https://img.shields.io/badge/help_forum-discourse-blue?logo=discourse)](https://discourse.jupyter.org/c/jupyterhub)\n[![Gitter](https://img.shields.io/badge/social_chat-gitter-blue?logo=gitter)](https://gitter.im/jupyterhub/jupyterhub)\n\nWhen JupyterHub starts a server for a user, it will _dynamically configure a\nproxy server_ so that accessing `jupyterhub.example.com/user/<user>` routes to\nthe individual Jupyter server. This project contains what JupyterHub need to\ndynamically configure the routes of a [traefik](https://traefik.io) proxy\nserver! There are three implementations of the [JupyterHub proxy\nAPI](https://jupyterhub.readthedocs.io/en/stable/reference/proxy.html),\ndepending on how traefik store its routing configuration.\n\nFor **smaller**, single-node deployments:\n\n- TraefikFileProviderProxy\n\nFor **distributed** setups:\n\n- TraefikEtcdProxy\n- TraefikConsulProxy\n\n## Installation\n\nThe [documentation](https://jupyterhub-traefik-proxy.readthedocs.io) contains a\n[complete installation\nguide](https://jupyterhub-traefik-proxy.readthedocs.io/en/latest/install.html)\nwith examples for the three different implementations.\n\n- [For TraefikFileProviderProxy](https://jupyterhub-traefik-proxy.readthedocs.io/en/latest/file.html#example-setup)\n- [For TraefikEtcdProxy](https://jupyterhub-traefik-proxy.readthedocs.io/en/latest/etcd.html#example-setup)\n- [For TraefikConsulProxy](https://jupyterhub-traefik-proxy.readthedocs.io/en/latest/consul.html#example-setup)\n\n## Running tests\n\nThere are some tests that use _etcdctl_ command line client for etcd. Make sure\nto set environment variable `ETCDCTL_API=3` before running the tests, so that\nthe v3 API to be used, e.g.:\n\n```\n$ export ETCDCTL_API=3\n```\n\nYou can then run the all the test suite from the _traefik-proxy_ directory with:\n\n```\n$ pytest -v ./tests\n```\n\nOr you can run a specific test file with:\n\n```\n$ pytest -v ./tests/<test-file-name>\n```\n",
"bugtrack_url": null,
"license": "BSD",
"summary": "JupyterHub proxy implementation with traefik",
"version": "1.1.0",
"project_urls": {
"Documentation": "https://jupyterhub-traefik-proxy.readthedocs.io",
"Homepage": "https://jupyterhub-traefik-proxy.readthedocs.io",
"Source": "https://github.com/jupyterhub/traefik-proxy/",
"Tracker": "https://github.com/jupyter/traefik-proxy/issues"
},
"split_keywords": [
"jupyter",
"jupyterhub",
"traefik",
"proxy"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "8b466ad7fad30599403df6395e8a56cae6a4a823d2a3ab4d489ecb7d2d1f839d",
"md5": "43172ceeab2c2787ee3b70f2817b57ca",
"sha256": "6972d8eb788274d1d541c11cc10764d94a6829843bdb15873b60e19519bd4d5c"
},
"downloads": -1,
"filename": "jupyterhub_traefik_proxy-1.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "43172ceeab2c2787ee3b70f2817b57ca",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 26188,
"upload_time": "2023-06-06T07:04:22",
"upload_time_iso_8601": "2023-06-06T07:04:22.293447Z",
"url": "https://files.pythonhosted.org/packages/8b/46/6ad7fad30599403df6395e8a56cae6a4a823d2a3ab4d489ecb7d2d1f839d/jupyterhub_traefik_proxy-1.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "66ae4da951fac82b454cb3cd9e9dfdd64ca7253ecc348471865e7eca87aeddc0",
"md5": "3e4bbf5269749f178024d36bcd6926c3",
"sha256": "9e67eb354165b9400fb5a01c4272b4c2073dbd81fbbcd4e766ea7a62fac12cde"
},
"downloads": -1,
"filename": "jupyterhub-traefik-proxy-1.1.0.tar.gz",
"has_sig": false,
"md5_digest": "3e4bbf5269749f178024d36bcd6926c3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 39370,
"upload_time": "2023-06-06T07:04:24",
"upload_time_iso_8601": "2023-06-06T07:04:24.048645Z",
"url": "https://files.pythonhosted.org/packages/66/ae/4da951fac82b454cb3cd9e9dfdd64ca7253ecc348471865e7eca87aeddc0/jupyterhub-traefik-proxy-1.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-06-06 07:04:24",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "jupyterhub",
"github_project": "traefik-proxy",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "jupyterhub-traefik-proxy"
}