jupyterhub

Multi-user server for Jupyter notebooks

Github stars Tracking Chart

Technical Overview, Installation, Configuration, Docker, Contributing, License, Help and Resources

JupyterHub

Latest PyPI version
Latest conda-forge version
Documentation build status
TravisCI build status
DockerHub build status
CircleCI build status
Test coverage of code
GitHub
Discourse
Gitter

With JupyterHub you can create a
multi-user Hub which spawns, manages, and proxies multiple instances of the
single-user Jupyter notebook
server.

Project Jupyter created JupyterHub to support many
users. The Hub can offer notebook servers to a class of students, a corporate
data science workgroup, a scientific research project, or a high performance
computing group.

Technical overview

Three main actors make up JupyterHub:

  • multi-user Hub (tornado process)
  • configurable http proxy (node-http-proxy)
  • multiple single-user Jupyter notebook servers (Python/Jupyter/tornado)

Basic principles for operation are:

  • Hub launches a proxy.
  • Proxy forwards all requests to Hub by default.
  • Hub handles login, and spawns single-user servers on demand.
  • Hub configures proxy to forward url prefixes to the single-user notebook
    servers.

JupyterHub also provides a
REST API
for administration of the Hub and its users.

Installation

Check prerequisites

  • A Linux/Unix based system

  • Python 3.5 or greater

  • nodejs/npm

    • If you are using conda, the nodejs and npm dependencies will be installed for
      you by conda.

    • If you are using pip, install a recent version of
      nodejs/npm.
      For example, install it on Linux (Debian/Ubuntu) using:

      sudo apt-get install npm nodejs-legacy
      

      The nodejs-legacy package installs the node executable and is currently
      required for npm to work on Debian/Ubuntu.

  • TLS certificate and key for HTTPS communication

  • Domain name

Install packages

Using conda

To install JupyterHub along with its dependencies including nodejs/npm:

conda install -c conda-forge jupyterhub

If you plan to run notebook servers locally, install the Jupyter notebook
or JupyterLab:

conda install notebook
conda install jupyterlab

Using pip

JupyterHub can be installed with pip, and the proxy with npm:

npm install -g configurable-http-proxy
python3 -m pip install jupyterhub    

If you plan to run notebook servers locally, you will need to install the
Jupyter notebook
package:

python3 -m pip install --upgrade notebook

Run the Hub server

To start the Hub server, run the command:

jupyterhub

Visit https://localhost:8000 in your browser, and sign in with your unix
PAM credentials.

Note: To allow multiple users to sign into the server, you will need to
run the jupyterhub command as a privileged user, such as root.
The wiki
describes how to run the server as a less privileged user, which requires
more configuration of the system.

Configuration

The Getting Started section of the
documentation explains the common steps in setting up JupyterHub.

The JupyterHub tutorial
provides an in-depth video and sample configurations of JupyterHub.

Create a configuration file

To generate a default config file with settings and descriptions:

jupyterhub --generate-config

Start the Hub

To start the Hub on a specific url and port 10.0.1.2:443 with https:

jupyterhub --ip 10.0.1.2 --port 443 --ssl-key my_ssl.key --ssl-cert my_ssl.cert

Authenticators, Authenticator, Description, ----------------------------------------------------------------------------, -------------------------------------------------, PAMAuthenticator, Default, built-in authenticator, OAuthenticator, OAuth + JupyterHub Authenticator = OAuthenticator, ldapauthenticator, Simple LDAP Authenticator Plugin for JupyterHub, kerberosauthenticator, Kerberos Authenticator Plugin for JupyterHub, ### Spawners, Spawner, Description, --------------------------------------------------------------, --------------------------------------------------------------------------, LocalProcessSpawner, Default, built-in spawner starts single-user servers as local processes, dockerspawner, Spawn single-user servers in Docker containers, kubespawner, Kubernetes spawner for JupyterHub, sudospawner, Spawn single-user servers without being root, systemdspawner, Spawn single-user notebook servers using systemd, batchspawner, Designed for clusters using batch scheduling software, yarnspawner, Spawn single-user notebook servers distributed on a Hadoop cluster, wrapspawner, WrapSpawner and ProfilesSpawner enabling runtime configuration of spawners, ## Docker

A starter docker image for JupyterHub
gives a baseline deployment of JupyterHub using Docker.

Important: This jupyterhub/jupyterhub image contains only the Hub itself,
with no configuration. In general, one needs to make a derivative image, with
at least a jupyterhub_config.py setting up an Authenticator and/or a Spawner.
To run the single-user servers, which may be on the same system as the Hub or
not, Jupyter Notebook version 4 or greater must be installed.

The JupyterHub docker image can be started with the following command:

docker run -p 8000:8000 -d --name jupyterhub jupyterhub/jupyterhub jupyterhub

This command will create a container named jupyterhub that you can
stop and resume with docker stop/start.

The Hub service will be listening on all interfaces at port 8000, which makes
this a good choice for testing JupyterHub on your desktop or laptop.

If you want to run docker on a computer that has a public IP then you should
(as in MUST) secure it with ssl by adding ssl options to your docker
configuration or by using a ssl enabled proxy.

Mounting volumes will
allow you to store data outside the docker image (host system) so it will be persistent, even when you start
a new image.

The command docker exec -it jupyterhub bash will spawn a root shell in your docker
container. You can use the root shell to create system users in the container.
These accounts will be used for authentication in JupyterHub's default configuration.

Contributing

If you would like to contribute to the project, please read our
contributor documentation
and the CONTRIBUTING.md. The CONTRIBUTING.md file
explains how to set up a development installation, how to run the test suite,
and how to contribute to documentation.

For a high-level view of the vision and next directions of the project, see the
JupyterHub community roadmap.

A note about platform support

JupyterHub is supported on Linux/Unix based systems.

JupyterHub officially does not support Windows. You may be able to use
JupyterHub on Windows if you use a Spawner and Authenticator that work on
Windows, but the JupyterHub defaults will not. Bugs reported on Windows will not
be accepted, and the test suite will not run on Windows. Small patches that fix
minor Windows compatibility issues (such as basic installation) may be accepted,
however. For Windows-based systems, we would recommend running JupyterHub in a
docker container or Linux VM.

Additional Reference: Tornado's documentation on Windows platform support

License

We use a shared copyright model that enables all contributors to maintain the
copyright on their contributions.

All code is licensed under the terms of the revised BSD license.

Help and resources

We encourage you to ask questions on the Jupyter mailing list.
To participate in development discussions or get help, talk with us on
our JupyterHub Gitter channel.

JupyterHub follows the Jupyter Community Guides.


Technical Overview, Installation, Configuration, Docker, Contributing, License, Help and Resources

Main metrics

Overview
Name With Ownerjupyterhub/jupyterhub
Primary LanguagePython
Program languagePython (Language Count: 7)
Platform
License:BSD 3-Clause "New" or "Revised" License
所有者活动
Created At2014-06-12 23:22:10
Pushed At2025-04-23 08:37:27
Last Commit At
Release Count88
Last Release Name5.3.0 (Posted on 2025-04-15 14:54:35)
First Release Name0.1.0 (Posted on 2015-03-07 16:47:31)
用户参与
Stargazers Count8k
Watchers Count268
Fork Count2.1k
Commits Count8k
Has Issues Enabled
Issues Count2460
Issue Open Count170
Pull Requests Count2251
Pull Requests Open Count9
Pull Requests Close Count250
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private