我们经常在远程服务器上工作,并想在本地浏览器中打开远程服务器上的Jupyter Notebook。可以通过以下这种方式实现。
本地浏览器中打开远程服务器上的Jupyter Notebook
- 查看jupyter的配置文件
先检查是否有配置文件 /home/xxx/.jupyter/jupyter_notebook_config.py ,其中xxx是你的用户名。 如果没有的话,通过以下命令产生:$ jupyter notebook --generate-config
Writing default config to: /home/xxx/.jupyter/jupyter_notebook_config.py
- 修改jupyter配置文件
打开配置文件,会发现所有的设置都是comment掉的,可以找到以下设置进行相关修改并去掉comment,或者直接将以下设置写进配置文件。c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
- 运行jupyter并在本地浏览器中通过ip:8888打开
以上设置完成后,在远程服务器上启动jupyter,会出现以下页面:
现在可以在本地浏览器中通过ip:8888打开远程服务器上的notebook了。其中8888是notebook默认使用端口,IP是远程服务器的IP地址。这里没有对远程服务器的Jupyter设置密码,从安全角度考虑,建议大家设一个。
解释一下以上的配置,这种方法是通过将notebook server设成public的方式实现的。notebook server默认是只监听localhost/127.0.0.1这个接口的(By default the notebook server only listens on the localhost/127.0.0.1 network interface)。如果你想要从远程连接notebook的话,就需要使notebook可以监听所有的网络接口,并且不打开浏览器。 c.NotebookApp.ip = '*' 这个配置使notebook server可以监听所有网络接口,而c.NotebookApp.open_browser = False 这个配置关闭了浏览器自动打开设置。
其他设置
常用设置快速查询
以下是配置文件中的常用设置,也可以在启动notebook时用参数设置
常用设置 | 含义 |
---|
c.NotebookApp.ip = ‘*’ | 对所有ip都开放访问 | c.NotebookApp.open_browser = False | 关闭了浏览器自动打开设置 | c.NotebookApp.port = number | 默认端口设为number |
设置jupyter密码
- 打开一个python的解释器,在里面执行
from notebook.auth import passwd; passwd()
- 交互式地填入你期待的密码,重复写两次,就可以得到密码的sha编码,把这个编码复制起来
- 打开jupyter的配置文件
- 查看配置项:c.NotebookApp.password,把刚刚复制的密码sha编码,填到这个配置中
- 重启jupyter notebook
设置jupyter端口
jupyter的默认端口是8888,如果这个端口被占或者有别的设置端口的需求的话,可以通过修改配置文件
c.NotebookApp.port = number
或者启动jupyter时通过参数设置
jupyter notebook --port number
在浏览器中切换jupyter notebook和jupyter lab
ip:8888/tree 打开jupyter notebook ip:8888/lab 打开jupyter lab
常见问题
远程无法访问,但是启动jupyter的服务器可以
(以下问题以及解决方法是一位同事总结的,感觉非常有用且经常参考,所以被我搬过来了)
以下排查点按从上到下顺序执行
排查点 | 命令 | 执行命令的地方 | 正常的现象 | 不正常的现象 | 如何解决 |
---|
网络是否通畅 | ping 目标ip | 远程机器上 | 一直弹出新的进度 | 只显示一行,卡住不动 | 检测ip是否填错;找相关人解决 | 端口是否通畅 | nmap -p 端口 目标ip | 远程机器上 | | | 如果是closed:代表远程服务没有启动,或者由于服务原因导致你无法访问。请排查服务的配置中是否有限制访问ip的选项。如果是filterd:代表被防火墙过滤了,请排查防火墙限制问题 | jupyter配置是否限制了访问ip | 打开jupyter配置文件,查看c.NotebookApp.ip 配置 | c.NotebookApp.ip = ‘*’ 或者’0.0.0.0’代表对所有ip都开放访问 | #c.NotebookApp.ip ='localhost’或c.NotebookApp.ip = ‘localhost’ 这是默认值,代表只能在启动notebook的机器上访问 | 将这个配置设置为正确的格式即可 | | 防火墙是否有限制 | 只限centos7的解决方案 sudo firewall-cmd --list-ports | 启动notebook的机器上 | 防火墙关闭 或者列出来的端口包含你启动notebook的端口 | 不包含这个端口 | 开放端口 sudo firewall-cmd --zone=public --add-port=8888/tcp --permanent sudo firewall-cmd --reload |
|