0. 前言
最近在公司希望在本地调用服务器的Python进行Python的调试,踩了很多坑,现在记录下主要的过程。
1. 环境
- 本机环境:Ubuntu 16.04
- Python:Anaconda
- 服务器环境:centos
2. 服务器Jupyter Notebook设置
01. 在服务器安装anaconda
自己或者联系SRE在服务器安装anaconda(主要是由于这个集成了很多包,方便使用)
02. 生成密码
打开python终端生成密码,防止他人使用自己的环境。(^ _ ^)
# 打开python终端
from IPython.lib import passwd
passwd()
Enter password:
verify password:
OUt: 'sha1:0e422dfccef2:84cfbcbb3ef95872fb8e23be3999c123f862d856'
03. 修改Jupyter Notebook默认配置文件
在服务器终端输入vim ~/.jupyter/jupyter_notebook_config.py
,打开默认配置文件,如果没有则创建。然后在末尾输入这几行。其实还有很多可以配置,具体配置可以在网上查找。
c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha:ce...刚才复制的那个密文'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 #随便指定一个端口,例如可以指定为9999
c.ContentsManager.root_dir='/home/work/python' # 指定jupyter的根目录
04. 服务器打开jupyter
在服务器打开jupyter服务,最好利用nohup后台执行,这样就可以一直连接
# 注意配置ip和port
nohup /anaconda3/bin/jupyter-notebook --ip="0.0.0.0" --no-browser --port=8888 >/dev/null 2>&1 &
Ps:正常情况下,现在已经能通过本地浏览器(配置好代理!!!)输入服务器IP和端口来连接到服务器的jupyter,但是由于公司服务器端使用了nginx的反向代理,在使用的时候,虽然能访问notebook,但是无法使用kernel,也就无法运行python代码,所以还需要配置websocket的功能,但是也可以通过如下方法进行本地的互通。
05. 服务器端连接本地
在服务器执行ssh -R 0.0.0.0:8888:0.0.0.0:8888 本地用户名@本地IP
输入本地计算机的密码,即可在服务器端连接本地
06. 本地浏览器接入
本地浏览器localhost:8888
进入jupyter使用。