今天准备搭建一个JupyterHub服务器,给几个热爱数据分析的朋友用作Python实验平台。于是踩了如下一些坑。我的服务器是腾讯云上一台Ubuntu 16的服务器。我这边只是整理一些坑,具体操作的命令和代码在CSDN和Stack Overflow上面都有很丰富的资料。
1. jupyterhub 与 jupyter notebook:
- jupyter notebook是早期的版本,轻量级,本地运行方便,Python开发或者实验的过程中本地调试经常会使用这种原生的轻量级版本;没有用户管理、用户服务器管理等功能,不能面向多位用户使用。
- jupyterhub是集成了用户管理,服务器管理等功能的新版本,能够支持多人使用,但如果是本地调试,就过重了。
2. jupyterhub安装的坑:
- jupyterhub后端是nodejs,所以至少要安装nodejs,并且node -v 不低于6.0, 可以用以下命令升级:
第一行是安装一个叫n的命令,第二行是用n更新node到最近的stable版本,如果写latest就是更新到最新版。
sudo npm i -g n
sudo n stable
- jupyterhub会用到configurable-http-proxy,这个是nodejs中的一个组件,要用npm安装
- 使用nginx反向代理:若使用nginx反向代理,尽量按照官方文档来配置,链接在文末。
3. PAM Authentication 一直失败,原来是要用root启动jupyterhub,这样才能调用其他user的系统认证。
4. 处理完PAM的问题,用户已经可以登录了,但在start my server时爆了一长串错,很难debug。搜了很多遍发现报错的源头是module dateutil没有找到。dateutil要装一下,或者版本不够要升级,但是这个坑在于pip中这个module的名字叫做python-dateutil,遇到这个问题要用下面这行命令安装,如果是国内的服务器,非常建议加上 -i的参数,从tuna的镜像进行安装。
pip install python-dateutil -i https://pypi.tuna.tsinghua.edu.cn/simple
5. 当start server成功以后,想要创建第一notebook,又遇到坑了,服务器表示SingleUserNotebookApp handlers:620] Not Found,有一个handler找不到。也不知道是什么意思,就去互联网上搜一下。这个是系统权限的问题,如果登陆的用户没有sudo权限,就没有办法去user的目录下创建新的notebook文件。
这个问题的解决方案,根据官方文档可以解决,其中有比较多Linux系统层面的操作,也不是很懂,只能照着执行下来。
https://jupyterhub.readthedocs.io/en/stable/reference/config-sudo.html
如果需要翻译,可以给我留言,回头我翻译一份。
6.打开这个文件之后,python是无法执行的,总之是每走一步就错一步,摸着石头过河,渐渐地就想要放弃了。经过一夜的战斗,系统屏蔽了Cross Origin的请求。后来终于发现这是因为nginx在做反向代理的时候修改了header,导致jupyterhub将这个请求屏蔽。为什么要修改header呢,那是因为copy了网络上的配置文件,不靠谱,解决的办法是替换成官方提供的nginx配置文件的内容,终于运行成功了,半夜两点终于成功执行了hello world,心酸到哭泣。
官方配置反向代理的文档是:https://jupyterhub.readthedocs.io/en/stable/reference/config-proxy.html