摘自 原文 作者本人
1 Jupyter notebook简介
Jupyter notebook是基于网页的python交互式开发环境,文件浏览器功能并不是其主要功能,但由于笔者在当时尚不了解其他Web文件管理系统,且有python开发的需要,因此选择在服务器上安装jupyter notebook服务。
最好在Anaconda环境下安装和运行jupyter notebook。可前往清华大学开源镜像站下载最新版本的Anaconda安装包。
2 Jupyter notebook服务的启动
若要运行jupyter notebook,需要先在终端中切换到conda环境,然后输入jupyter notebook
命令即可,但此时jupyter notebook并没有向客户端开放,我们无法通过浏览器访问它,因此要更改jupyter notebook的配置文件(~/.jupyter/jupyter_notebook_config.py
,~
为用户家目录。如果没有找到该文件,或者之前没有进行配置,可通过jupyter notebook --generate-config
命令创建)
将如下字段取消注释后更改:
c.NotebookApp.ip = '*' # 设置访问notebook的ip来源,*表示所有,即服务对所有来源开放
c.NotebookApp.password = u'sha1:xxxx' # 填写密码(见下文)
c.NotebookApp.open_browser = False # 禁止notebook启动时自动打开浏览器(无必要打开且多数linux服务器无图形界面)
c.NotebookApp.port = 8888 # 指定服务端口,默认是8888。e
密码通过在交互式python环境下运行如下两行python代码得到:
from notebook.auth import passwd
passwd()
输入密码并确认后得到密码的sha1值,将其填入c.NotebookApp.password中即可。
>>> 'sha1:xxxx'
3 将jupyter服务进行HTTPS加密
由于要使用域名访问服务,因此须在jupyter notebook的配置中将c.NotebookApp.allow_origin
的值改为*
以允许由域名访问(若要求严谨,可填写notebook.yourdomain.com
)。否则会报Blocking Cross Origin API request for /api/sessions.
错误。
另外,jupyter notebook需要nginx的websocket支持(否则会报错误Replacing stale connection
),因此修改nginx配置文件如下。
server {
listen 443 ssl;
server_name notebook.yourdomain.com;
charset utf-8;
# 大文件传输支持
client_max_body_size 8192M;
ssl_certificate yourdomain.com/fullchain.pem;
ssl_certificate_key yourdomain.com/privkey.pem;
ssl_trusted_certificate yourdomain.com/chain.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
server_tokens off;
fastcgi_param HTTPS on;
fastcgi_param HTTP_SCHEME https;
# 反向代理及websocket配置
location / {
proxy_pass http://127.0.0.1:8888;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}
对于非root用户运行的jupyter notebook,需要有访问/usr/share
的权限,因此执行命令sudo chmod 777 share/
,否则会报500错误:
PermissionError: [Errno 13] Permission denied: '/usr/share/jupyter/nbconvert/templates/conf.json' -R
以上步骤完成后,使用非root账号,在conda环境下执行
nohup jupyter notebook &
即可让jupyter notebook在后台运行,并可通过https://notebook.yourdomain.com/
使用它了。
-
若提示
nohup: 打开'/home/用户名/nohup.out' 失败: 权限不够
,则将命令修改为nohup jupyter notebook >/dev/null 2>&1 &
(将nohup的日志文件和错误文件重定向到/dev/null
,详见此文) -
若希望更改jupyter notebook的根目录路径(如修改为
/var/www/notebook/
),则可将命令进一步修改为nohup jupyter notebook /var/www/notebook/ >/dev/null 2>&1 &
也可通过在jupyter_notebook_config.py
中修改c.NotebookApp.base_url = '/var/www/notebook/'
,这样就不需在运行命令时指定根目录了。