搭建 Jupyter Notebook 服务器
来源:互联网 发布:java代码书写规范 编辑:程序博客网 时间:2024/06/08 14:09
服务器端 Jupyter Notebook 的安装
原材料:
- Linux 服务器;
- 已配置好的 Python 环境,且已经安装 jupyter
和 ipykernel
等必需的包。推荐使用 Anaconda。
打开 IPython,输入
from notebook.auth import passwdpasswd()
程序会要求输入密码并确认,随后会输出此密码对应的 hash(格式为 'type:salt:hashed-password'
),比如 'sha1:9305015210b4:32cad364c85e7f7a13b9efa137cfadf633cc62de'
。记下此 hash 字串,随后会用到。
查看用户目录 ~/.jupyter
路径下是否存在 jupyter_notebook_config.py
文件。若不存在,使用
jupyter notebook --generate-config
产生此文件。编辑此文件,写入
c.NotebookApp.ip = '*' # 允许访问此服务器的 IP,星号表示任意 IPc.NotebookApp.password = u'sha1:xxx:xxx' # 之前生成的密码 hash 字串c.NotebookApp.open_browser = False # 运行时不打开本机浏览器c.NotebookApp.port = 12035 # 使用的端口c.NotebookApp.enable_mathjax = True # 启用 MathJax
然后在某个路径下执行
jupyter notebook
即可启动 Jupyter Notebook,执行命令的路径成为 Jupyter Notebook 的默认根路径,使用 http://IP:PORT
的方式即可使用。
配置域名
这里我们使用 Nginx 作为服务器程序。按照上面的方法配置 Jupyter Notebook,如果仅仅对端口号进行代理转发,会出现 terminal 可以正常创建而 notebook 无法创建的情况。这是因为 Jupyter 会对 http 请求进行判断,所以反向代理时需要设置正确的信息。正确配置 nginx 反向代理的方式如下:
server { server_name DOMAIN IP_ADDRESS; # 服务器域名和 IP 地址 listen 80; location / { proxy_pass http://127.0.0.1:JUPYTER_PORT/; # JUPYTER_PORT 为 Jupyter 运行端口 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; proxy_set_header Connection "upgrade"; proxy_redirect off; }}
配置 SSL
使用 SSL 的好处是显而易见的,尤其是在目前免费的 SSL 证书没有任何申请门槛的情况下,几乎没有理由不为自己的站点实现全面的 https 化。给服务器端的 Jupyter Notebook 启用 SSL 的方法是,在 ~/.jupyter/jupyter_notebook_config.py
文件中增加两行
c.NotebookApp.certfile = '/path/to/ssl.pem' # SSL 证书文件的路径c.NotebookApp.keyfile = '/path/to/ssl.key' # SSL 密钥文件的路径
同时,如果配置了域名,则 Nginx 配置也应该增加 443 端口的监听
server { server_name DOMAIN IP_ADDRESS; # 服务器域名和 IP 地址 listen 80; location / { root /var/www/notebook_ssl; # 此路径下放置一个 index.html,将连接转移到 https } }server { server_name DOMAIN IP_ADDRESS; # 服务器域名和 IP 地址 listen 443; ssl on; ssl_certificate /path/to/ssl.pem; # SSL 证书文件的路径 ssl_certificate_key /path/to/ssl.key; # SSL 密钥文件的路径 ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { proxy_pass https://127.0.0.1:JUPYTER_PORT/; # JUPYTER_PORT 为 Jupyter 运行端口 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; proxy_set_header Connection "upgrade"; proxy_redirect off; } }
因为 Jupyter Notebook 开启 SSL 之后,http 连接就完全不能使用了,所以需要将所有的 http 连接请求重定向到 https。实现此目的的方法较多,这里借鉴了百度,使用一种简单高效的方法:利用 meta 的刷新作用,在 80 端口的根目录下放置一个 index.html
文件,内容是
<html><meta http-equiv="refresh" content="0;url=https://DOMAIN "></html>
添加 Jupyter Notebook 为系统服务
将 Jupyter Notebook 设定为系统服务并且开机自动启动,这里以 systemd
下的设定为例,创建文件 /etc/systemd/system/jupyter.service
文件,内容是
[Unit]Description=Jupyter NotebookAfter=network.target[Service]Type=simplePIDFile=/path/to/your/jupyter.pidExecStart=/path/to/your/jupyter-notebook --config=/home/your_username/.jupyter/jupyter_notebook_config.pyUser=your_usernameGroup=your_groupWorkingDirectory=/path/to/your/notebook/working_directory/Restart=alwaysRestartSec=10[Install]WantedBy=multi-user.target
保存文件之后执行
systemctl enable jupyter
来使此服务自启动。此外还需要在 ~/.jupyter/jupyter_notebook_config.py
文件中设定 Jupyter Notebook 运行时默认的根目录
c.NotebookApp.notebook_dir = '/path/to/your/notebook/working_directory' # 运行时默认的根目录
- 搭建 Jupyter Notebook 服务器
- Jupyter Notebook 服务器配置
- 在云服务器上搭建jupyter-notebook环境
- Jupyter Notebook远程服务器配置
- Jupyter notebook远程访问服务器
- CentOS7服务器安装Jupyter Notebook
- VPS搭建Tensorflow Jupyter Notebook 教程
- 阿里云ECS搭建Jupyter Notebook
- windows远程连接服务器中的jupyter notebook
- Windows远程访问服务器jupyter notebook
- 在服务器上配置jupyter notebook
- Ipython Notebook升级版Jupyter Notebook远程服务器配置
- jupyter notebook
- Jupyter Notebook
- Jupyter NoteBook
- Jupyter Notebook
- Jupyter notebook
- Jupyter Notebook
- Saltstack-01基本命令
- JDBC连接MSSQL2014
- redis存储结构
- 前端知识点
- C++ SDL学习之路 2nd —— 教程···竟然···全是英文!
- 搭建 Jupyter Notebook 服务器
- 看书吧
- Java EE应用分层模型
- 日常总结
- Android-Intent(意图)
- Android Context简单用法
- JQuery实现异步验证用户名是否存在
- 小结
- Cassandra简介