From 712b895d8ef326e75a68847497151f5238b5b249 Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Mon, 15 Aug 2016 19:17:15 -0700 Subject: [PATCH 01/16] WIP refresh --- docs/source/getting-started.md | 14 ++------- docs/source/index.rst | 15 ++++++---- docs/source/troubleshooting.md | 53 +++++++++++++++------------------- 3 files changed, 36 insertions(+), 46 deletions(-) diff --git a/docs/source/getting-started.md b/docs/source/getting-started.md index 4725be0d..abe668ab 100644 --- a/docs/source/getting-started.md +++ b/docs/source/getting-started.md @@ -6,7 +6,7 @@ JupyterHub is highly customizable, so there's a lot to cover. ## Installation -See [the readme](https://github.com/jupyter/jupyterhub/blob/master/README.md) for help installing JupyterHub. +See [the readme](https://github.com/jupyterhub/jupyterhub/blob/master/README.md) for help installing JupyterHub. ## Overview @@ -396,14 +396,6 @@ It is recommended to put all of the files used by JupyterHub into standard UNIX * `/var/log` for log files -# Further reading - -- [Configuration Examples](./config-examples.html) -- [Custom Authenticators](./authenticators.html) -- [Custom Spawners](./spawners.html) -- [Troubleshooting](./troubleshooting.html) - - -[oauth-setup]: https://github.com/jupyter/oauthenticator#setup -[oauthenticator]: https://github.com/jupyter/oauthenticator +[oauth-setup]: https://github.com/jupyterhub/oauthenticator#setup +[oauthenticator]: https://github.com/jupyterhub/oauthenticator [PAM]: https://en.wikipedia.org/wiki/Pluggable_authentication_module diff --git a/docs/source/index.rst b/docs/source/index.rst index f03a8555..52813491 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,8 +1,15 @@ JupyterHub ========== -JupyterHub is a server that gives multiple users access to Jupyter notebooks, -running an independent Jupyter notebook server for each user. +JupyterHub is a project that uses a hub server to give multiple users access +to Jupyter notebooks, by spawning and running an independent Jupyter notebook +server for each user. + +JupyterHub runs as three separate parts: + +* The multi-user Hub (Python & Tornado) +* A `configurable http proxy `_ (NodeJS) +* Multiple single-user Jupyter notebook servers (Python & Tornado) To use JupyterHub, you need a Unix server (typically Linux) running somewhere that is accessible to your team on the network. The JupyterHub server @@ -24,11 +31,7 @@ start a notebook server on the same machine running under their system username. The other main option is to start each server in a separate container, often using Docker. -JupyterHub runs as three separate parts: -* The multi-user Hub (Python & Tornado) -* A `configurable http proxy `_ (NodeJS) -* Multiple single-user Jupyter notebook servers (Python & Tornado) Basic principles: diff --git a/docs/source/troubleshooting.md b/docs/source/troubleshooting.md index 26e07b26..91a1df74 100644 --- a/docs/source/troubleshooting.md +++ b/docs/source/troubleshooting.md @@ -1,23 +1,14 @@ # Troubleshooting -This document is under active development. - When troubleshooting, you may see unexpected behaviors or receive an error -message. These two lists provide links to identifying the cause of the +message. This section provide links for identifying the cause of the problem and how to resolve it. + ## Behavior problems - [JupyterHub proxy fails to start](#jupyterhub-proxy-fails-to-start) -## Errors -- [500 error after spawning a single-user server](#500-error-after-spawning-my-single-user-server) - -## How do I...? -- [Use a chained certificate for SSL](#chained-certificates-for-ssl) - ----- - -## JupyterHub proxy fails to start +### JupyterHub proxy fails to start If you have tried to start the JupyterHub proxy and it fails to start: @@ -25,13 +16,15 @@ If you have tried to start the JupyterHub proxy and it fails to start: ``c.JupyterHub.ip = '*'``; if it is, try ``c.JupyterHub.ip = ''`` - Try starting with ``jupyterhub --ip=0.0.0.0`` ----- -## 500 error after spawning my single-user server +## Errors +- [500 error after spawning a single-user server](#500-error-after-spawning-my-single-user-server) +### 500 error after spawning my single-user server -You receive a 500 error when accessing the URL `/user/you/...`. This is often -seen when your single-user server cannot check your cookies with the Hub. +You receive a 500 error when accessing the URL `/user//...`. +This is often seen when your single-user server cannot verify your user cookie +with the Hub. There are two likely reasons for this: @@ -39,23 +32,23 @@ There are two likely reasons for this: configuration problems) 2. The single-user server cannot *authenticate* its requests (invalid token) -### Symptoms: +#### Symptoms: The main symptom is a failure to load *any* page served by the single-user -server, met with a 500 error. This is typically the first page at `/user/you` -after logging in or clicking "Start my server". When a single-user server -receives a request, it makes an API request to the Hub to check if the cookie -corresponds to the right user. This request is logged. +server, met with a 500 error. This is typically the first page at `/user/` +after logging in or clicking "Start my server". When a single-user notebook server +receives a request, the notebook server makes an API request to the Hub to +check if the cookie corresponds to the right user. This request is logged. -If everything is working, it will look like this: +If everything is working, the response logged will be similar to this: ``` 200 GET /hub/api/authorizations/cookie/jupyter-hub-token-name/[secret] (@10.0.1.4) 6.10ms ``` You should see a similar 200 message, as above, in the Hub log when you first -visit your single-user server. If you don't see this message in the log, it -may mean that your single-user server isn't connecting to your Hub. +visit your single-user notebook server. If you don't see this message in the log, it +may mean that your single-user notebook server isn't connecting to your Hub. If you see 403 (forbidden) like this, it's a token problem: @@ -63,12 +56,12 @@ If you see 403 (forbidden) like this, it's a token problem: 403 GET /hub/api/authorizations/cookie/jupyter-hub-token-name/[secret] (@10.0.1.4) 4.14ms ``` -Check the logs of the single-user server, which may have more detailed +Check the logs of the single-user notebook server, which may have more detailed information on the cause. -### Causes and resolutions: +#### Causes and resolutions: -#### No authorization request +##### No authorization request If you make an API request and it is not received by the server, you likely have a network configuration issue. Often, this happens when the Hub is only @@ -81,7 +74,7 @@ that all single-user servers can connect to, e.g.: c.JupyterHub.hub_ip = '10.0.0.1' ``` -#### 403 GET /hub/api/authorizations/cookie +##### 403 GET /hub/api/authorizations/cookie If you receive a 403 error, the API token for the single-user server is likely invalid. Commonly, the 403 error is caused by resetting the JupyterHub @@ -101,7 +94,9 @@ After this, when you start your server via JupyterHub, it will build a new container. If this was the underlying cause of the issue, you should see your server again. ----- + +## How do I...? +- [Use a chained certificate for SSL](#chained-certificates-for-ssl) ### Chained certificates for SSL From eba4b3e8c7a3398c5a4040ae6bcee22acef9c95f Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Wed, 17 Aug 2016 15:11:17 -0700 Subject: [PATCH 02/16] More doc edits --- docs/environment.yml | 6 +-- docs/source/api/index.rst | 2 +- docs/source/api/rest.md | 51 ++++++++++++++------ docs/source/changelog.md | 4 +- docs/source/getting-started.md | 43 +++++++++++++---- docs/source/index.rst | 86 ++++++++++++---------------------- docs/source/troubleshooting.md | 7 +-- 7 files changed, 108 insertions(+), 91 deletions(-) diff --git a/docs/environment.yml b/docs/environment.yml index e7720b5b..82aaee5d 100644 --- a/docs/environment.yml +++ b/docs/environment.yml @@ -10,7 +10,7 @@ dependencies: - sqlalchemy>=1 - tornado>=4.1 - traitlets>=4.1 +- sphinx +- sphinx_rtd_theme - pip: - - sphinx>=1.3.6 - - recommonmark==0.4.0 - + - recommonmark diff --git a/docs/source/api/index.rst b/docs/source/api/index.rst index 76009e23..5fd71462 100644 --- a/docs/source/api/index.rst +++ b/docs/source/api/index.rst @@ -15,4 +15,4 @@ JupyterHub also provides a REST API for administration of the Hub and users. spawner user services.auth - rest + diff --git a/docs/source/api/rest.md b/docs/source/api/rest.md index c4b18714..02f6444e 100644 --- a/docs/source/api/rest.md +++ b/docs/source/api/rest.md @@ -1,15 +1,25 @@ # The JupyterHub REST API -JupyterHub has a [REST API](https://en.wikipedia.org/wiki/Representational_state_transfer), which you can use to perform actions on the Hub, -such as checking what users are active, adding or removing users, -stopping or starting user servers, etc. +Using the JupyterHub [REST API](https://en.wikipedia.org/wiki/Representational_state_transfer), +you can perform actions on the Hub, such as: -To get access to the JupyterHub API, you must create a token. -You can create a token for a particular user with: +- checking which users are active +- adding or removing users +- stopping or starting single user notebook servers + +## API tokens + +### Create an API token +To send requests using JupyterHub API, you must pass an API token with the +request. You can create a token for an individual user using the following +command: jupyterhub token USERNAME -Alternately, you can load API tokens in your `jupyterhub_config.py`: + +### Adding API tokens to the hub's configuration +You may also add a dictionary of API tokens and usernames to the hub's +configurations file, `jupyterhub_config.py`: ```python c.JupyterHub.api_tokens = { @@ -17,22 +27,35 @@ c.JupyterHub.api_tokens = { } ``` -To authenticate your requests, pass this token in the Authorization header. -For example, to list users with requests in Python: + +## Making an API request + +To authenticate your requests, pass the API token in the request's +Authorization header. + +**Example: List the hub's users** + +Using the popular Python requests library, the following code sends an API +request and an API token for authorization: ```python import requests + api_url = 'http://127.0.0.1:8081/hub/api' -r = requests.get(api_url + '/users', + +r = requests.get(api_url + '/users', headers={ - 'Authorization': 'token %s' % token, - } -) + 'Authorization': 'token %s' % token, + } + ) + r.raise_for_status() users = r.json() ``` + -You can see the full [REST API Spec](../_static/rest-api/index.html) for details. -A fancier version of the same information can be viewed [on swagger's petstore][]. +You can see the full [REST API Spec](../_static/rest-api/index.html) for details. +The same REST API Spec can be viewed in a more visually appealing style [on swagger's petstore][]. +Both resources contain the same information and differ only in its display. [on swagger's petstore]: http://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyterhub/jupyterhub/master/docs/rest-api.yml#!/default diff --git a/docs/source/changelog.md b/docs/source/changelog.md index df697f16..4a49cc66 100644 --- a/docs/source/changelog.md +++ b/docs/source/changelog.md @@ -1,6 +1,6 @@ -# Summary of changes in JupyterHub +# Change log summary -See `git log` for a more detailed summary. +See `git log` for additional detail. ## 0.6 diff --git a/docs/source/getting-started.md b/docs/source/getting-started.md index abe668ab..32b0a683 100644 --- a/docs/source/getting-started.md +++ b/docs/source/getting-started.md @@ -1,14 +1,5 @@ # Getting started with JupyterHub -This document describes some of the basics of configuring JupyterHub to do what you want. -JupyterHub is highly customizable, so there's a lot to cover. - - -## Installation - -See [the readme](https://github.com/jupyterhub/jupyterhub/blob/master/README.md) for help installing JupyterHub. - - ## Overview JupyterHub is a set of processes that together provide a multiuser Jupyter Notebook server. @@ -20,6 +11,37 @@ There are three main categories of processes run by the `jupyterhub` command lin to the Hub and Single User Servers. - **Hub**: manages user accounts and authentication and coordinates Single Users Servers using a Spawner. +To use JupyterHub, you need a Unix server (typically Linux) running +somewhere that is accessible to your team on the network. The JupyterHub server +can be on an internal network at your organisation, or it can run on the public +internet (in which case, take care with `security `__). +Users access JupyterHub in a web browser, by going to the IP address or +domain name of the server. + +Basic principles: + +* Hub spawns 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 single-user servers + +Different :doc:`authenticators ` control access +to JupyterHub. The default one (pam) uses the user accounts on the server where +JupyterHub is running. If you use this, you will need to create a user account +on the system for each user on your team. Using other authenticators, you can +allow users to sign in with e.g. a Github account, or with any single-sign-on +system your organisation has. + +Next, :doc:`spawners ` control how JupyterHub starts +the individual notebook server for each user. The default spawner will +start a notebook server on the same machine running under their system username. +The other main option is to start each server in a separate container, often +using Docker. + + + + + ## JupyterHub's default behavior **IMPORTANT:** In its default configuration, JupyterHub requires SSL encryption (HTTPS) to run. @@ -61,6 +83,9 @@ By default, starting JupyterHub will write two files to disk in the current work The location of these files can be specified via configuration, discussed below. +## Installation + +See [the readme](https://github.com/jupyterhub/jupyterhub/blob/master/README.md) for help installing JupyterHub. ## How to configure JupyterHub diff --git a/docs/source/index.rst b/docs/source/index.rst index 52813491..db33a7c8 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,51 +1,31 @@ JupyterHub ========== -JupyterHub is a project that uses a hub server to give multiple users access -to Jupyter notebooks, by spawning and running an independent Jupyter notebook -server for each user. +With JupyterHub you can create a **multi-user Hub** which spawns, manages, +and proxies multiple instances of the single-user +`Jupyter notebook `_ server. For +example, JupyterHub can be used to serve notebooks to a class of students, a +corporate data science group, or a science research group. -JupyterHub runs as three separate parts: +Three main actors make up JupyterHub: -* The multi-user Hub (Python & Tornado) -* A `configurable http proxy `_ (NodeJS) -* Multiple single-user Jupyter notebook servers (Python & Tornado) +- multi-user **Hub** (tornado process) +- configurable http **proxy** (node-http-proxy) +- multiple **single-user Jupyter notebook servers** (Python/IPython/tornado) -To use JupyterHub, you need a Unix server (typically Linux) running -somewhere that is accessible to your team on the network. The JupyterHub server -can be on an internal network at your organisation, or it can run on the public -internet (in which case, take care with `security `__). -Users access JupyterHub in a web browser, by going to the IP address or -domain name of the server. +JupyterHub's basic principles for operation are: -Different :doc:`authenticators ` control access -to JupyterHub. The default one (pam) uses the user accounts on the server where -JupyterHub is running. If you use this, you will need to create a user account -on the system for each user on your team. Using other authenticators, you can -allow users to sign in with e.g. a Github account, or with any single-sign-on -system your organisation has. - -Next, :doc:`spawners ` control how JupyterHub starts -the individual notebook server for each user. The default spawner will -start a notebook server on the same machine running under their system username. -The other main option is to start each server in a separate container, often -using Docker. - - - -Basic principles: - -* Hub spawns 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 single-user servers +- 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](http://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter/jupyterhub/master/docs/rest-api.yml#/default) +`REST API `_ for administration of the Hub and users. - -Contents: +Contents +-------- .. toctree:: :maxdepth: 2 @@ -65,38 +45,30 @@ Contents: troubleshooting .. toctree:: - :maxdepth: 1 + :maxdepth: 2 :caption: Developer Documentation - + + api/rest api/index - -.. toctree:: - :maxdepth: 1 - :caption: Community documentation - - - .. toctree:: :maxdepth: 2 :caption: About JupyterHub changelog -.. toctree:: - :maxdepth: 1 - :caption: Questions? Suggestions? - - Jupyter mailing list - Jupyter website - Stack Overflow - Jupyter - Stack Overflow - Jupyter-notebook - - Indices and tables -================== +------------------ * :ref:`genindex` * :ref:`modindex` * :ref:`search` +Questions? Suggestions? +----------------------- + +- `Jupyter mailing list `_ +- `Jupyter website `_ +- `Stack Overflow - Jupyter `_ +- `Stack Overflow - Jupyter-notebook `_ + diff --git a/docs/source/troubleshooting.md b/docs/source/troubleshooting.md index 91a1df74..6f4e47e1 100644 --- a/docs/source/troubleshooting.md +++ b/docs/source/troubleshooting.md @@ -6,7 +6,6 @@ problem and how to resolve it. ## Behavior problems -- [JupyterHub proxy fails to start](#jupyterhub-proxy-fails-to-start) ### JupyterHub proxy fails to start @@ -18,7 +17,6 @@ If you have tried to start the JupyterHub proxy and it fails to start: ## Errors -- [500 error after spawning a single-user server](#500-error-after-spawning-my-single-user-server) ### 500 error after spawning my single-user server @@ -32,7 +30,7 @@ There are two likely reasons for this: configuration problems) 2. The single-user server cannot *authenticate* its requests (invalid token) -#### Symptoms: +#### Symptoms The main symptom is a failure to load *any* page served by the single-user server, met with a 500 error. This is typically the first page at `/user/` @@ -59,7 +57,7 @@ If you see 403 (forbidden) like this, it's a token problem: Check the logs of the single-user notebook server, which may have more detailed information on the cause. -#### Causes and resolutions: +#### Causes and resolutions ##### No authorization request @@ -96,7 +94,6 @@ your server again. ## How do I...? -- [Use a chained certificate for SSL](#chained-certificates-for-ssl) ### Chained certificates for SSL From 75cb487ab3e6375418a16a7a3f7e5161df588b4f Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Wed, 17 Aug 2016 15:11:57 -0700 Subject: [PATCH 03/16] Update conf --- docs/source/conf.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index cd0fad2b..0eb45dd9 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -131,7 +131,10 @@ html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -#html_theme_options = {} +html_theme_options = { + 'collapse_navigation': False, + 'display_version': False, +} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] From 7b80b95a4910124f190d8da19f98e61dcb6a1a9e Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Thu, 18 Aug 2016 04:47:21 -0700 Subject: [PATCH 04/16] Add checks for spelling --- docs/Makefile | 6 + docs/environment.yml | 8 +- docs/source/conf.py | 11 ++ docs/source/spelling_wordlist.txt | 213 ++++++++++++++++++++++++++++++ 4 files changed, 235 insertions(+), 3 deletions(-) create mode 100644 docs/source/spelling_wordlist.txt diff --git a/docs/Makefile b/docs/Makefile index 9ca1fcaa..421d4f7d 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -47,6 +47,7 @@ help: @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" @echo " coverage to run coverage check of the documentation (if enabled)" + @echo " spelling to run spell check on documentation" clean: rm -rf $(BUILDDIR)/* @@ -179,6 +180,11 @@ linkcheck: @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." +spelling: + $(SPHINXBUILD) -b spelling $(ALLSPHINXOPTS) $(BUILDDIR)/spelling + @echo + @echo "Spell check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/spelling/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ diff --git a/docs/environment.yml b/docs/environment.yml index 82aaee5d..35077c30 100644 --- a/docs/environment.yml +++ b/docs/environment.yml @@ -10,7 +10,9 @@ dependencies: - sqlalchemy>=1 - tornado>=4.1 - traitlets>=4.1 -- sphinx -- sphinx_rtd_theme - pip: - - recommonmark + - sphinx>=1.3.6 + - recommonmark==0.4.0 + - sphinx_rtd_theme + - pyenchant + - sphinxcontrib-spelling diff --git a/docs/source/conf.py b/docs/source/conf.py index 0eb45dd9..3782ea67 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -38,6 +38,14 @@ extensions = [ 'sphinx.ext.napoleon', ] +# Spelling +try: + import sphinxcontrib.spelling +except ImportError: + pass +else: + extensions.append("sphinxcontrib.spelling") + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -391,3 +399,6 @@ else: from subprocess import check_call as sh sh(['make', 'rest-api'], cwd=docs) # otherwise, readthedocs.org uses their theme by default, so no need to specify it + +# Spell checking using sphinxcontrib-spelling +spelling_word_list_filename='spelling_wordlist.txt' diff --git a/docs/source/spelling_wordlist.txt b/docs/source/spelling_wordlist.txt new file mode 100644 index 00000000..5f4310d5 --- /dev/null +++ b/docs/source/spelling_wordlist.txt @@ -0,0 +1,213 @@ +admin +Afterwards +alchemyst +alope +api +API +apps +args +asctime +auth +authenticator +Authenticator +authenticators +Authenticators +Autograde +autograde +autogradeapp +autograded +Autograded +autograder +Autograder +autograding +backends +Bitdiddle +bugfix +Bugfixes +bugtracker +Carreau +Changelog +changelog +checksum +checksums +cmd +cogsci +conda +config +coroutine +coroutines +crt +customizable +datefmt +decrypted +dev +DockerSpawner +dockerspawner +dropdown +duedate +Duedate +ellachao +ellisonbg +entrypoint +env +Filenames +filesystem +formatters +formdata +formgrade +formgrader +gif +GitHub +Gradebook +gradebook +Granger +hardcoded +hOlle +Homebrew +html +http +https +hubapi +Indices +IFramed +inline +iopub +ip +ipynb +IPython +ischurov +ivanslapnicar +jdfreder +jhamrick +jklymak +jonathanmorgan +joschu +JUPYTER +Jupyter +jupyter +jupyterhub +Kerberos +kerberos +letsencrypt +lgpage +linkcheck +linux +localhost +logfile +login +logins +logout +lookup +lphk +mandli +Marr +mathjax +matplotlib +metadata +mikebolt +minrk +Mitigations +mixin +Mixin +multi +multiuser +namespace +nbconvert +nbgrader +neuroscience +nginx +np +npm +oauth +OAuth +oauthenticator +ok +olgabot +osx +PAM +phantomjs +Phantomjs +plugin +plugins +Popen +positionally +postgres +pregenerated +prepend +prepopulate +preprocessor +Preprocessor +prev +Programmatically +programmatically +ps +py +Qualys +quickstart +readonly +redSlug +reinstall +resize +rst +runtime +rw +sandboxed +sansary +singleuser +smeylan +spawner +Spawner +spawners +Spawners +spellcheck +SQL +sqlite +startup +statsd +stdin +stdout +stoppped +subclasses +subcommand +subdomain +subdomains +Subdomains +suchow +suprocesses +svurens +sys +SystemUserSpawner +systemwide +tasilb +teardown +threadsafe +timestamp +timestamps +TLD +todo +toolbar +traitlets +travis +tuples +undeletable +unicode +uninstall +UNIX +unix +untracked +untrusted +url +username +usernames +utcnow +utils +vinaykola +virtualenv +whitelist +whitespace +wildcard +Wildcards +willingc +wordlist +Workflow +workflow \ No newline at end of file From e5d3705a1a76574f016e8f78f444146671980cdf Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Thu, 18 Aug 2016 04:48:43 -0700 Subject: [PATCH 05/16] Edit headings for authenticators and spawners docs --- docs/source/authenticators.md | 6 +++--- docs/source/spawners.md | 16 +++++++++++----- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/docs/source/authenticators.md b/docs/source/authenticators.md index 74a247a7..1be46922 100644 --- a/docs/source/authenticators.md +++ b/docs/source/authenticators.md @@ -1,4 +1,4 @@ -# Writing a custom Authenticator +# Authenticators The [Authenticator][] is the mechanism for authorizing users. Basic authenticators use simple username and password authentication. @@ -18,7 +18,6 @@ See a list of custom Authenticators [on the wiki](https://github.com/jupyter/jup A basic Authenticator has one central method: - ### Authenticator.authenticate Authenticator.authenticate(handler, data) @@ -55,7 +54,6 @@ class DictionaryAuthenticator(Authenticator): return data['username'] ``` - ### Authenticator.whitelist Authenticators can specify a whitelist of usernames to allow authentication. @@ -103,6 +101,8 @@ You can see an example implementation of an Authenticator that uses [GitHub OAut at [OAuthenticator][]. +## Writing a custom authenticator + [Authenticator]: https://github.com/jupyter/jupyterhub/blob/master/jupyterhub/auth.py [PAM]: https://en.wikipedia.org/wiki/Pluggable_authentication_module [OAuth]: https://en.wikipedia.org/wiki/OAuth diff --git a/docs/source/spawners.md b/docs/source/spawners.md index ce1b9667..77e62039 100644 --- a/docs/source/spawners.md +++ b/docs/source/spawners.md @@ -1,4 +1,4 @@ -# Writing a custom Spawner +# Spawners A [Spawner][] starts each single-user notebook server. The Spawner represents an abstract interface to a process, @@ -8,8 +8,11 @@ and a custom Spawner needs to be able to take three actions: - poll whether the process is still running - stop the process + ## Examples -Custom Spawners for JupyterHub can be found on the [JupyterHub wiki](https://github.com/jupyter/jupyterhub/wiki/Spawners). Some examples include: +Custom Spawners for JupyterHub can be found on the [JupyterHub wiki](https://github.com/jupyter/jupyterhub/wiki/Spawners). +Some examples include: + - [DockerSpawner](https://github.com/jupyter/dockerspawner) for spawning user servers in Docker containers * dockerspawner.DockerSpawner for spawning identical Docker containers for each users @@ -24,6 +27,7 @@ Custom Spawners for JupyterHub can be found on the [JupyterHub wiki](https://git - [SwarmSpawner](https://github.com/compmodels/jupyterhub/blob/master/swarmspawner.py) for spawning containers using Docker Swarm + ## Spawner control methods ### Spawner.start @@ -61,11 +65,11 @@ and an integer exit status, otherwise. For the local process case, `Spawner.poll` uses `os.kill(PID, 0)` to check if the local process is still running. - ### Spawner.stop `Spawner.stop` should stop the process. It must be a tornado coroutine, which should return when the process has finished exiting. + ## Spawner state JupyterHub should be able to stop and restart without tearing down @@ -97,6 +101,7 @@ def clear_state(self): self.pid = 0 ``` + ## Spawner options form (new in 0.4) @@ -115,7 +120,6 @@ If `Spawner.options_form` is undefined, the user's server is spawned directly, a See [this example](https://github.com/jupyter/jupyterhub/blob/master/examples/spawn-form/jupyterhub_config.py) for a form that allows custom CLI args for the local spawner. - ### `Spawner.options_from_form` Options from this form will always be a dictionary of lists of strings, e.g.: @@ -156,5 +160,7 @@ which would return: When `Spawner.start` is called, this dictionary is accessible as `self.user_options`. - [Spawner]: https://github.com/jupyter/jupyterhub/blob/master/jupyterhub/spawner.py + + +## Writing a custom spawner \ No newline at end of file From bba5460236f31c4c9f900e94cb2f3f4375bb0df4 Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Thu, 18 Aug 2016 04:49:30 -0700 Subject: [PATCH 06/16] Simplify formating of troubleshooting doc --- docs/source/troubleshooting.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/troubleshooting.md b/docs/source/troubleshooting.md index 6f4e47e1..f6a9db63 100644 --- a/docs/source/troubleshooting.md +++ b/docs/source/troubleshooting.md @@ -5,7 +5,7 @@ message. This section provide links for identifying the cause of the problem and how to resolve it. -## Behavior problems +## Behavior ### JupyterHub proxy fails to start @@ -84,7 +84,7 @@ the container every time. This means that the same API token is used by the server for its whole life, until the container is rebuilt. The fix for this Docker case is to remove any Docker containers seeing this -issue (typicaly all containers created before a certain point in time): +issue (typically all containers created before a certain point in time): docker rm -f jupyter-name @@ -95,7 +95,7 @@ your server again. ## How do I...? -### Chained certificates for SSL +### Use a chained SSL certificate Some certificate providers, i.e. Entrust, may provide you with a chained certificate that contains multiple files. If you are using a chained From 039b925cf69b6ee28341d377ce98e0ba14aee426 Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Thu, 18 Aug 2016 04:50:11 -0700 Subject: [PATCH 07/16] Edit config-examples --- docs/source/config-examples.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/config-examples.md b/docs/source/config-examples.md index 17f3ff3f..eed05948 100644 --- a/docs/source/config-examples.md +++ b/docs/source/config-examples.md @@ -91,7 +91,7 @@ In the following example, we show configuration files for a JupyterHub server ru Let's start out with `jupyterhub_config.py`: ```python -#Force the proxy to only listen to connections to 127.0.0.1 +#Force the proxy to only listen to connections to 127.0.0.1s c.JupyterHub.ip = '127.0.0.1' ``` From f6517d01dbeccf09adc9e138aaddd2528e351a1d Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Thu, 18 Aug 2016 04:51:48 -0700 Subject: [PATCH 08/16] Move 'Using API' to user guide --- docs/source/api/services.auth.rst | 6 +++--- docs/source/{api => }/rest.md | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) rename docs/source/{api => }/rest.md (90%) diff --git a/docs/source/api/services.auth.rst b/docs/source/api/services.auth.rst index 82ae8167..e2909726 100644 --- a/docs/source/api/services.auth.rst +++ b/docs/source/api/services.auth.rst @@ -1,6 +1,6 @@ -=========================================== -Authenticating your service with JupyterHub -=========================================== +======================= +Authenticating Services +======================= Module: :mod:`jupyterhub.services.auth` ======================================= diff --git a/docs/source/api/rest.md b/docs/source/rest.md similarity index 90% rename from docs/source/api/rest.md rename to docs/source/rest.md index 02f6444e..62d5bd87 100644 --- a/docs/source/api/rest.md +++ b/docs/source/rest.md @@ -1,4 +1,4 @@ -# The JupyterHub REST API +# Using JupyterHub's REST API Using the JupyterHub [REST API](https://en.wikipedia.org/wiki/Representational_state_transfer), you can perform actions on the Hub, such as: @@ -7,9 +7,7 @@ you can perform actions on the Hub, such as: - adding or removing users - stopping or starting single user notebook servers -## API tokens - -### Create an API token +## Creating an API token To send requests using JupyterHub API, you must pass an API token with the request. You can create a token for an individual user using the following command: @@ -17,9 +15,9 @@ command: jupyterhub token USERNAME -### Adding API tokens to the hub's configuration +## Adding tokens to the config file You may also add a dictionary of API tokens and usernames to the hub's -configurations file, `jupyterhub_config.py`: +configuration file, `jupyterhub_config.py`: ```python c.JupyterHub.api_tokens = { @@ -53,6 +51,8 @@ r.raise_for_status() users = r.json() ``` + +## Learning more about the API You can see the full [REST API Spec](../_static/rest-api/index.html) for details. The same REST API Spec can be viewed in a more visually appealing style [on swagger's petstore][]. From 44e16d538d38c314bcf3b85026957bc53dc77b18 Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Thu, 18 Aug 2016 04:52:22 -0700 Subject: [PATCH 09/16] Edit and corrections --- docs/source/getting-started.md | 59 ++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/docs/source/getting-started.md b/docs/source/getting-started.md index 32b0a683..9f7080c9 100644 --- a/docs/source/getting-started.md +++ b/docs/source/getting-started.md @@ -13,8 +13,8 @@ There are three main categories of processes run by the `jupyterhub` command lin To use JupyterHub, you need a Unix server (typically Linux) running somewhere that is accessible to your team on the network. The JupyterHub server -can be on an internal network at your organisation, or it can run on the public -internet (in which case, take care with `security `__). +can be on an internal network at your organization, or it can run on the public +internet (in which case, take care with [security](getting-started.html#security)). Users access JupyterHub in a web browser, by going to the IP address or domain name of the server. @@ -25,23 +25,20 @@ Basic principles: * Hub handles login, and spawns single-user servers on demand * Hub configures proxy to forward url prefixes to single-user servers -Different :doc:`authenticators ` control access -to JupyterHub. The default one (pam) uses the user accounts on the server where +Different [authenticators](authenticators.html) control access +to JupyterHub. The default one (PAM) uses the user accounts on the server where JupyterHub is running. If you use this, you will need to create a user account on the system for each user on your team. Using other authenticators, you can -allow users to sign in with e.g. a Github account, or with any single-sign-on -system your organisation has. +allow users to sign in with e.g. a GitHub account, or with any single-sign-on +system your organization has. -Next, :doc:`spawners ` control how JupyterHub starts +Next, [spawners](spawners.html) control how JupyterHub starts the individual notebook server for each user. The default spawner will start a notebook server on the same machine running under their system username. The other main option is to start each server in a separate container, often using Docker. - - - ## JupyterHub's default behavior **IMPORTANT:** In its default configuration, JupyterHub requires SSL encryption (HTTPS) to run. @@ -85,9 +82,27 @@ The location of these files can be specified via configuration, discussed below. ## Installation -See [the readme](https://github.com/jupyterhub/jupyterhub/blob/master/README.md) for help installing JupyterHub. +See the project's [README](https://github.com/jupyterhub/jupyterhub/blob/master/README.md) +for help installing JupyterHub. -## How to configure JupyterHub +### Planning your installation + +Prior to beginning installation, it's helpful to consider some of the following: +- deployment system (bare metal, Docker) +- Authentication (PAM, OAuth, etc.) +- Spawner of singleuser notebook servers (Docker, Batch, etc.) +- Services (nbgrader, etc.) + +## Folders and File Locations + +It is recommended to put all of the files used by JupyterHub into standard +UNIX filesystem locations. + +* `/srv/jupyterhub` for all security and runtime files +* `/etc/jupyterhub` for all configuration files +* `/var/log` for log files + +## Configuration methods JupyterHub is configured in two ways: @@ -154,7 +169,6 @@ However, more customized scenarios may need additional networking details to be configured. - ### Configuring the Proxy's REST API communication IP address and port (optional) The Hub service talks to the proxy via a REST API on a secondary port, whose network interface and port can be configured separately. @@ -288,10 +302,13 @@ subprocess of the Hub, this should happen automatically (this is the default con Another time you must set the Proxy authentication token yourself is if you want other services, such as [nbgrader](https://github.com/jupyter/nbgrader) to also be able to connect to the Proxy. -## Configuring authentication +## Authentication and users The default Authenticator uses [PAM][] to authenticate system users with their username and password. The default behavior of this Authenticator is to allow any user with an account and password on the system to login. + +### Creating a whitelist of users + You can restrict which users are allowed to login with `Authenticator.whitelist`: @@ -299,6 +316,8 @@ You can restrict which users are allowed to login with `Authenticator.whitelist` c.Authenticator.whitelist = {'mal', 'zoe', 'inara', 'kaylee'} ``` +### Managing Hub administrators + Admin users of JupyterHub have the ability to take actions on users' behalf, such as stopping and restarting their servers, and adding and removing new users from the whitelist. @@ -317,7 +336,7 @@ then admin users have permission to log in *as other users* on their respective Note: additional configuration examples are provided in this guide's [Configuration Examples section](./config-examples.html). -### Adding and removing users +### Add or remove users from the Hub Users can be added and removed to the Hub via the admin panel or REST API. These users will be added to the whitelist and database. Restarting the Hub will not require manually updating the @@ -341,7 +360,7 @@ hosted deployments of JupyterHub, to avoid the need to manually create all your launching the service. It is not recommended when running JupyterHub in situations where JupyterHub users maps directly onto UNIX users. -## Configuring single-user servers +## Spawners and single-user notebook servers Since the single-user server is an instance of `jupyter notebook`, an entire separate multi-process application, there are many aspect of that server can configure, and a lot of ways @@ -412,14 +431,6 @@ Adding API token for Now you can run your script, i.e. `cull_idle_servers`, by providing it the API token and it will authenticate through the REST API to interact with it. -## File locations - -It is recommended to put all of the files used by JupyterHub into standard UNIX filesystem locations. - -* `/srv/jupyterhub` for all security and runtime files -* `/etc/jupyterhub` for all configuration files -* `/var/log` for log files - [oauth-setup]: https://github.com/jupyterhub/oauthenticator#setup [oauthenticator]: https://github.com/jupyterhub/oauthenticator From 51097de43ddcdc21db4627a3d0bd9e2543cbbf2e Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Thu, 18 Aug 2016 04:52:51 -0700 Subject: [PATCH 10/16] Update contents format --- docs/source/index.rst | 45 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index db33a7c8..c7ad4d16 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -24,39 +24,70 @@ JupyterHub also provides a `REST API `_ for administration of the Hub and users. + Contents -------- +**User Guide** + +* :doc:`getting-started` +* :doc:`rest` +* :doc:`howitworks` +* :doc:`websecurity` + .. toctree:: :maxdepth: 2 - :caption: User Documentation + :hidden: + :caption: User Guide getting-started + rest howitworks websecurity + +**Configuration Guide** + +* :doc:`authenticators` +* :doc:`spawners` +* :doc:`config-examples` +* :doc:`troubleshooting` + .. toctree:: :maxdepth: 2 - :caption: Configuration + :hidden: + :caption: Configuration Guide - config-examples authenticators spawners + config-examples troubleshooting + +**API Reference** + +* :doc:`api/index` + .. toctree:: :maxdepth: 2 - :caption: Developer Documentation + :hidden: + :caption: API Reference - api/rest api/index + +**About JupyterHub** + +* :doc:`changelog` + .. toctree:: :maxdepth: 2 + :hidden: :caption: About JupyterHub changelog + Indices and tables ------------------ @@ -64,11 +95,11 @@ Indices and tables * :ref:`modindex` * :ref:`search` + Questions? Suggestions? ----------------------- - `Jupyter mailing list `_ - `Jupyter website `_ -- `Stack Overflow - Jupyter `_ -- `Stack Overflow - Jupyter-notebook `_ + From 7c41a024ba7a1f8f7300358c80324645b886f486 Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Thu, 18 Aug 2016 05:05:46 -0700 Subject: [PATCH 11/16] Fix typo --- docs/source/config-examples.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/config-examples.md b/docs/source/config-examples.md index eed05948..05d41aea 100644 --- a/docs/source/config-examples.md +++ b/docs/source/config-examples.md @@ -91,7 +91,7 @@ In the following example, we show configuration files for a JupyterHub server ru Let's start out with `jupyterhub_config.py`: ```python -#Force the proxy to only listen to connections to 127.0.0.1s +# Force the proxy to only listen to connections to 127.0.0.1 c.JupyterHub.ip = '127.0.0.1' ``` From 71b35602d72f4cea3ec7dc3912e6967615a313b6 Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Thu, 18 Aug 2016 08:32:37 -0700 Subject: [PATCH 12/16] Edit grammar in index --- docs/source/index.rst | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index c7ad4d16..23fee2c5 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -3,26 +3,28 @@ JupyterHub With JupyterHub you can create a **multi-user Hub** which spawns, manages, and proxies multiple instances of the single-user -`Jupyter notebook `_ server. For -example, JupyterHub can be used to serve notebooks to a class of students, a -corporate data science group, or a science research group. +`Jupyter notebook `_ server. +Due to its flexibility and customization options, JupyterHub can be used to +serve notebooks to a class of students, a corporate data science group, or a +scientific research group. -Three main actors make up JupyterHub: +Three subsystems make up JupyterHub: -- multi-user **Hub** (tornado process) -- configurable http **proxy** (node-http-proxy) +- a multi-user **Hub** (tornado process) +- a configurable http **proxy** (node-http-proxy) - multiple **single-user Jupyter notebook servers** (Python/IPython/tornado) -JupyterHub's basic principles for operation are: +JupyterHub's basic flow of operations includes: -- 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 +- The Hub spawns 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 JupyterHub also provides a `REST API `_ -for administration of the Hub and users. +for convenient administration of the Hub, its users, and services. Contents @@ -93,7 +95,6 @@ Indices and tables * :ref:`genindex` * :ref:`modindex` -* :ref:`search` Questions? Suggestions? From 31f63c737f845c4c40db3f389cf0eac84f9410e8 Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Thu, 18 Aug 2016 09:07:54 -0700 Subject: [PATCH 13/16] Add image of JupyterHub parts to index --- docs/source/images/hub-pieces.png | Bin 0 -> 60179 bytes docs/source/images/jhub-parts.png | Bin 0 -> 82315 bytes docs/source/index.rst | 27 ++++++++++++++++----------- 3 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 docs/source/images/hub-pieces.png create mode 100644 docs/source/images/jhub-parts.png diff --git a/docs/source/images/hub-pieces.png b/docs/source/images/hub-pieces.png new file mode 100644 index 0000000000000000000000000000000000000000..21238f6477d2fc030ce033bc046afee2161cb725 GIT binary patch literal 60179 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

