在 Linux VPS 上搭建云端 Jupyter Notebook

相信用过 Jupyter Notebook 的朋友们都知道这个工具的方便和强大。它采用了后台+web端的方式运行,既有可视化的界面,又有web端的灵活。

正常情况下,我们都是在本地运行 Jupyter Notebook,打开一个服务进程,然后在浏览器中访问 Jupyter Notebook。不过,对于拥有 VPS 的朋友们来说,怎么能浪费这么有利的运行方式?当然是把它部署到云端,随时随地通过浏览器来写代码、运行代码啦。

因此,今天我们来看看如何在 Linux 平台的 VPS 上搭建可以远程访问的 Jupyter Notebook。

一、安装 Jupyter Notebook

我们可以使用 pip 来安装 Jupyter,不过由于 Jupyter 的依赖较多,安装过程可能会有一些问题需要处理。

也可以直接安装 Anaconda 这个项目,十分简单方便,一步到位。Anaconda 包含了 Python、Jupyter Notebook 以及常用的科学计算包。

我们这里通过安装 Anaconda 来安装 Jupyter Notebook,Python 版本为 2.7。

Anaconda官网 下载安装包,得到文件 Anaconda2-4.4.0-Linux-x86_64.sh

在 Linux 命令行中输入

$ bash Anaconda2-4.4.0-Linux-x86_64.sh

注意,无论你使用的终端是否是 bash,命令中的 bash 都不能少。执行该文件后,跟随向导一步一步安装就可以了。

二、设置 PATH 环境变量

安装完 Anaconda 之后,需要先配置环境变量,才能直接使用 pythonjupyter notebook 等命令。

打开用户目录下的 .bashrc 文件,添加下面的命令:

export PATH=/wray/anaconda2/bin:$PATH

我的 anaconda 安装目录为 /wray/anaconda2/,大家可以根据自己的安装路径修改该命令。

重新登陆终端,就能打开 python 和 jupyter notebook 了。

三、设置 Jupyter 配置文件

Jupyter Notebook 运行需要一些参数,例如登录密码、默认目录、SSL认证等等。

Jupyter 默认不允许直接使用 root 用户运行 Jupyter Notebook,最好是新创建一个用户帐户。如果一定要用 root 账户运行的话,在下面的生成密码这一步中,需要采用第二种方式手动生成密码。

生成密码

我们需要生成经过加密的密码。

$ jupyter notebook password
Enter password:  ****
Verify password: ****
[NotebookPasswordApp] Wrote hashed password to /Users/you/.jupyter/jupyter_notebook_config.json

密码将被保存到 ~/.jupyter/jupyter_notebook_config.json 这个文件中。

也可以手动生成密码:

$ python
>>> from notebook.auth import passwd
>>> passwd()
Enter password:
Verify password:
'sha1:a52b35d305df:c8339cf14bf4f0a8f745c1d1041ec87c03282221'

生成SSL证书

该步骤的目的是采用 HTTPS 连接远程访问 Jupyter Notebook,增加安全性,非必须。

~/.jupyter/ 目录下执行以下命令:

$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mykey.key -out mycert.pem

生成的 mykey.keymycert.pem 文件将被保存到 ~/.jupyter/ 目录中。

需要注意的是,由于我们自己制作的SSL证书没有被权威机构认证,所以通过浏览器访问时会提示不安全,只需要添加信任并继续访问即可。

这里有一个问题,是关于 ios 系统的。就是当我采用了 SSL 认证,即 HTTPS 访问时,Windows 平台和 Android 平台都能够正常访问并使用 Jupyter Notebook。但是使用 ios 平台访问时,能够登陆 Jupyter Notebook,并且可以打开和编辑文件,但始终提示 Connecting to kernel,即无法连接到 python 解释器内核,因此没办法执行代码。去掉SSL认证之后,ios 才能成功连接到内核。SSL认证的设置在下文中讲述。

生成配置文件

生成默认的 Jupyter 配置文件:

$ jupyter notebook --generate-config

我们可以在 ~/.jupyter 目录中看到 jupyter_notebook_config.py 文件,该文件用于配置 Jupyter Notebook 的运行参数。

然后打开该文件,添加以下配置:

# 设置默认目录
c.NotebookApp.notebook_dir = u'/defult/dir/'
# 允许通过任意绑定服务器的ip访问
c.NotebookApp.ip = '*'
# 用于访问的端口
c.NotebookApp.port = 9999
# 不自动打开浏览器
c.NotebookApp.open_browser = False
# 设置SSL认证
c.NotebookApp.certfile = u'/path/to/.jupyter/mycert.pem'
c.NotebookApp.keyfile = u'/path/to/.jupyter/mykey.key'
# 设置登录密码
c.NotebookApp.password = u'sha1:28436903e41b:e36a5f61317d4f515d46178a81834b20ae60d57b'

如果不设置默认目录,则起始目录就是执行 jupyter notebook 命令时所在的工作目录。

在 Linux 中,非 root 用户无法监听 1024 以内的端口号。

在终端中执行 jupyter notebook,如果是 root 用户,则需要加上 --allow-root 选项。此时,若是没有其它问题出现,你就可以通过你的域名和端口号 https://domain.com:9999 来访问 Jupyter Notebook 了。

注意,如果采用了 SSL 认证,则访问的网址中必须以 https 开头,表示采用 https 连接方式,否则无法访问。

不挂起后台运行

我们希望即使在退出终端后,Jupyter Notebook 依然在后台运行,仍然可以通过远程被访问。

我们可以使用 nohup command & 来实现,nohup 命令会忽略所有的挂起信号,确保命令在后台长期执行。

nohup jupyter notebook > jupyter.log &

这里我们将标准输出定向到 jupyter.log 文件中,如果不指定该文件,则默认定向到 nohup.out 文件中。

接下来,就尽情地享受云端 Jupyter Notebook 所带来的便捷吧!

相关文章

Loading Likes...

发表评论

电子邮件地址不会被公开。 必填项已用*标注