在服務器上搭建Jupyter Notebook
- acmore
- 2018.11.2
1. Jupyter Notebook
1.1 安裝Jupyter
假定工作目錄爲
/home/jupyter
$ virtualenv venv -p python3
$ source venv/bin/activate
$ (venv) pip install jupyter
1.2 配置Jupyter
安裝Jupyter之後,在~/.jupyter
下查看是否存在jupyter_notebook_config.py
文件,如果沒有,就使用
$ (venv) jupyter notebook --generate-config
命令生成配置文件,Jupyter的具體配置內容參見Jupyter Notebook的配置選項,下邊的幾個選項是爲部署在服務器上可能要用到的(下邊c.NotebookAPP.password
的設置方法見Jupyter Notebook添加密碼)
# Nginx訪問時會出現跨域訪問,需要在這裏允許
c.NotebookApp.allow_origin = '*'
# 禁止隨意修改密碼
c.NotebookApp.allow_password_change = False
# 是否允許遠程訪問
c.NotebookApp.allow_remote_access = True
# 訪問URL(自定義)
c.NotebookApp.base_url = '/'
# 訪問之後跳轉的URL(自定義)
c.NotebookApp.default_url = '/tree'
# Jupyter Notebook Server監聽的IP
c.NotebookApp.ip = '127.0.0.1'
# Jupyter Notebook的工作目錄,用於限制訪問位置
c.NotebookApp.notebook_dir = 'data/'
# 啓動Jupyter Notebook之後是否打開瀏覽器(服務器上此選項應該關閉)
c.NotebookApp.open_browser = False
# 客戶端打開Jupyter Notebook的密碼哈希值
c.NotebookApp.password = 'sha1:******'
# Jupyter Notebook Server監聽的端口,因爲Nginx要用8888,所以把原來的端口改掉
c.NotebookApp.port = 8887
2. 集成Nginx
Jupyter Notebook使用tornado
作爲服務器和Web框架,如果想要獲取更高的性能以及靈活性,可以使用Nginx
作爲代理服務器。在/etc/nginx/conf.d/jupyter.conf
中添加以下內容:
server {
listen 8888 default_server;
server_name rucer.cn;
charset utf-8;
client_max_body_size 75M;
location / {
proxy_pass http://127.0.0.1:8887/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
# 因爲用到了Websocket協議,所以下邊的配置是必須的
proxy_set_header Connection "upgrade";
proxy_redirect off;
}
}
配置完成之後,啓動Jupyter Notebook即可遠程訪問
# 直接運行,測試使用
$ (venv) jupyter notebook
# 後臺運行
$ (venv) nohup jupyter notebook &