在Apache反向代理的Linode上安装Jupyter Notebook Server

介绍

Jupyter Notebook是一个交互式增强型shell,可以在Web浏览器中运行。Notebook在数据科学家中很受欢迎,支持图形的在线渲染,导出为各种格式,以及用于数学符号的LaTeX。本指南旨在在Linode上配置一个公共Jupyter Notebook服务器,该服务器将使用Apache作为反向代理,便于远程访问您的计算需求。

准备

因为本指南是为运行Ubuntu 16.04的Linodes编写的,所以你应该:

  1. 熟悉我们的入门指南并通过SSH登录您的服务器。
  2. 安装了Apache 2.4.18 或者更高版本。

安装Anaconda Package Manager

Anaconda是一个包管理器,内置支持虚拟环境。它配备了Jupyter笔记本的每个安装,并由Jupyter的官方文档推荐。

  1. SSH进入您的Linode并安装最新版本的Anaconda。以下示例使用Python 3.6下载Anaconda的版本(但也可以使用Python 2.7): wget https://repo.continuum.io/archive/Anaconda3-4.4.0-Linux-x86_64.sh
  2. 运行安装脚本: bash ~/Anaconda3-4.4.0-Linux-x86_64.sh
  3. 按照终端中的提示,接受条款,并允许安装程序创建PATH .bashrc
  4. 重新加载新的.bashrc更改: exec bash

创建自签名证书

官方文档建议生成自签名SSL证书,以防止从浏览器中在Notebook中发送未加密的密码。这一点尤为重要,因为Jupyter笔记本可以运行bash脚本。如果您有域名,请考虑使用Certbot而不是自签名证书。

  1. 创建有效期为365天的自签名证书: openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mykey.key -out mycert.pem 这个命令将创建一个mykey.keymycert.pem
  2. 将文件限制为仅由所有者读取: chmod 400 mykey.key chmod 400 mycert.pem

配置Jupyter Notebook

  1. 生成新的配置文件。这将创建一个~/.jupyter目录: jupyter notebook --generate-config
  2. 为笔记本创建密码: jupyter notebook password
  3. 从新创建的jupyter_notebook_config.json文件中复制密码。
  4. 取消注释配置文件中的以下行: c.NotebookApp.allow_origin = '*' c.NotebookApp.base_url = '/jupyter' c.NotebookApp.certfile = '/absolute/path/to/mycert.pem' c.NotebookApp.ip = 'localhost' c.NotebookApp.keyfile = '/absolute/path/to/mykey.key' c.NotebookApp.open_browser = False c.NotebookApp.password = 'paste_hashed_password_here' c.NotebookApp.trust_xheaders = True

配置Apache反向代理

  • 安装Apache 2.4: sudo apt install apache2
  • 启用a2enmod: sudo a2enmod 将出现一个提示,其中包含Apache的mod列表: Your choices are: access_compat actions alias allowmethods asis auth_basic auth_digest auth_form authn_anon authn_core authn_dbd authn_dbm authn_file authn_socache authnz_fcgi authnz_ldap authz_core authz_dbd authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex buffer cache cache_disk cache_socache cgi cgid charset_lite data dav dav_fs dav_lock dbd deflate dialup dir dump_io echo env expires ext_filter file_cache filter headers heartbeat heartmonitor ident include info lbmethod_bybusyness lbmethod_byrequests lbmethod_bytraffic lbmethod_heartbeat ldap log_debug log_forensic lua macro mime mime_magic mpm_event mpm_prefork mpm_worker negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_express proxy_fcgi proxy_fdpass proxy_ftp proxy_html proxy_http proxy_scgi proxy_wstunnel ratelimit reflector remoteip reqtimeout request rewrite sed session session_cookie session_crypto session_dbd setenvif slotmem_plain slotmem_shm socache_dbm socache_memcache socache_shmcb speling ssl status substitute suexec unique_id userdir usertrack vhost_alias xml2enc Which module(s) do you want to enable (wildcards ok)?
  • 启用mod_proxymod_proxy_httpmod_proxy_wstunnelmod_ssl,和mod_headers: proxy proxy_http proxy_https proxy_wstunnel ssl headers
  • 导航到该/etc/apache2/sites-available目录。复制默认配置文件,然后在virtualhost上添加指令: sudo cp 000-default.conf jupyter.conf
  • 注释DocumentRoot以允许https://your-domain-name/重定向为https://your-domain-name/jupyter。该<Location>指令连接websocket以允许默认内核运行: /etc/apache2/sites-available/jupyter.conf
