使用本地浏览器打开远程服务器上的Jupyter Notebook

最近在github找到一些工程的代码都是.ipynb格式的文件,就好奇这个JupyterNotebook格式可以直接运行吗,还是需要另存成本地常见的格式,就查了一下,发现是可以的,这里记录一下。
主要思路:
(假设你的服务器上已经安装好了Jupyter Notebook)

  • 配置Jupyter notebook
1. 服务器端安装Anaconda, 安装好jupyter notebook 等等
2. 生成jupyter notebook配置文件
jupyter notebook --generate-config
3.配置密码

打开python,输入指令:

from notebook.auth import passwd
passwd()

输入自己想要设置的密码,之后会自动生成一个密码序列,复制下来。

4.配置密码生成ssl证书(最后用https登录)
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mykey.key -out mycert.pem
5.修改jupyter配置文件

打开第2步生成的配置文件,一般是在~/.jupyter
打开配置文件:

vi ~/.jupyter/jupyter_notebook_config.py

对以下几行做如下修改:

c.NotebookApp.password=u'sha1:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
                              //  (注:XXXXXXXXXXXXXXXXXXXXXXX 为第3步中生成的密码序列)
c.NotebookApp.certfile = u'/absolute/path/to/your/certificate/mycert.pem'
c.NotebookApp.keyfile = u'/absolute/path/to/your/certificate/mykey.key'
                     //(注:为第4步中生成的mycert.pem和mykey.key两个文件的绝对路径,可用pwd查看)        
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8889     //自己可以设定成别的

:wq!保存并退出

6. 在服务器上运行jupyter Notebook

在服务器端打开监听端口:

jupyter notebook --no-browser --port=8888 --ip=0.0.0.0

no-browser是指不在服务器上使用浏览器;port可以设置成任何空闲的端口号(上一步的配置文件中我把默认端口号8888改改为了8889,这里用8888依然可以);ip如果不设置为0.0.0.0我的服务器会报错:OSError: [Errno 99] Cannot assign requested addres。
在这里插入图片描述
或者,这一步还可以在服务器上用 nohup 后台挂起运行jupyter:

nohup jupyter notebook &

这里及以前参考的是[远程使用Jupyter]本地使用服务器端运行的Jupyter Notebook这篇文章。

7.本地和服务器端口映射

在本地计算机上(我的是win10系统),将服务器端口映射到本地。使用cmd命令打开控制台,输入:

ssh username@server_ip -L127.0.0.1:8000:127.0.0.1:8888

username就是在服务器上开设的用户名,server_ip就是服务器的IP,至于“-L127.0.0.1”中为什么是127.0.0.1我也不太清楚,然后就是将本地的8000端口映射到服务器端的8888端口,也就是jupyter notebook使用的端口。
使用本地浏览器打开远程服务器上的Jupyter Notebook_第1张图片
这里参考的是远程访问服务器端Jupyter notebook这篇文章。

8.本地浏览器打开服务器上的Jupyter Notebook

下面就可以在本地的浏览器里输入https://127.0.0.1:8000,输入第3步中自己设置的密码,就可以打开服务器上的Jupyter Notebook了,开始使用吧!
使用本地浏览器打开远程服务器上的Jupyter Notebook_第2张图片

【注】:文章远程访问服务器端Jupyter notebook中给出了另一种相近的使用本地浏览器打开服务器上Jupyter Notebook的方法。

没有在一开始设定密码,而是在浏览器上进行访问时,在跳出的token界面直接输入token。(这让我忽然想起,动手学深度学习的视频中,李沐大神打开服务器上的jupyter notebook时,用的就是这个方法。。。啊,很多事,总是要在不同的情境下一二再,再而三的遇到以后,才会想起回过头来,将它们串联起来,从而有进一步的理解~从一个陌生人真正变成一个熟人)

【实现过程中我自己遇到的问题】

之前配置完服务器上的JupyterNotebook之后,遇到过三个关键错误:
①第6步中,直接输入jupyter notebook --no-browser来运行Jupyter Notebook会报如下错误:
使用本地浏览器打开远程服务器上的Jupyter Notebook_第3张图片
②完成第6步,在服务器上正确运行Jupyter Notebook后,没有正确执行第7步,即正确地将服务器端口映射到本地端口(主要是直接套用了这两篇2018-07-10 在本地使用服务器上的jupyter notebook打开.ipynb文件和服务器端jupyter notebook映射到本地浏览器参考文章中的映射指令,以及对该将那个ip和端口映射到哪个ip和端口不明)
使用本地浏览器打开远程服务器上的Jupyter Notebook_第4张图片
③完成第7步,将服务器端口和本地端口映射成功后,打开本地浏览器输入ip地址127.0.0.1:8000,还是打不开服务器上的Jupyter Notebook,显示“连接重置错误 ERR_CONNECTION_RESET”。
参考了网页链接服务失败可能原因的文章(无法访问/404页面/SSL ERROR (总之就是连接不上)——问题与解决方案)后,找到了原因。
使用本地浏览器打开远程服务器上的Jupyter Notebook_第5张图片在本地浏览器地址栏中输入的ip应该是https://127.0.0.1:8000。因为在第3步中配置的密码,所以在访问时应该在ip地址前加入https,是https,要加上s哦,s!其实不该遇到这个问题的,因为第3步参考那篇文章中说到了这个问题,给出了正确访问的方式~主要是要怪自己的眼太大,竟然看不见这样一条赫然重要的提示(唉,也太粗心了,都对不起写那篇文章的博主)

【参考网址】
【1】Jupyter Notebook官网
【2】[远程使用Jupyter]本地使用服务器端运行的Jupyter Notebook
【3】2018-07-10 在本地使用服务器上的jupyter notebook打开.ipynb文件
【4】服务器端jupyter notebook映射到本地浏览器
【5】远程访问服务器端Jupyter notebook
【6】无法访问/404页面/SSL ERROR (总之就是连接不上)——问题与解决方案

你可能感兴趣的:(操作技能)