Jupyter私人云计算工作平台

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;
}
}

1 2
赞(0) 打赏
未经允许,不得转载本站任何文章:不忘初心的知与行 » Jupyter私人云计算工作平台

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