构建JupyterHub 多用户环境

JupyterHub 是为多个用户提供 JupyterLab 的集成服务系统,每个用户相互隔离。在 JupyterHub 版本低于 2.0.0 时,可采用该方法部署。本篇介绍对于 JupyterHub 2.X (截止到2022年12月21日)的部署方法。

相关环境是 miniconda, ubuntu 2004,所有命令以 root 用户运行。

安装 miniconda

切换到主目录,下载miniconda并安装

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

chmod +x Miniconda3-latest-Linux-x86_64.sh

./Miniconda3-latest-Linux-x86_64.sh

这里需要选择安装在 /usr/local/miniconda 路径

添加环境到root用户的Bashrc

echo 'export PATH=/usr/local/miniconda/bin:$PATH' >> /etc/profile

source /etc/profile

echo 'export PATH=/usr/local/miniconda/bin:$PATH' >> .bashrc

设置路径权限

目前/usr/local/miniconda 只有root可以访问。

创建一个miniconda用户组 groupadd miniconda

给miniconda用户组路径权限 chgrp -R miniconda /usr/local/miniconda

chmod 770 -R /usr/local/miniconda

将用户添加到 miniconda组 usermod -a -G miniconda root

多用户的话使用Adduser username 创建用户,然后添加到用户组

usermod -a -G miniconda User

有需要的话,添加路径到普通用户 echo 'export PATH=/usr/local/miniconda/bin:$PATH' >> /home/user/.bashrc

使得环境变量对当前用户生效

source .bashrc

如果添加新的用户(如 userA)使用 jupyterhub,后续只需要将该用户 userA 添加到组 miniconda 中即可,方法如下

sudo usermod -a -G miniconda userA

删除用户方法如下,即把用户 userA 从组miniconda中删除。然后重启jupyterhub sudo gpasswd -d userA miniconda

给conda环境安装常用包

pip install --upgrade pip

pip install jupyterhub jupyterlab pandas matplotlib youtube_dl numba boost scipy numpy sympy scikit-learn opencv-contrib-python Pillow

pip install jupyterlab_code_formatter

jupyter server extension enable jupyterlab_code_formatter

pip install black isort

在Nodejs 安装 configurable-http-proxy

apt install nodejs npm -y

npm install -g configurable-http-proxy

生成jupyterhub 配置文件

jupyterhub --generate-config

mkdir -p /etc/jupyterhub

mv jupyterhub_config.py /etc/jupyterhub/config.py

使得普通用户 userA 也能够在该目录创建文件

chown -R userA /etc/jupyterhub/

设置 AAA 为 base url, userA 为管理员用户

echo "c.PAMAuthenticator.open_sessions = False" >> /etc/jupyterhub/config.py

echo "c.JupyterHub.base_url = '/AAA'" >> /etc/jupyterhub/config.py

echo "c.JupyterHub.hub_ip = '0.0.0.0'" >> /etc/jupyterhub/config.py

echo "c.Authenticator.delete_invalid_users = True" >> /etc/jupyterhub/config.py

echo "c.Authenticator.admin_users = set(['userA'])" >> /etc/jupyterhub/config.py

echo "c.JupyterHub.admin_access = True" >> /etc/jupyterhub/config.py

echo "c.Spawner.cmd = ['/usr/local/miniconda/bin/jupyterhub-singleuser']" >> /etc/jupyterhub/config.py

systemctl

创建文件 /etc/systemd/system/jupyterhub.service,写入内容如下

[Unit]
Description=Jupyterhub service
After=syslog.target network.target
[Service]
ExecStart=/usr/local/miniconda/bin/jupyterhub -f /etc/jupyterhub/config.py
WorkingDirectory=/etc/jupyterhub/
[Install]
WantedBy=multi-user.target

使用:

systemctl status jupyterhub.service
systemctl start jupyterhub.service
systemctl stop jupyterhub.service
systemctl enable jupyterhub.service