For security reasons, Domino workspace sessions are only accessible on one port. For example, Jupyter typically uses port 8888. When you launch a Jupyter workspace session, a Domino executor starts the Jupyter server in a Run, and opens port 8888 to serve the Jupyter application to your browser. If you used the Jupyter terminal to start another application on a different port, it would not be accessible.
However, you might want to run multiple applications in the same workspace session. For example, you might want to:
-
Edit and debug Dash or Flask apps live.
-
Use Tensorboard to view progress of a live training job.
Domino supports this with Jupyter Server Proxy and JupyterLab.
By default, Domino standard environments have Jupyter Server Proxy installed. If you are not on the recent version of the Domino Standard Environment, use the following steps to install it in your Domino environment.
-
Add the following lines to your environment’s Dockerfile Instructions.
# Install NodeJS # You can omit this step if your environment already has NodeJS 6+ installed RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && apt-get install nodejs -y && rm -rf /var/lib/apt/lists/* # Switch to the latest JupyterLab start script RUN rm -rf /var/opt/workspaces/Jupyterlab/start.sh && cd /var/opt/workspaces/Jupyterlab/ && wget https://raw.githubusercontent.com/dominodatalab/workspace-configs/2019q4-v1/Jupyterlab/start.sh && chmod 777 /var/opt/workspaces/Jupyterlab/start.sh # Install and enable jupyter-server-proxy RUN pip install --upgrade jupyterlab==0.35.4 && pip install nbserverproxy jupyter-server-proxy && jupyter serverextension enable --py --sys-prefix nbserverproxy && jupyter labextension install jupyterlab-server-proxy
-
Update the JupyterLab definition in the Pluggable Workspace Tools section of your environment.
jupyterlab: title: "JupyterLab (Beta)" iconUrl: "/assets/images/workspace-logos/jupyterlab.svg" start: [ /var/opt/workspaces/Jupyterlab/start.sh ] httpProxy: internalPath: "/{{ownerUsername}}/{{projectName}}/{{sessionPathComponent}}/{{runId}}/{{ port: 8888 rewrite: false requireSubdomain: false
If you launch a JupyterLab workspace session in an environment with Jupyter Server Proxy installed, you can start and serve additional applications if they are served on a different port than JupyterLab.
After an application is started, access it at the following URI:
If your JupyterLab session is served at: `https://<YourDominoURL>/workspace?owner=<ownername>&projectName=<projectname>&runId=<runhash>'
and you use the JupyterLab terminal to start a Dash app on port 8887 for debugging, you can open the Dash app at: https://<YourDominoURL>/owner=<ownername>/projectName=<projectname>/notebookSession/runid=<runhash>/proxy/8887/*
.
Instead, if you use the JupyterLab terminal to start a Bokeh app on port 5006, you can open the Bokeh app at: https://<YourDominoURL>/owner=<ownername>/projectName=<projectname>/notebookSession/runid=<runhash>/proxy/5006/
.
With this model you can host multiple applications on different ports and expose each through your JupyterLab workspace.
If you edit the source files in JupyterLab after the application is running, restart the app in the browser for the edits to take effect.
For environments that have VS Code installed in JupyterLab, you can start a VS Code session from JupyterLab, and then start an App from VS Code. You can use VS Code to debug.
A new app or process that you start and open in a separate tab will not have the Domino workspace with options to stop, sync, commit, or manage your project files. To access this application and manage your changes, you must open the main JupyterLab tab for your workspace session.