0eysOl%H~ z+G{WOc{f#Y-7bg-&sRwgr@0TM3wXexD{~4Ajeu5vozQ~Va35mK$5`p}vRaak6lfV8 zscam-AZ6H{XlwPar-k2HKj#`X*_{;zlVH+*uDBO$tG{5{A%+ds_!FCsZ}$Cdo~2Hn zlI&e$C)vNGcYvJ>>a0ynvnzA16^OJ%Hz8@BBHZ$wyWl|2XoE47n2fIv^mxL$3siR! zJ)y=_?-s8kG4)@BOf6ufpgcfOKs{!6G8_rLHSoR5z^KToLw@Mzzzg--!ioXck5T=V zWo23`y&vJR^(-WJt`qZd(g2jx)%j792a^m8%d`ZX0t(~O#&g!!lW$Z&w^w45cav37 zxRg^MCm#^SS5%Et%?F8WzbI;^BXp+JO56zAp9i)h1t}v~MlZO|P|#kflwNKd&~BZ_BAQ z61BJCM)d(QXwUYCEI>l}_uJkQ>Ht#yCy2l)RB^>@-An2|0LpQt!|2 z@65_pB(nem32qe7`bh3V0=LzjcdgobdRo%8I62wn8)V8&E*NHc|A4b|NVu45CEe>_T2lMt&NtgoTRsL zVyum!%82EUDW7Xyv$J#D1ApSoP(s{P^uXbs z5;(Fr`MCY(&nFP_$&XOqtNtW;cN{N#+oSOeXW{=6S};o{*Q@Ok6-~{Lrvd7XEi6Bw z#cE$_DB-Uv>xs3cc?1%_ur38p{blg!(bMVxVSu)x{I8m_6>Q8u+anyaa<3P+);BX< z8uK@0r*Wx}dj@jbU}ii*F4mw;wvpq10O(VeY3(x3!erru6c*|SD%QGkH)TsI>gRKl zVsQK6o|$~#3*?#GQ&6=PY*xEihYs~hd|`yy0E^OIhMuTO-^mqCA!nu=VA1|c4H%jL z6X9pqNP;L`)UBZXWJElq-97p-S7LcJ+|bl-n`J?=V95*MFBVS*&Are{oQ7SZZOn6t$v=-^f4)v0W`LKG7pW5E^ z^4DEeiVU?mtOz4V@caPJ4w3s%60n7L8>6xxO9}sOa<2}#lp~P%r%^7^^DH6KcCu8n z5pU*qZ?w}qijCL#l6UUZnb=|EngJ%25%%MN

TftL&G%SuNQfWi~U_(Uj+buG7$ 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 -for convenient administration of the Hub, its users, and services. +For convenient administration of the Hub, its users, and services, JupyterHub +also provides a +`REST API `_. Contents @@ -33,9 +39,9 @@ Contents **User Guide** * :doc:`getting-started` -* :doc:`rest` * :doc:`howitworks` * :doc:`websecurity` +* :doc:`rest` .. toctree:: :maxdepth: 2 @@ -43,10 +49,9 @@ Contents :caption: User Guide getting-started - rest howitworks websecurity - + rest **Configuration Guide** From 548e0f6153919c22c1a0288d3426fad8393839b1 Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Thu, 18 Aug 2016 09:58:37 -0700 Subject: [PATCH 14/16] Edits to technical overview --- docs/source/getting-started.md | 49 +++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/docs/source/getting-started.md b/docs/source/getting-started.md index 9f7080c9..1a6e810d 100644 --- a/docs/source/getting-started.md +++ b/docs/source/getting-started.md @@ -1,24 +1,36 @@ # Getting started with JupyterHub -## Overview +## Technical Overview -JupyterHub is a set of processes that together provide a multiuser Jupyter Notebook server. -There are three main categories of processes run by the `jupyterhub` command line program: +JupyterHub is a set of processes that together provide a single user Jupyter +Notebook server for each person in a group. -- **Single User Server**: a dedicated, single-user, Jupyter Notebook is started for each user on the system - when they log in. The object that starts these processes is called a Spawner. -- **Proxy**: the public facing part of the server that uses a dynamic proxy to route HTTP requests - to the Hub and Single User Servers. -- **Hub**: manages user accounts and authentication and coordinates Single Users Servers using a Spawner. +### Three subsystems +Three major subsystems run by the `jupyterhub` command line program: -To use JupyterHub, you need a Unix server (typically Linux) running -somewhere that is accessible to your team on the network. The JupyterHub server -can be on an internal network at your organization, or it can run on the public -internet (in which case, take care with [security](getting-started.html#security)). -Users access JupyterHub in a web browser, by going to the IP address or -domain name of the server. +- **Single User Server**: a dedicated, single-user, Jupyter Notebook server is + started for each user on the system when the user logs in. The object that + starts these servers is called a Spawner. +- **Proxy**: the public facing part of JupyterHub that uses a dynamic proxy + to route HTTP requests to the Hub and Single User Notebook Servers. +- **Hub**: manages user accounts, authentication, and coordinates Single User + Notebook Servers using a Spawner. -Basic principles: +![JupyterHub subsystems](images/jhub-parts.png) + + +### Deployment server +To use JupyterHub, you need a Unix server (typically Linux) running somewhere +that is accessible to your team on the network. The JupyterHub server can be +on an internal network at your organization, or it can run on the public +internet (in which case, take care with the Hub's +[security](getting-started.html#security)). + +### Basic operation +Users access JupyterHub through a web browser, by going to the IP address or +the domain name of the server. + +Basic principles of operation: * Hub spawns proxy * Proxy forwards all requests to hub by default @@ -38,8 +50,7 @@ start a notebook server on the same machine running under their system username. The other main option is to start each server in a separate container, often using Docker. - -## JupyterHub's default behavior +### Default behavior **IMPORTANT:** In its default configuration, JupyterHub requires SSL encryption (HTTPS) to run. **You should not run JupyterHub without SSL encryption on a public network.** @@ -93,7 +104,7 @@ Prior to beginning installation, it's helpful to consider some of the following: - Spawner of singleuser notebook servers (Docker, Batch, etc.) - Services (nbgrader, etc.) -## Folders and File Locations +### Folders and File Locations It is recommended to put all of the files used by JupyterHub into standard UNIX filesystem locations. @@ -102,7 +113,7 @@ UNIX filesystem locations. * `/etc/jupyterhub` for all configuration files * `/var/log` for log files -## Configuration methods +## Configuration JupyterHub is configured in two ways: From 42c78f3c4377b3c3d71182dd1c4ea94621f31fb1 Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Thu, 18 Aug 2016 10:20:57 -0700 Subject: [PATCH 15/16] Drop back to old environment --- docs/environment.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/environment.yml b/docs/environment.yml index 35077c30..525bca02 100644 --- a/docs/environment.yml +++ b/docs/environment.yml @@ -12,7 +12,4 @@ dependencies: - traitlets>=4.1 - pip: - sphinx>=1.3.6 - - recommonmark==0.4.0 - - sphinx_rtd_theme - - pyenchant - - sphinxcontrib-spelling + - recommonmark==0.4.0 \ No newline at end of file From 678fd1cd08229beafc5b9e2dfc85679f00e49c79 Mon Sep 17 00:00:00 2001 From: Carol Willing Date: Thu, 18 Aug 2016 10:36:40 -0700 Subject: [PATCH 16/16] Shorten name --- docs/environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/environment.yml b/docs/environment.yml index 525bca02..6cc3d3cc 100644 --- a/docs/environment.yml +++ b/docs/environment.yml @@ -1,4 +1,4 @@ -name: jupyterhub_docs +name: jd channels: - conda-forge dependencies: