Setting a JupyterHub for the lab

JupyterHub is a fantastic platform for getting students up and running with Jupyter notebooks without the hassle of installations and maintenance on individual machines. In our lab, we use The Littlest JupyterHub (TLJH) since we have only a few users. It can be set up on cloud instances or servers you own. Check out the installation guide for more details. We use our own server, so I’ll walk you through the process assuming you have an Ubuntu-based server with remote SSH access and admin rights.

Installation Process

First, let’s upgrade the server and install some essential packages:

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install python3 python3-dev git curl xorg

If Apache is enabled, it needs to be disabled since it conflicts with the built-in Traefik reverse proxy used by JupyterHub:

sudo systemctl status apache2
sudo systemctl disable apache2
sudo apt remove apache2

Next, we’ll install Anaconda. Head over to Anaconda’s archive to get the latest version and update the link accordingly:

cd /tmp
curl -O https://repo.anaconda.com/archive/Anaconda3-2023.07-Linux-x86_64.sh
bash Anaconda3-2023.07-Linux-x86_64.sh
cd ~
source ~/.bashrc
conda info

If needed, create a sudo account for JupyterHub admin access:

adduser apetros
usermod -aG sudo apetros

Now, let’s install JupyterHub using TLJH:

curl -L https://tljh.jupyter.org/bootstrap.py | sudo -E python3 - --admin apetros

We can fine-tune server parameters to manage resources for students effectively. For example:

sudo tljh-config set limits.memory 6G
sudo tljh-config set limits.cpu 1
sudo tljh-config set user_environment.default_app jupyterlab
sudo tljh-config set services.cull.every 600
sudo tljh-config set services.cull.timeout 1800
sudo tljh-config reload

To set up HTTPS, replace _your-email_ and _your-domain_ with your own details:

sudo tljh-config set https.enabled true
sudo tljh-config set https.letsencrypt.email your_email
sudo tljh-config add-item https.letsencrypt.domains your_domain
sudo tljh-config reload proxy

Post-Installation Setup

Once JupyterHub is up and running, install the necessary packages for your courses. In my courses, I use:

  • Pandas: For energy analytics.
  • Pyomo, IPOPT, CoinCBC: For optimization problems.
  • Pandapower: For power-flow and short-circuit analysis.
  • PyPSA, PyRAMSES: For power system dynamics.

Install these packages as follows:

sudo -E conda install -c conda-forge scipy numpy pandas numba matplotlib pyomo ipopt glpk coincbc pypsa networkx cartopy
sudo -E pip install pandapower
sudo -E conda install -c apetros pyramses

Setting Up PyRAMSES

PyRAMSES requires Intel Redistributable libraries (more information). To install these, add the Intel repository and update:

# download the key to system keyring
wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB |
gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null

# add signed entry to apt sources and configure the APT client to use Intel repository:
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list

Then update and install:

sudo apt-get update
sudo apt-get install intel-oneapi-runtime-libs

Create a Python file to add the runtime library paths for all JupyterHub users:

sudo nano /opt/tljh/config/jupyterhub_config.d/path.py

Add the following:

c.Spawner.environment = {
    'LD_LIBRARY_PATH': '/opt/intel/oneapi/redist/lib'
}

Save and reload the hub:

sudo tljh-config reload
sudo tljh-config reload proxy

This should resolve the dependencies for PyRAMSES. You can click here to clone the repository with the Nordic system to get started.

Petros Aristidou
Petros Aristidou
Assistant Professor