jupyter官方出了一个jupyterhub的项目,搭建后可以支持多用户登录创作Python,适合用于教学。
其官方项目地址:https://jupyter.org/hub
下面是完整搭建jupyterhub的步骤,整个过程非常简单,但是其中安装插件系统的方法非常坑,希望可以帮到你。
安装vmware pro 15
首先安装vmware pro 15虚拟机,从官方下载后,使用密钥生成工具注册即可:
链接: https://pan.baidu.com/s/1-0GsWRpjX0jEWvW9_f5KsA 提取码: h455
安装ubuntu 18.04 server版
jupyterhub要求ubuntu18.04,去官方下载server版即可,桌面版毫无意义。
然后在vmware安装ubuntu即可,记得安装过程中有一步问你是否安装openssh server,记得打钩。
安装jupyerhub
实际上jupyterhub项目的大致原理就是为每个用户启动一个独立的传统的jupyter notebook进程提供服务。
所以官方提供了K8S容器化方案,但我们只需要用它的单机版的方案即可,该单机方案有独立的官方主页:https://tljh.jupyter.org/en/latest/,叫做 The Littlest JupyterHub 项目。
安装基本工具
1 |
sudo apt install python3 git curl |
安装jupyterhub
官方提供了一键安装脚本,只不过因为GFW问题会耗时比较长(几十分钟),也可能失败,耐心等待即可,失败了就重新跑好了。
需要替换–admin后面的参数,设置一个管理员的用户名,后续我们需要登录用。
1 |
curl https://raw.githubusercontent.com/jupyterhub/the-littlest-jupyterhub/master/bootstrap/bootstrap.py | sudo -E python3 - --admin <admin-user-name> |
成功会输出done,那么就安装结束了。
安装脚本已经注册了2个systemd的service,因此Jupyterhub相关服务已经启动,并且开机会自动拉起,无需操心。
访问jupyterhub
浏览器打开虚拟机的IP地址即可进入jupyterhub。
登录的用户名用安装时指定的用户名,密码自己设置,jupyterhub的逻辑是新用户首次登录使用的密码就是该用户的永久密码。
点击右上角control panel可以进入管理员后台,点击左上角admin可以添加新用户。新用户的密码是新用户首次登录时使用的密码决定的,如果新用户不小心设错了密码或者设置了空密码,那么管理员可以删除用户并再次添加该用户,这样新用户可以再次设置密码。(这不会导致新用户的历史数据删除,请放心)
实际上,jupyterhub会为每一个登录用户创建一个linux的user,其名字前缀是jupyter,拥有独立的HOME目录:
1 2 3 4 5 6 7 |
liangdong@ubuntu:~$ ll /home/ total 20 drwxr-xr-x 5 root root 4096 Aug 11 10:15 ./ drwxr-xr-x 24 root root 4096 Aug 11 09:28 ../ drwxr-x--- 7 jupyter-liangdong jupyter-liangdong 4096 Aug 11 10:29 jupyter-liangdong/ drwxr-x--- 3 jupyter-zhongxuan jupyter-zhongxuan 4096 Aug 11 10:15 jupyter-test/ drwxr-xr-x 7 liangdong liangdong 4096 Aug 11 10:54 liangdong/ |
HOME目录下就是用户的代码了:
1 2 |
liangdong@ubuntu:~$ sudo ls /home/jupyter-liangdong/ 第一节课.ipynb |
安装nbextension扩展
jupyter notebook自身是支持一个叫做nbextension的扩展机制的,从而可以安装一些类似代码补全之类的扩展功能,只不过安装nbextension在jupyterhub情况下有点坑。
关键在于,我发现jupyterhub一键安装脚本在ubuntu里面安装了好几个python版本,导致我不知道用户访问的独占jupyter notebook进程使用的是哪个python版本呢?
这一块我研究了半天,最稳妥也最简单的做法就是使用管理员登录到jupyter,然后用web界面上的terminal安装nbextension扩展即可,terminal使用的python一定是用于拉起用户notebook进程的python。
官方安装nbextension的教程:https://tljh.jupyter.org/en/latest/howto/admin/enable-extensions.html#。
原样粘贴执行一遍即可:
1 2 |
sudo -E pip install jupyter_contrib_nbextensions sudo -E jupyter contrib nbextension install --sys-prefix |
安装完成后,需要重启jupyterhub。
进入control panel,点击stop server再start server即可重启当前登录用户的jupyter notebook进程:
如果其他用户没有生效,说明其他用户的jupyter notebook进程没有重启,简单粗暴的话就直接reboot一下系统就好了。
勾选扩展
现在你应该能看到一个叫做Nbextension的TAB,进入后可以为当前登录用户勾选所需的扩展:
每个用户应用了哪些扩展是彼此独立的,没法全局设置。
实用的扩展有一个Hinterland用于代码自动补全提示,还有一个ExecuteTime会显示执行时间(刷算法题比较有用)。
jupyterhub为每一个用户创建独立的jupyter notebook进程提供服务,因此随着在线用户数增多耗费内存增加,不过如果用户离线太久对应进程会自动回收。
如果大家有高配机器,可以考虑用docker来运行ubuntu18.04,而不必购买虚拟机。
全文完。
如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~

1
1