Giter Club home page Giter Club logo

jupyterhub's Introduction

Technical overview | Prerequisites | Installation | Running the Hub Server | Configuration | Docker | Contributing | License | Getting help

Build Status Circle CI codecov.io " Documentation Status " 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.

JupyterHub provides single-user notebook servers to many users. For example, JupyterHub could serve notebooks to a class of students, a corporate workgroup, or a science research group.

by Project Jupyter


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)

JupyterHub's 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 servers

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


Prerequisites

Before installing JupyterHub, you need:

  • Python 3.3 or greater

    An understanding of using pip for installing Python packages is recommended.

  • nodejs/npm

    Install nodejs/npm, which is available from your package manager. For example, install 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

Before running the single-user notebook servers (which may be on the same system as the Hub or not):

Installation

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:

pip3 install --upgrade notebook

Running 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 credentials.

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 document contains the basics of configuring a JupyterHub deployment.

The JupyterHub tutorial provides a video and documentation that explains and illustrates the fundamental steps for installation and configuration. Repo | Tutorial documentation

Generate a default configuration file

Generate a default config file:

jupyterhub --generate-config

Customize the configuration, authentication, and process spawning

Spawn the server on 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

The authentication and process spawning mechanisms can be replaced, which should allow plugging into a variety of authentication or process control environments. Some examples, meant as illustration and testing of this concept:


Docker

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

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.

Starting JupyterHub with docker

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 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 testing. To run 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.

Getting help

We encourage you to ask questions on the mailing list, and you may participate in development discussions or get live help on Gitter.

Resources

jupyterhub's People

Contributors

minrk avatar willingc avatar yuvipanda avatar ssanderson avatar rgbkrk avatar carreau avatar ellisonbg avatar vilhelmen avatar jhamrick avatar iamed18 avatar parente avatar shreddd avatar robnagler avatar daradib avatar takluyver avatar ozancaglayan avatar dominicfollettsmith avatar obiwahn avatar betatim avatar jdavidheiser avatar dsblank avatar dblockow-d2dcrc avatar dmartzol avatar ckald avatar spoorthyv avatar evanlinde avatar danielballan avatar zoltan-fedor avatar tsaeger avatar ryanlovett avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.