Appendix — Jupyter server proxy applications

`jupyter-server-proxy is a general purpose application for Jupyter classic notebooks and JupyterLab that can be used to launch and proxy arbitrary web applications running in the same context as the Jupyter server.

Applications can be launched from the Jupyter notebook homepage New menu or the JupyterLab launcher. The path to the application can be given as a “nice” application name on the Jupyter notebook application server path.

The jupyter-server-proxy idea is useful in several respects:

  • a container running a Jupyter server and jupyter-server-proxy only needs to expose only a single http port (the one that the notebook / JupyterLab is accessed via). All other applications can be proxied along the same path using the same port;
  • many simple web applications applications do not have any authentication; proxying an application behind a Jupyter server means you can make use of the notebook server authenticator to provide a challenge before providing access to the application;
  • the jupyter-server-proxy will start an application when it is first requested, so applications do not need to be started when the environment is started; applciations are only started when requested. If a repeated request is made for an application that has already been started, the user will be taken directly to it.

Multiple applications can be installed and accessed using custom jupyter-server-proxy templated extensions.

14.2 OpenRefine

jupyterserverproxy-openrefine is a jupyter-server-proxy extension for running OpenRefine, a Java based web app for cleaning tabiularo datasets.

14.3 pgweb

jupyter-pgweb-proxy is a jupyter-serverproxy extension for running pgweb, a browser based management UI for PostrSQL databases.

14.4 nb_tensorspace_server_proxy

The nb_tensorspace_server_proxy extension wraps a locally running version of the Tensorspace.js playground behind a proxied simple web server.

The application can be launched from the classic Jupyter notebook homepage New menu, or the JupyterLab launcher.

The TensorSpace.js* playground provides an interactive web application that will attempt to recognise a user entered handwritten digit and visualise the activation of a simple pre-trained tensorflow network:

14.5 Tensorflow Playground

The nb_tensorflow_playground_serverproxy jupyter-server-proxy extension wraps a locally running version of the Google Tensorflow Playground behind a proxied simple web server.

14.6 serverproxy_convnet_mnist

The serverproxy_convnet_mnist jupyter-server-proxy extension wraps a locally running version of the original ConvNetJS web demo behind a proxied simple web server.

14.7 serverproxy_tfjs_demos

The serverproxy_tfjs_demos jupyter-server-proxy extension wraps a locally running version of the Visualizing training with tfjs-vis scrollytelling article behind a proxied simple web server.

14.8 Handwritten Digit Prediction

Handwritten Digit Prediction is a jupyter-server-proxy extension that proxies this original simple web demo or using tensorflow.js to recognise handwritten digits running via a simple http web server.

14.9 RStudio / Shiny Applications

jupyter-rsession-proxy is a proxy for the popular RStudio IDE.

A separate jupyter-shiny-proxy can be used to proxy R/Shiny applications.

May, 2021: the MyBinder demo for the extension seems to be broken at the moment but this is a generally a well tested extension and should be fixable; it is installed by default in many Jupyter/R Docker images.