<VirtualHost *:443>
    ServerAdmin webmaster@localhost
#   DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}.error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLCertificateFile /absolute/path/to/mycert.pem
    SSLCertificateKeyFile /absolute/path/to/mykey.key
    SSLProxyEngine On
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off

    ServerName localhost
    ProxyPreserveHost On
    ProxyRequests Off
    LogLevel debug

    ProxyPass /jupyter https://localhost:8888/jupyter
    ProxyPassReverse /jupyter https://localhost:8888/jupyter
    RequestHeader set Origin "https://localhost:8888"
    Redirect permanent / https://your-domain-name/jupyter

    <Location "/jupyter/api/kernels">
        ProxyPass wss://localhost:8888/jupyter/api/kernels
        ProxyPassReverse wss://localhost:8888/jupyter/api/kernels
    </Location>

</VirtualHost>

注意: 只要它的Jupyter Notebook 的配置文件中定义的基本URL路径相匹配的URL/jupyter路径可以有任何名称。

  • 启用新创建的配置: sudo a2ensite jupyter.conf
  • 重启Apache服务器: sudo service apache2 restart
  • 启动Jupyter笔记本: jupyter notebook

运行Jupyter Notebook

  1. 在本地计算机,导航到https://your-domain-name/哪里your-domain-name是你的Linode或您所选择的域名的IP地址。如果使用自签名证书,则浏览器可能要求您确认安全例外:
  1. 如果Apache配置正确,Jupyter会提示您登录:
  1. 使用Python内核创建一个新笔记本:
  1. Notebook已准备好运行Python代码或将来添加的其他内核:

请注意,此设置仅适用于单用户; 同一笔记本电脑上的同时用户可能会导致不可预测的结果。对于多用户服务器,请考虑使用JupyterHub

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

更多教程请前往腾讯云+社区学习更多知识。


参考文献:Install a Jupyter Notebook Server on a Linode Behind an Apache Reverse Proxy

本文的版权归 阿小庆 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏芋道源码1024

熔断器 Hystrix 源码解析 —— 命令合并执行

本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. HystrixCollapser 2.1 构造方法 2.2 执行命令方式 2.3 核心方法 3...

38670
来自专栏xdecode

Java源码安全审查

最近业务需要出一份Java Web应用源码安全审查报告, 对比了市面上数种工具及其分析结果, 基于结果总结了一份规则库. 本文目录结构如下: 

82920
来自专栏逆向技术

内核开发知识3之串口过滤.绑定设备.

根据上面的理论.我们可以根据API. 写简单的串口绑定了. 注意下方代码是串口绑定的代码.相当于我们在这个设备上加了一层.但是我们还没有写获取请求数据的代码.

15210
来自专栏积累沉淀

java事物处理

事物处理 什么是事物:个人认为事物,就是对数据库进行一组操作动作的集合,如果一组处理步骤要么全发生,要么一步也不执行,称这组处理步骤为一个事物。当所...

27590
来自专栏linjinhe的专栏

Linux常用命令:top

18950
来自专栏醒者呆

【精解】EOS TPS 多维实测

由于我们在研究eos阶段,大量使用到cleos,因此使用cleos来测试tps是我们第一个能想到的手段。这一节我们将加深理解tps的意义,tps的计算方法,讨论...

40040
来自专栏Java帮帮-微信公众号-技术文章全总结

Activiti学习详解【面试+工作】

一:Activiti第一天 1:工作流的概念 ? 说明: 1) 假设:这两张图就是XX兄弟的请假流程图 2) 图的组成部分: A. 人物:范XX 冯X刚 王X军...

73850
来自专栏猿学

猿学-内核开发知识3之串口过滤.绑定设备

根据上面的理论.我们可以根据API. 写简单的串口绑定了. 注意下方代码是串口绑定的代码.相当于我们在这个设备上加了一层.但是我们还没有写获取请求数据的代码.

6100
来自专栏MasiMaro 的技术博文

派遣函数

驱动程序的主要功能是用来处理IO请求,而大部分的IO请求是在派遣函数中完成的,用户模式下所有的IO请求都会被IO管理器封装为一个IRP结构,类似于Windows...

14910
来自专栏岑玉海

hbase源码系列(六)HMaster启动过程

  这一章是server端开始的第一章,有兴趣的朋友先去看一下hbase的架构图,我专门从网上弄下来的。   按照HMaster的run方法的注释,我们可以了解...

59790

扫码关注云+社区

领取腾讯云代金券