引言

Jupyter Notebook(原名 ipython)可是科学计算界的必备工具,友好的界面,方便的交互,支持 Markdown,集中的极客们想要的一切特点,同时又制作的如此优雅和精美,真是难能可贵的又好看又好用的工具。

官网

https://jupyter.org/

并行计算支持

Jupyter Notebook 支持并行计算,而且很全面,像 MPI,OpenMP 等,支持部署在集群上,具体可以参考:https://ipyparallel.readthedocs.io/en/latest/。

多语言支持

这里的语言不是英语、汉语,而是不同的编程语言,包括在科学界很流行的 julia、Matlab、C、C#、R、Perl 等,超多支持,具体可以看这个表:https://github.com/jupyter/jupyter/wiki/Jupyter-kernels。

桌面端的环境搭建

按照官网的说法,极其推荐 Anaconda,有需求的可以直接到 Anaconda 官网 ( https://www.anaconda.com/download/ ) 下载可用的安装包,支持 win、Linux、MacOS,真是除了手机都支持 O(∩_∩)O~。

Jupyter 服务器搭建

网上关于 Jupyter 服务器的搭建,官方给出了很好的多用户服务端 Jupyterhub,但我的需求就是在 VPS 搭建好一个 Jupyter 服务网页,完全自己用,所以搭建 Jupyterhub 有些浪费资源,转而去寻找简单的 Jupyter 服务搭建方案,这一点官网也写好文档给我们用了,但文档是用英文写的,看的不舒服,这里只把要点写出来,供参考。

英文文档地址在此:http://jupyter-notebook.readthedocs.io/en/latest/public_server.html,英文好的小伙伴可以直接去实施。

1. 安装 Jupyter Notebook

下载 minicanda,并安装(miniconda 就是一个精简版的 Anaconda。当然,有兴趣的也可去直接安装 Anaconda,Anaconda 已经包含了完整的 jupyter 和 ipython 包,不需要额外再安装)。

  • Miniconda 下载地址:https://conda.io/miniconda.html。

  • Anaconda下载地址:https://www.anaconda.com/download/。

对于 python3,就要对应下载 Miniconda3,相似的是对于 python2,就要下载 Miniconda2。

wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh

然后,安装 Miniconda。

sh Miniconda3-latest-Linux-x86_64.sh

Miniconda 包含了一个完整的 python3 版本,如果加入系统的环境变量( ~/.bashrc 中加入 export 语句,详情可以谷歌 bashrc ),那么系统默认的 python 就是刚刚安装的 miniconda 中的 python,这样做的好处是,直接在系统中使用 pip 安装需要的包之后,在网页上的 jupyter 也有了相应的包,很是方便。

之后就可以使用 conda 的包管理系统,安装需要的包。

conda install ipython
conda install jupyter

对于 python3,需要安装 jupyter 这个包,如果是 Python2,需要安装 ipython-notebook 的包。

至此,jupyter 的安装已经完成。

2. 配置 Jupyter Notebook

下面的命令会在 ~/.jupyter 自动创建一个配置文件  jupyter_notebook_config.py。

$ jupyter notebook --generate-config
Writing default config to: /home/shenweiyan/.jupyter/jupyter_notebook_config.py

可以配置的项目有很多,有时间的话,可以仔细阅读配置文件中的注释,写的很清楚。

这里要强调的是创建密码的方法,总不想让自己的 jupyter 服务器被其他人使用吧。执行下面语句:

$ python -c "import IPython;print(IPython.lib.passwd())"
Enter password:
Verify password:
sha1:bda74221176f:ae266f5xxxxxxxxxxxxxxxxxxxxxxxx1

然后将得到的 sha1 复制到配置文件 jupyter_notebook_config.py 中的相应位置:

c.NotebookApp.password = 'sha1:bda74221176f:ae266f5xxxxxxxxxxxxxxxxxxxxxxxx1'

配置文件中,还有几处要修改:

c.NotebookApp.ip = '127.0.0.1'  
c.NotebookApp.allow_origin = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888

如此这般之后,配置完成咯!

3. 运行

执行命令:

$ jupyter notebook

就可以看到 jupyter notebook 执行的日志信息:

这是尚不能打开网页,因为是配置在 127.0.0.1 上的,只有本机可以访问。

4. 域名解析

配置 nginx 前需要把你已经申请的域名跟 Jupyter Notebook 的服务器 ip 进行绑定解析。

打开阿里云域名管理,增加 A 记录解析:(记录值填写 Jupyter 服务器的公网 IP)

5. 配置nginx

nginx 是一个高效的服务器,著名的 LNMP 中的 N,相信很多在 VPS 搭建过网站的小伙伴一定不陌生。

这里假设你已经安装好了 nginx,如果不会安装可以自行百度。

nginx 创建一个虚拟主机 vhost,然后配置文件参考下面:

upstream notebook {
    server localhost:8888;
}
server {
    listen 80;
    server_name xxx.xxxx.com;
    rewrite ^/(.*) https://xxx.xxxx.com/$1 permanent;
}
server{
    listen 443 ssl;
    index index.html index.htm index.php default.html default.htm default.php;
    server_name xxx.xxxx.com;
    root /home/wwwroot/xxx.xxxx.com;            
    ssl_certificate /etc/letsencrypt/live/xxx.xxxx.com/fullchain.pem;    
    ssl_certificate_key /etc/letsencrypt/live/xxx.xxxx.com/privkey.key;   
    ssl_ciphers "EECDH CHACHA20:EECDH CHACHA20-draft:EECDH AES128:RSA AES128:EECDH AES256:RSA AES256:EECDH 3DES:RSA 3DES:!MD5";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    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;
    }
}

