Jupyter一个Web应用程序,类似与MATLAB的交互式的编程界面。起初在使用Anaconda包的时候并不觉得有多好用。也当在开始未得其使用要领。在将其布置在VPS上后,使用起来越发顺手。
1、Jupyter的安装
推荐直接安装Anaconda的科学计算包。其次的选择的是miniconda。在后面安装所需的库文件很方面。我自己使用的是pyenv来安装各种Python版本的,万一出了什么问题,对系统的影响也小。
2、在VPS上配置Jupyter
正常本地安装通过jupyter notebookJ就可以运行了。但为了满足在VPS上更加安全、稳定、可靠的要求我们需要修改一下默认配置。
2.1 生成默认配置文件
运行以下命令
jupyter notebook --generate-config
在~/.jupyter文件夹中生成一个默认配置文件
可以通过以下命令获得当前环境下Jupyter所使用的配置文件路径
jupyter --paths
2.2 编辑配置文件前的预备工作
In [1]: from notebook.auth import passwd In [2]: passwd() Enter password: Verify password:
2.3 修改配置文件参数
# 修改监听的IP连接。如果时直接访问IP:PORT可以设置为*,我们将通过NGINX代理访问,为了安全起见,设置为127.0.0.1 c.NotebookApp.ip = '127.0.0.1' # 填入2.2中生成的密码编码 c.NotebookApp.password = u'sha1:bcd259ccf...<your hashed password here>' c.NotebookApp.password_required = True # 因为我们在VPS中远程访问,因此需要关闭打开浏览器选项 c.NotebookApp.open_browser = False # 修改Jupyter的服务端口。如果使用阿里云VPS还要在安全组中打开相应端口访问权限。 c.NotebookApp.port = 9999 # 修改Jupyter的工作目录,在Jupyter中保存的文件位置。 c.NotebookApp.notebook_dir = '/home/jupyter'
3、可持续运行Jupyter
如果我们直接运行jupyter notebook。在关闭SSH连接后,服务就会自动终止。这里使用PM2保证Jupyter后台运行,并且在意外中断后可以自动重启
npm install pm2 -g
PM2需要nodejs环境支持。下面时jupyter的启动脚本
//指定运行用户 if (process.env.NODE_USER) { console.log("run as "+process.env.NODE_USER) process.setuid(process.env.NODE_USER) } var exec = require('child_process').exec; var cmdStr = '/home/hamilton/.pyenv/shims/jupyter notebook'; exec(cmdStr, function(err,stdout,stderr){ if(err) { console.log('start notebook error:'+stderr); } else { console.log('ok!'); }
pm2 start notebook.js // 启动Jupyer程序 pm2 save //保持当前启动信息 pm2 startup //设置PM2开机自动启动
4、配置Jupyter运行在Nginx后面
upstream notebook { server localhost:8888; } server{ listen 80; server_name xyz.abc.com; location / { proxy_pass http://notebook; proxy_set_header Host $host; } location ~ /api/kernels/ { proxy_pass http://notebook; proxy_set_header Host $host; # websocket support proxy_http_version 1.1; proxy_set_header Upgrade "websocket"; proxy_set_header Connection "Upgrade"; proxy_read_timeout 86400; } location ~ /terminals/ { proxy_pass http://notebook; proxy_set_header Host $host; # websocket support proxy_http_version 1.1; proxy_set_header Upgrade "websocket"; proxy_set_header Connection "Upgrade"; proxy_read_timeout 86400; } }