搭建jupyterhub支持多用户在线编程

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 项目。

安装基本工具

安装jupyterhub

官方提供了一键安装脚本,只不过因为GFW问题会耗时比较长(几十分钟),也可能失败,耐心等待即可,失败了就重新跑好了。

需要替换–admin后面的参数,设置一个管理员的用户名,后续我们需要登录用。

成功会输出done,那么就安装结束了。

安装脚本已经注册了2个systemd的service,因此Jupyterhub相关服务已经启动,并且开机会自动拉起,无需操心。

访问jupyterhub

浏览器打开虚拟机的IP地址即可进入jupyterhub。

登录的用户名用安装时指定的用户名,密码自己设置,jupyterhub的逻辑是新用户首次登录使用的密码就是该用户的永久密码。

点击右上角control panel可以进入管理员后台,点击左上角admin可以添加新用户。新用户的密码是新用户首次登录时使用的密码决定的,如果新用户不小心设错了密码或者设置了空密码,那么管理员可以删除用户并再次添加该用户,这样新用户可以再次设置密码。(这不会导致新用户的历史数据删除,请放心)

实际上,jupyterhub会为每一个登录用户创建一个linux的user,其名字前缀是jupyter,拥有独立的HOME目录:

HOME目录下就是用户的代码了:

安装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#

原样粘贴执行一遍即可:

安装完成后,需要重启jupyterhub。

进入control panel,点击stop server再start server即可重启当前登录用户的jupyter notebook进程:

如果其他用户没有生效,说明其他用户的jupyter notebook进程没有重启,简单粗暴的话就直接reboot一下系统就好了。

勾选扩展

现在你应该能看到一个叫做Nbextension的TAB,进入后可以为当前登录用户勾选所需的扩展:

每个用户应用了哪些扩展是彼此独立的,没法全局设置。

实用的扩展有一个Hinterland用于代码自动补全提示,还有一个ExecuteTime会显示执行时间(刷算法题比较有用)。

jupyterhub为每一个用户创建独立的jupyter notebook进程提供服务,因此随着在线用户数增多耗费内存增加,不过如果用户离线太久对应进程会自动回收。

如果大家有高配机器,可以考虑用docker来运行ubuntu18.04,而不必购买虚拟机。

全文完。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~