How to run Jupyter Hub (single user mode) using systemd for autostart
Note: This will only allow a single (preconfigured) user to login to Jupyter lab! See How to run Jupyter Hub (multi-user mode) using systemd on how to deploy Jupyter Hub in multi-user mode using systemd, which allows any Unix user to login!
The following script will install Jupyter Hub in single user mode (i.e. only a single Linux user can login to Jupyter Hub using the web interface).
Prerequisites
First install Python & PIP, then NodeJS, then Jupyter Hub, then configurable-http-proxy
:
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs python3-pip
sudo pip3 install jupyterhub
sudo npm i -g configurable-http-proxy
Installing the Jupyter Hub systemd service
Run the following script as the user you want to be able to login! Do not run the script using sudo
!
#!/bin/bash
# This script installs and enables/starts a systemd service
export NAME=JupyterHub-$USER
export GROUP=$(id -gn $USER)
# Create service file
sudo tee /etc/systemd/system/${NAME}.service <<EOF
[Unit]
Description=${NAME}
[Service]
Type=simple
ExecStart=/usr/bin/env jupyterhub
WorkingDirectory=$HOME
User=$USER
Group=$GROUP
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
# Enable and start service
systemctl enable --now ${NAME}
This script will install a systemd service named JupyterHub-$USER
(where $USER
is the current user, e.g. uli
) and autostart it on boot.
Running multiple services
If you run multiple services, you can run the script for each user and choose a unique port for each service by adding --port=7219
to the /usr/bin/env jupyter hub
command, e.g.
ExecStart=/usr/bin/env jupyterhub --port=7192
Alternatively, you can run a single systemwide Jupyter Hub in multi-user mode where multiple users can log in.