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