Jupyter notebook服务器的搭建及常见错误解决办法

文章目录

    • 1 Jupyter notebook简介
    • 2 Jupyter notebook服务的启动
    • 3 将jupyter服务进行HTTPS加密

原文链接 https://blog.jaspirit.cc/posts/69f0ff47/ 作者本人

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/',这样就不需在运行命令时指定根目录了。

你可能感兴趣的:(python,jupyter,nginx,python,tornado,大数据)