其中 fullchain.pem 与 privkey.key 是你的网址的 SSL 证书,如果没有,可以参考 Letsencrypt 免费证书。

至此,大功告成,打开你的网址 xxx.xxx.com 是不是可以看到熟悉的 jupyter 了呢?如有疑问,欢迎留言讨论。O(∩_∩)O~

·end·

—如果喜欢,快分享给你的朋友们吧—

我们一起愉快的玩耍吧

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

基于 python3+nginx 的 Jupyter Notebook 服务端 ssl 访问相关推荐

  1. 基于Flask+Nginx+uWSGI实现CentOS服务端模型部署及预加载

    基于Flask+Nginx+uWSGI实现CentOS服务端模型部署及预加载http://www.manongjc.com/article/37802.html

  2. socket java 客户端_Java基于socket实现的客户端和服务端通信功能完整实例

    本文实例讲述了Java基于socket实现的客户端和服务端通信功能.分享给大家供大家参考,具体如下: 以下代码参考马士兵的聊天项目,先运行ChatServer.java实现端口监听,然后再运行Chat ...

  3. python实现淘宝客服自动回复语_Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例...

    本文实例讲述了Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能.分享给大家供大家参考,具体如下: [吐槽] 网上的代码害死人,看着都写的言之凿凿,可运行就是有问题. 有些 ...

  4. 基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互

    基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互 一.前言 1.Java服务端程序代码的项目名为TcpSocketServerOfJava,包名为com.exam ...

  5. 基于 azerothcore-wotlk 构建docker wow 335服务端

    介绍 基于 azerothcore-wotlk 构建docker wow 335服务端 软件架构 Ubuntu 20.04 安装教程 1.下载 docker 环境 更换国内apt源,自行选择 清华源 ...

  6. 基于html的数据库,基于HTML5的本地数据库与服务端数据库的协同研究

    摘要: Web应用特别是移动Web应用已深入到人们生活.工作中,成为不可缺失的一部分.源于跨操作系统平台实现的便捷,当前基于智能手机.平板和手持移动终端的浏览器前端应用在快速增长.然而在间歇的网络可用 ...

  7. 【学习笔记】在windows下进行基于TCP的本地客户端和服务端socket通信

    文章目录 socket介绍 java中使用socket 基于tcp的socket通信 使用ServerSocket类创建一个web服务器:(java) windows下的基于tcp的socket编程( ...

  8. MAC电脑安装Python3下的Jupyter Notebook

    安装好Brew后 安装Python3 在brew下查找python3 $ brew search python3 ==> Formulae boost-python3 python3 ✔ pyt ...

  9. Nginx测试实验--rest服务端负载均衡应用

    2019独角兽企业重金招聘Python工程师标准>>> Nginx版本如何查看(windows系统下) 使用命令 nginx -v 试验准备--试验环境为单位局域网 0.准备两个服务 ...

最新文章

  1. c语言把一个数组赋值给另一个数组_如何把一个固定数组的值传递给另外一个数组...
  2. 王达:影响100万网管员的“网管员”『英雄故事』
  3. 5分钟上手写ECharts的第一个图表
  4. opencv python cv2.imdecode()函数报错 :TypeError: Expected cv::UMat for argument 'buf'
  5. MySQL数据库引擎快速指导
  6. 声音分析+android,声音分析仪Sound Analyzer-声音分析仪 Sound Analyzer2.1安卓版-蜻蜓手游网...
  7. 架构师修练 I - 超级代码控
  8. python filter函数_python基础——filter函数
  9. 使用Tesseract (OCR)实现简单的验证码识别(C#)+窗体淡入淡出效果
  10. python单元测试断言,在单个Python单元测试中如何处理多个断言?
  11. idea 热部署无效
  12. oracle时分秒修改值_Oracle SQL Developer显示的时间包含时分秒的设置方法
  13. top10开源docker开发工具
  14. 那位 13 岁就当上老板的开发者是如何炼成的?
  15. 高斯滤波详解 附python和matlab高斯滤波代码
  16. 基于c语言图书管理系统设计与开发,基于C语言图书管理系统设计与实现.doc
  17. 【STM32基础】第四篇、控制PWM占空比
  18. 关于如何卸载联想电脑管家及Lenovo.Imcontroller相关问题
  19. 网络编程学习路线计划
  20. 产品研发:了解每个项目成员的诉求,激发他们的斗志

热门文章

  1. QPS过万,redis大量连接超时怎么解决?
  2. 讲解 Redis 的一篇深度好文!
  3. 高并发之——创建线程池居然有这么多方式...
  4. 今天,进程告诉我线程它它它它不想活了
  5. 图文剖析:单点登录常见解决方案实现原理
  6. 史上最全的高可用服务系统线上问题排查工具单(一)
  7. 万字长文详解Docker架构原理及功能使用!
  8. 一文看懂最近70年的人工智能简史!中国已经领先全球!
  9. 记一次有惊无险的 JVM 优化经历!
  10. 锅都不敢背,凭什么让大家跟着你干?