美文网首页
jupyter学习

jupyter学习

作者: jshan | 来源:发表于2018-02-02 03:45 被阅读0次

    nginx + jupyter的服务端部署

    我们都知道在本地安装部署jupyter,之后可以执行命令 jupyter notebook 可以打开浏览器可视化操作编程环境,那么我们如何在本地去访问我们的服务端呢?下面我先列出一些效果图来讲述我搭建的整个流程。

    下图是我从登录jupyter到进入到jupyter主页的演示图

    jupyter主页

    其中说明如下几点:

    • ①是登录jupyter主页 https://js.jupyter.com/jupyter 时,弹出的登录验证页面;
    • ②是表示该请求是一个https请求;
    • ③是表示jupyter的资源主页路径是 jupyter
    • ④是表示在jupyter的notebook的路径下的目录文件列表信息;

    那么为了上述列出的这四点是如何实现?或者说是哪些配置信息决定了上面的显示呢?

    1. notebook的认证

    为了实现上面的认证效果,其实就是对服务器上的jupyter notebook环境的权限认证。下面介绍一下我们如何对自己启动的jupyter服务,从设置权限,到验证权限的流程。

    1. 首先是设置权限,通过执行命令: jupyter notebook --generate-config,会创建目录 ~/.jupyter 并且该目录下会有一个配置文件 jupyter_notebook_config.py,通过设置如下配置项:
    c.NotebookApp.base_url = '/jupyter'  # 设置jupyter的资源主页路径,即[jupyter主页]图片中的③
    c.NotebookApp.ip = '127.0.0.1'  # 设置了访问该jupyter应用的来源机器只能是本机
    c.NotebookApp.open_browser = False  # 设置了关闭浏览器
    c.NotebookApp.password = u'sha1:a937e51de9a1:a567707768cd50d0ac1d40a4fb739510ddb3d8cb'  # 这就是实现认证的关键所在,即用户在浏览器中输入一个密码,如何和服务器上"正确"的匹配上,这个字符串的获取,需要通过其他命令获取
    c.NotebookApp.port = 8888  # 设置了jupyter服务的端口
    c.NotebookApp.notebook_dir = u'/data/home/user00/js_python'  # 设置了jupyter的notebook路径,即访问jupyter首页时,看到的文件列表就是该目录下的,如果不设置该项,那么notebook的目录就是 `~/.jupyter`
    
    1. 我们在1中看到了用户认证的关键配置项 c.NotebookApp.password,那么该值我们如何获取呢?可以通过进入到 ipython 环境下,执行如下命令获取,其中两次输入的密码,就是我们在浏览器中需要输入的密码,这样就能和服务器上的验证匹配得上了。
    In [1]: from notebook.auth import passwd
    In [2]: passwd()
    Enter password: 
    Verify password: 
    Out[2]: 'sha1:a937e51de9a1:a567707768cd50d0ac1d40a4fb739510ddb3d8cb'
    

    上面我们只是启动好了jupyter,并且jupyter的服务只能在本机访问,那么我们如何在远程进行链接该服务呢?下面我们介绍使用nginx做服务代理,到本机的jupyter服务上去。

    2. nginx代理

    我们看到上面图片中的URL请求使用的是https,那么我们如何nginx做到https请求呢?另外我们如何是本地的链接请求代理到远程服务器上的本机jupyter 8888服务呢?下面我们将详细讲解。

    1. 首先是搭建nginx服务
      搭建nginx服务的时候,使用如下命令编译
    >> sudo  yum install pcre pcre-devel
    >> sudo  yum install openssl openssl-devel
    >> ./configure --prefix=/data/home/user00/app/nginx-1.6.3 --pid-path=/data/home/user00/app/nginx-1.6.3/nginx.pid --with-http_ssl_module
    >> make && make install
    
    1. 然后设置nginx的启动配置
      下图中的①是用来设置jupyter的请求是 https 请求作用使用的,端口是443,然后还有ssl鉴权认证,其中文件 cert.crtcert.key 获取的方法如下,执行如下命令,然后在本目录下会生成这两个文件,将其拷贝到目录 /data/home/user00/app/nginx-1.6.3/ 即可
    >> openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout cert.key -out cert.crt
    # 参数说明:
    # -x509 # 输出一个x509格式的证书
    # -days # x509证书的有效时间
    # -newkey rsa:bits  # 生成一个bits长度的RSA私钥文件,用于签发
    # -keyout  # 输出证书key文件 
    # -out  # 输出证书私钥文件
    
    nginx.conf 配置

    然后启动nginx的时候,会发现会报如下错误,表示nginx编译的时候,没有加载ssl模块进去,那么我们就需要编译一下nginx,将ssl模块加进去,但是我们不是重新将nginx编译一遍。

    nginx: [emerg] unknown directive "ssl_certificate" in /data/home/user00/app/nginx-1.6.3/nginx.conf:86
    nginx: configuration file /data/home/user00/app/nginx-1.6.3/nginx.conf test failed
    

    具体操作方法如下:

    # step 1 解压nginx包到一个新的目录
    # step 2 然后重新编译,但是呢,我们这次只添加我们需要的模块,例如上面的ssl,
    #            但是需要保证prefix和pid-path与本机之前编译的nginx这些设置保持一致;
    #            注意,这里只执行 make 不要执行 make install
    ./configure --prefix=/data/home/user00/app/nginx-1.6.3 --pid-path=/data/home/user00/app/nginx-1.6.3/nginx.pid --with-http_ssl_module
    make
    # step 3 在该路径下会有文件 objs/nginx ,将其拷贝到系统的nginx目录,例如本文中的例子,在拷贝之前最好备份一下旧的nginx
    cp objs/nginx /data/home/user00/app/nginx-1.6.3/sbin/nginx
    # step 4 重启nginx服务即可
    

    3. 问题处理

    下面是问题汇总,在搭建的过程中遇到的问题,进行了汇总。

    问题1

    2018/02/02 01:38:41 [error] 16673#0: *7 connect() failed (111: Connection refused) while connecting to upstream, client: 10.32.203.42, server: js.jupyter.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8888/", host: "js.jupyter.com"
    

    解答 :
    查看后台的8888服务是否有拉起,发现服务没有起来,通过重新拉起即可解决。

    问题2

    2018/02/02 01:21:58 [error] 11207#0: *46 open() "/data/home/user00/app/nginx-1.6.3/html/jupyter" failed (2: No such file or directory), client: 10.32.203.42, server: localhost, request: "GET /jupyter HTTP/1.1", host: "js.jupyter.com"
    

    解答
    这里代理转到jupyter8888服务出现了问题,才会出现去请求 .../html/jupyter 目录资源的问题,需要检查配置中关于代理的设置是否正确

    下面是关于使用过程中遇到的问题的汇总。

    问题1

    加载包失败问题
    解决
    由于在 from sklearn import linear_model 加载时,出现 scipy 包没有安装的情况;等安装了之后,再次执行上面步骤出现的上面错误,需要重新启动 jupyter服务即可解决

    相关文章

      网友评论

          本文标题:jupyter学习

          本文链接:https://www.haomeiwen.com/subject/gzqszxtx.html