Python JavaScript HTML Other
Latest commit 057bf03 Jul 14, 2017 @yuvipanda yuvipanda committed on GitHub Merge pull request #1221 from minrk/proxy-race
add User.proxy_pending
Permalink
Failed to load latest commit information.
.github Soften tone Nov 11, 2016
docs Remove mkdocs as workaround fixed upstream Jun 28, 2017
examples set login url on hub_auth Jan 25, 2017
jupyterhub delay stop_pending until the end of stop Jul 14, 2017
onbuild move docker onbuild to directory Apr 21, 2016
scripts move singleuser script into the package May 31, 2016
share/jupyter/hub Add Authenticator.auto_login Apr 7, 2017
tools Remove zip from sdist build per PEP 527 Sep 1, 2016
.bowerrc move static files to share/jupyter/hub Dec 24, 2014
.coveragerc Omit alembic directory from report Jan 20, 2017
.dockerignore ignore node_modules Jan 25, 2016
.flake8 various cleanup to get most tests passing (yay!) May 4, 2017
.gitignore ignore generated rest-api html Aug 1, 2016
.travis.yml run tests -v Jun 28, 2017
CHECKLIST-Release.md Make the release checklist a GFM checklist Nov 11, 2016
CONTRIBUTING.md add CONTRIBUTING.md Mar 8, 2015
COPYING.md cleanup pass Aug 20, 2014
Dockerfile use pycurl by default, if available Jul 11, 2017
MANIFEST.in prune docs/node_modules Nov 13, 2016
README.md Added Kerberos authenticator for Jupyterhub in ReadMe Jun 5, 2017
bower.json install js dependencies with npm Mar 5, 2015
circle.yml push tags on circleci Apr 25, 2016
dev-requirements.txt test Feb 13, 2017
package.json require clean-css 3.4.13 May 26, 2016
readthedocs.yml install nodejs with conda on RTD Jul 23, 2016
requirements.txt WIP: Make JupyterHub an OAuth provider Mar 28, 2017
setup.py Used os.pathsep to join paths Jul 13, 2017
setupegg.py make it a proper package Aug 21, 2014

README.md

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

JupyterHub

PyPI Documentation Status Build Status Circle CI codecov.io Google Group

With JupyterHub you can create a multi-user Hub which spawns, manages, and proxies multiple instances of the single-user Jupyter notebook (IPython 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/IPython/tornado)

Basic principles for operation are:

  • Hub spawns 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

  • Python 3.3 or greater

  • nodejs/npm 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

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

npm install -g configurable-http-proxy
pip3 install jupyterhub    

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

pip3 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
kdcAuthenticator 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
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 -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.

For a development install, clone the repository and then install from source:

git clone https://github.com/jupyterhub/jupyterhub
cd jupyterhub
pip3 install -r dev-requirements.txt -e .

If the pip3 install command fails and complains about lessc being unavailable, you may need to explicitly install some additional JavaScript dependencies:

npm install

This will fetch client-side JavaScript dependencies necessary to compile CSS.

You may also need to manually update JavaScript and CSS after some development updates, with:

python3 setup.py js    # fetch updated client-side js
python3 setup.py css   # recompile CSS from LESS sources

We use pytest for running tests:

pytest jupyterhub/tests

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.


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