JupyterHub is the best way to serve Jupyter notebook for multiple users. It can be used in a class of students, a corporate data science group or scientific research group. It is a multi-user Hub that spawns, manages, and proxies multiple instances of the single-user Jupyter notebook server.
To make life easier, JupyterHub has distributions. Be sure to take a look at them before continuing with the configuration of the broad original system of JupyterHub. Today, you can find two main cases:
If you need a simple case for a small amount of users (0-100) and single server take a look at The Littlest JupyterHub distribution.
If you need to allow for even more users, a dynamic amount of servers can be used on a cloud, take a look at the Zero to JupyterHub with Kubernetes .
Four subsystems make up JupyterHub:
a Hub (tornado process) that is the heart of JupyterHub
a configurable http proxy (node-http-proxy) that receives the requests from the client’s browser
multiple single-user Jupyter notebook servers (Python/IPython/tornado) that are monitored by Spawners
an authentication class that manages how users can access the system
Besides these central pieces, you can add optional configurations through a
config.py file and manage users kernels on an admin panel. A simplification of the whole system can be seen in the figure below:
JupyterHub performs the following functions:
The Hub launches a proxy
The proxy forwards all requests to the Hub by default
The Hub handles user login and spawns single-user servers on demand
The Hub configures the proxy to forward URL prefixes to the single-user notebook servers
For convenient administration of the Hub, its users, and services, JupyterHub also provides a REST API.
The JupyterHub team and Project Jupyter value our community, and JupyterHub follows the Jupyter Community Guides.
A JupyterHub distribution is tailored towards a particular set of use cases. These are generally easier to set up than setting up JupyterHub from scratch, assuming they fit your use case.
The two popular ones are:
- Technical Reference
- Technical Overview
- JupyterHub URL scheme
- Security Overview
- Writing a custom Proxy implementation
- Running proxy separately from the hub
- Using JupyterHub’s REST API
- Starting servers with the JupyterHub API
- The Hub’s Database
- Working with templates and UI
- Eventlogging and Telemetry
- Configuring user environments
- Configuration examples
- Configure GitHub OAuth
- Using a reverse proxy
- Run JupyterHub without root privileges using
- Configuration Reference
- JupyterHub and OAuth
We want you to contribute to JupyterHub in ways that are most exciting & useful to you. We value documentation, testing, bug reporting & code equally, and are glad to have your contributions in whatever form you wish :)