> ## Documentation Index
> Fetch the complete documentation index at: https://docs.domino.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Run multiple applications in a Workspace

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](/cloud/platform-capabilities/core-concepts/jobs), 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.

<Note>
  Domino workspaces reserve port 80 for nginx and port 9000 for the executor.
</Note>

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](https://github.com/jupyterhub/jupyter-server-proxy) and [JupyterLab](https://jupyterlab.readthedocs.io/en/stable/).

## Prerequisites

* Python 3+

* Jupyter Server Proxy

## Install Jupyter Server Proxy

By default, [Domino standard environments](/cloud/platform-capabilities/core-concepts/compute-environments/manage-compute-environments/2-domino-standard-environments) have [Jupyter Server Proxy](https://github.com/jupyterhub/jupyter-server-proxy) installed. If you are not on the recent version of the [Domino Standard Environment](/cloud/platform-capabilities/core-concepts/compute-environments/manage-compute-environments/2-domino-standard-environments), use the following steps to install it in your [Domino environment](/cloud/platform-capabilities/core-concepts/compute-environments/manage-compute-environments).

Add the following lines to your environment’s Dockerfile instructions.

```bash theme={null}
USER root

# Install NodeJS
# You can omit this step if your environment already has NodeJS installed
RUN curl -sL https://deb.nodesource.com/setup_16.x | bash - &&
   apt-get install nodejs -y &&
   rm -rf /var/lib/apt/lists/*

# Install jupyterlab-server-proxy (omit if already installed)
RUN if [ -x /opt/conda/bin/conda ]; then
      /opt/conda/bin/conda install -y -c conda-forge jupyter-server-proxy;
   else
      pip install --no-cache-dir jupyter-server-proxy;
   fi

# Update JupyterLab config
RUN mkdir -p /home/ubuntu/.jupyterlab/ &&
   echo "c.ServerProxy.servers = {" >> /home/ubuntu/.jupyterlab/jupyter_lab_config.py &&
   echo "    'code': {" >> /home/ubuntu/.jupyterlab/jupyter_lab_config.py &&
   # VS Code example. Replace this command with what you want to proxy to
   echo "        'command': ['code-server', '--port', '{port}', '--auth', 'none']" >> /home/ubuntu/.jupyterlab/jupyter_lab_config.py &&
   echo "    }" >> /home/ubuntu/.jupyterlab/jupyter_lab_config.py &&
   echo "}" >> /home/ubuntu/.jupyterlab/jupyter_lab_config.py

USER ubuntu
```

## Access your App

It can be accessed via a URL in the form: `https://your-domino-url/project-owner/project-name/notebookSession/run-ID/proxy/app-port/`

This URL can be generated using Domino environment variables as follows:

```bash theme={null}
echo -e "import os\nprint('https://your-domino-url/{}/{}/notebookSession/{}/proxy/8501/'.format(os.environ['DOMINO_PROJECT_OWNER'], os.environ['DOMINO_PROJECT_NAME'], os.environ['DOMINO_RUN_ID']))" | python3
```

Ensure you change the `your-domino-url` and port number to match your deployment and app.
