Jupyter Notebook(原 iPyhton Notebook),是一个基于 Web 端的交互式计算环境 ,支持 40 多种语言。Jupyter Notebook 文档是一个 JSON 文档,遵循版本化模式,包含一个有序的输入/输出单元格列表,这些单元格可以包含代码、文本(使用Markdown语言)、数学、图表和富媒体1 。一举击中众多极客需求,界面交互也十分友好。

碰巧笔者我正想练习 Python,这里介绍一下 Jupyter Notebook 安装和配置的方法。

安装

首先你要有一台可以公网访问的 VPS ,具体就不推荐了,大家根据自己需求选取。

Anaconda,这是一个基于Python的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库。我们可以选择直接安装 Anaconda 来跳过安装许多模块、依赖的步骤。

我使用的是 Miniconda 相当于一个精简版的 Anaconda。

1
2
3
4
5
6
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh

bash Miniconda3-latest-Linux-x86_64.sh

conda install ipython
conda install jupyter

至此 Jupiter Notebook 以及大部分可能用到的依赖已经安装完毕。

配置

配置文件

执行命令,在 ~./jupyter 创建一个 jupyter_notebook_config.py 的配置文件:

1
jupyter notebook --generate-config

在修改配置文件之前,我们先设置一个密码,由于我们后面是要将 IDE 开放到公网方便访问的。

1
python -c "import IPython;print(IPython.lib.passwd())"

然后输入你想设置的密码。将最后那段 sha1 开头的文本复制下来,这就是你的密码经过散列加密后的内容。

然后打开配置文件,修改:

1
c.NotebookApp.password = 'sha1:xxx' # 刚刚复制的那一段

还有几处也需要修改:

1
2
3
4
5
c.NotebookApp.ip = '127.0.0.1'
c.NotebookApp.allow_origin = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 35767 # 自己设置一个未被占用的端口
c.NotebookApp.notebook_dir = '/root/code' # 默认 Notebook 目录

如果你是使用 root 用户执行的话,还要打开:

1
c.NotebookApp.allow_root = True

因为官方是不建议使用 root 用户执行的。

然后就可以执行 jupyter notebook 尝试打开服务,但此时还是不能公网访问。

Nginx 端口映射

Nginx 是异步框架的网页服务器,高效、并发能力强。我默认你已经安装好了 Nginx ,如果不是可以参考 Nginx 官网 或者 lnmp.org 一键安装包。

接着,我们打开 Nginx 配置文件(一般在 /etc/nginx/nginx.conf ,如果你也是使用宝塔的快速安装,那么会在 /www/server/nginx/conf/nginx.conf )。

然后判断域名,并将相应域名转发到前面设置的 Jupyter 端口即可,可以参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
upstream jupyter {
server 127.0.0.1:35767;
}
server {
listen 80;
listen 443 ssl http2;
server_name your.domain.com;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/your.domain.com;

# SSL & https start

if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate /path/to/ssl_certificate/pem;
ssl_certificate_key /path/to/ssl_certificate_key/key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

# SSL & https ends

error_page 497 https://$host$request_uri;

include /www/server/panel/vhost/rewrite/your.domain.com.conf;

# Nginx 反向代理 redir 35767
location / {
proxy_pass http://jupyter;
proxy_set_header Host $host;
}

#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}

location ~ /api/kernels/ {
proxy_pass http://jupyter;
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://jupyter;
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;
}
access_log /www/wwwlogs/your.domain.com.log;
error_log /www/wwwlogs/your.domain.com.error.log;
}

由于我使用了 SSL 证书,所以开启了 https 。当然你也可以将其删去,并停止监听 443 端口。

在此运行 Jupiter Notebook ,输入域名不出意料就能看到输入密码的界面了。

后台运行

如果想随时随地访问,建议让 Jupyter Notebook 一直留在后台。

首先运行命令创建日志文件,好让我们可以事后检查:

1
touch ~/.jupyter/jupyter.log

然后执行:

1
nohup jupyter notebook > ~/.jupyter/jupyter.log 2>&1 &

其中 nohup 表示 no hang up ,就是不挂起,默默在后台运行,并将输出重载到日志文件中。

如果要终止,只能 ps -A 检查所有进程 pid,然后 kill {pid} 终止指定进程。


1. https://zh.wikipedia.org/wiki/Nginx

 Comments