如何设置远程访问的Jupyter Notebook服务器

一、生成默认配置文件

jupyter notebook --generate-config

将会在用户主目录下生成.jupyter文件夹,其中jupyter_notebook_config.py就是刚刚生成的配置文件

二、生成秘钥

输入 ipython,进入ipyhon命令行
输入

In [1]: from notebook.auth import passwd

In [2]: passwd()

这里要求你输入以后登录使用的密码,然后生成一个秘钥,记得保存好秘钥,以免丢失。

Enter password: 
Verify password: 
Out[2]: 'sha1:1b4ea9662b35:3e3d6a823d264d466f125a0939623c05e7b66007'

三、修改配置文件

修改用户主目录下~/.jupyter/jupyter_notebook_config.py文件
取消c.NotebookApp.password = ''"注释,并将生成的秘钥复制进去

c.NotebookApp.password = 'sha1:1b4ea9662b35:3e3d6a823d264d466f125a0939623c05e7b66007'

四、编辑配置文件

在jupyter_notebook_config.py 中,除了添加前面提及的hash密码之外,还要修改如下部分代码(如果这些代码前有注释符号‘#’,则首先将其删除,表示启用这些设置):

#将默认值False修改为True,表示允许外部访问,这个设置和下面IP设置,双重保障外部用户访问的可达性:

c.NotebookApp.allow_remote_access = True

# 等号右边的‘localhost’(仅仅运行本地访问),修改为‘*’,表示允许所有IP皆可访问

c.NotebookApp.ip='*'

# 禁止自动打开浏览器

c.NotebookApp.open_browser = False

#设置一个固定的notebook服务会监听的IP端口(这里设置为9999),这个值可以任意,只要保证不和其他已经启用的端口号冲突即可。

c.NotebookApp.port = 9999

做完上述配置之后,保存文件并退出。

但此时修改的配置并没有生效,我们还需要在终端输入“jupyter notebook”命令,这样确保Jupyter重新加载jupyter_notebook_config.py,进而使得新配置起效。

五、放行Linux防火墙的端口

Jupyter Notebook的设置已经接近尾声。

但工作还没有做完。虽然我们开启了访问的端口,但Jupyter Notebook毕竟仅是Linux的一个应用程序,仅仅是它许可开放某个端口,这还不够。

Linux还得有个“外交部”——防火墙,只有它许可开放,那才是真的开放。

因此,下面的工作就是设置防火墙的端口开放。倘若开放某个端口(如9999),使用如下命令

pnb@centos-7 .jupyter]$  sudo firewall-cmd --zone=public --add-port=9999/tcp --permanent
[sudo] jpnb 的密码:****
Success

如果我们开放的不是9999,则修改上述端口号即可。

同样,有了新设置,我们还需要重新启动防火墙,使之生效。使用下面的命令,即可达到重启防火墙的功效:

[jpnb@centos-7 .jupyter]$  sudo systemctl restart firewalld

六、网页访问远程Jupyter文档

“是骡子是马,拉出来溜溜”。

配置了半天,我们看看能不能访问远程的Jupyter文档呢。我们先通过“ifconfig”来查看一下本机IP,这个流程并不是必需的,它主要是要证明,下面Jupyter文档的访问不是本地完成的。

 

如何设置远程访问的Jupyter Notebook服务器_第1张图片

图6 显示本地IP

现在我们远程SSH登录Jupyter服务器(IP地址为192.168.31.176):

YHMacBookPro:~ yhilly$  ssh [email protected]
[email protected]'s password:
Last login: Thu May 2 14:20:19 2019 from 192.168.31.194

在登录之后,我们启动Jupyter服务器,并让这个服务器后台运行:

[jpnb@centos-7 ~]$  nohup jupyter notebook &
[1] 18505
[jpnb@centos-7 ~]$ nohup: 忽略输入并把输出追加到"nohup.out"

这里简单解释一下nohup的含义,nohup就是不挂起的意思( no hang up)。该命令的一般形式为:

nohup command &

使用&命令后,作业被提交到后台运行,当前控制台没有被占用,否则,一旦把当前终端关掉(退出帐户时),作业就会停止运行。

nohup命令可以在你退出帐户之后继续运行相应的进程。

然后,我们在地址栏中输入远程服务器的IP和端口号:“http://192.168.31.176:9999/”,如图7所示

如何设置远程访问的Jupyter Notebook服务器_第2张图片

图7 输入远程Jupyter服务器密码

Jupyter会提示我们输入先前设置的密码。一旦输入密码后,就可以在浏览器上看到运行的Jupyter文档,如图8所示。

如何设置远程访问的Jupyter Notebook服务器_第3张图片

图8 访问并运行远程Jupyter文档

 

6.小结

终于,从零开始,经过一番折腾,我们能远程访问Jupyter服务器了。从效果上看,它和本地访问Jupyter没有什么差别,但是它“自有妙用”,即它能达到共享计算能力和共享编程环境的功效。

比如说,你租用了一台具备GPU云服务器,其价格不菲。于是,你想让一帮人(如你一个班的学生/学员)都有机会使用一把GPU(哪怕是分时复用也好)。

再比如,如果你辛辛苦苦配置好一个编程环境,装了各类类库(如TensorFlow、Keras、Caffe),还搭配了数十G级别的训练集,别人如果也想折腾出同样的环境,估计也得大半天。如果一帮人都这么折腾,这多浪费啊!

这时,我们可以让所有人访问这么一个可以共享的服务器,只要大家读写的Jupyter文档不一样,基本可以达到共享环境的目的——各玩个程序,而彼此不受影响,多好!

如此看来,Jupyter服务器的搭建,还是值得学习一番的。

希望以上文档,能对你所有帮助。

 

你可能感兴趣的:(python)