在VPS上安装jupyter notebook记录

发布于 2019-09-11  17 次阅读


安装Anaconda3

wget https://repo.continuum.io/archive/复制对应系统的链接

bash 对应系统的文件名

#加入环境变量
1.输入代码
sudo vi /etc/profile
打开文件并在末尾添加如下:
PATH=$PATH:/home/oxmosama/anaconda3/bin
export PATH

保存退出
:wq
2.在命令行输入:source /etc/profile
3.命令行输入:echo $PATH
或执行点命令 ./profile 使其修改生效。

#安装插件自动补全代码
pip install jupyter_contrib_nbextensions

jupyter contrib nbextension install --user --skip-running-check

生成Notebook密码:

ipython
>>> from notebook.auth import passwd
>>> passwd()

控制台会提示输入密码两次,并生成一段sha1加密码,请复制并保留它,稍后会用到,

Enter password:
Verify password:
'sha1:a52.....'

生成jupyter配置

jupyter notebook --generate-config

创建oxmo目录(任意取名)

mkdir ~/oxmo

编辑jupyter配置

vi /home/oxmosama/.jupyter/jupyter_notebook_config.py

# 允许通过任意绑定服务器的ip访问
c.NotebookApp.ip = '*'
# 用于访问的端口
c.NotebookApp.port = 8527
# 不自动打开浏览器
c.NotebookApp.open_browser = False
# 设置登录密码
c.NotebookApp.password = 'sha1:71f8e51647b7:2462b8f3533c737fe74833f3ac470ecf75a22d9f'
# 设置默认目录
c.NotebookApp.notebook_dir = u'/home/oxmosama/oxmo/'
c.NotebookApp.base_url = '/'

#开启jupyter服务
nohup jupyter notebook > jupyter.log 2>&1 &

#编辑开机自动启动配置
sudo vim /etc/systemd/system/jupyter.service

[Unit]
Description=Jupyter Notebook

[Service]
Type=simple
ExecStart=/home/oxmosama/anaconda3/bin/jupyter-notebook --config=/home/oxmosama/.jupyter/jupyter_notebook_config.py
WorkingDirectory=/home/oxmosama/oxmo
Restart=always
RestartSec=10
#KillMode=mixed
User=oxmosama
Group=oxmosama

[Install]
WantedBy=multi-user.target

#加入开机自动启动
sudo systemctl enable jupyter.service
#开启服务
sudo systemctl start jupyter.service
#刷新服务
sudo systemctl daemon-reload

开放 jupyter 到公网

安装 nginx

sudo apt install nginx

安装好够就需要在 nginx 设置 jupyter的 websocket了,设置方法分 需要域名 和 不需要域名 两种操作方式,我主要讲需要域名 的操作方式, 不需要域名 的操作方式我也讲解一下。

先讲解 不需要 域名的方式

/etc/nginx/conf.d/ 目录新建 jupyter.conf 文件,并添加以下内容:

sudo vim /etc/nginx/conf.d/jupyter.conf

server {
    listen 3000;

    access_log /var/log/nginx/jupyter.access.log;
    error_log /var/log/nginx/jupyter.error.log;

    charset utf-8;

    location / {
        proxy_hide_header    X-Powered-By;

        proxy_redirect off;
        proxy_pass http://localhost:8888; 
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
    }
}

刷新 nginx 配置

sudo nginx -s reload

然后我们 sudo - su jupyter 切换到 刚才新建的 jupyter 用户 运行 jupyter notebook 。然后终端会打印一大段信息,找到 类似这样的网址 http://localhost:8888/?token=8afb2489dbd872fd7d59cv640bdc60bakkce610b1d2c5ecb 复制进浏览器,并且改成你的 ip:3000 类似于这样 http//:3000/?token=8afb2489dbd872fd7d59cv640bdc60bakkce610b1d2c5ecb 就可以看看到实际运行效果了。
看完实际效果后,回到终端,按 CTRL + c 键结束进程,按 CTRL + d 键 退出 jupyter 用户。如果你不打算使用域名的话,可以跳过,接下来介绍域名这一段。

需要域名的方式

使用域名有诸多好处,比如不浪费标准端口,绿锁 SSL等。我个人更建议使用域名。
如果没有域名的话建议去注册一个,或者问朋友要一个 二级 或者 三级 域名。当前网上也有免费的域名注册商,不过我个人强烈不建议使用免费域名。
以下的列子 我会使用 jupyter.niconiconi.fun 这个 三级域名,请自行替换为你的二级或三级域名。

/etc/nginx/conf.d/ 目录新建 jupyter.conf 文件,并添加以下内容:

sudo vim /etc/nginx/conf.d/jupyter.conf

server {
    listen 80;
    server_name jupyter.oxmo.cn;# 改成你的域名

    access_log /var/log/nginx/jupyter.access.log;
    error_log /var/log/nginx/jupyter.error.log;

    charset utf-8;

    location / {
        proxy_hide_header X-Powered-By;

        proxy_redirect off;
        proxy_pass http://localhost:8527;
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
    }
}

刷新 nginx 配置

sudo nginx -s reload

然后我们 sudo - su jupyter 切换到 刚才新建的 jupyter 用户 运行 jupyter notebook 。然后
终端会打印一大段信息,找到 类似这样的网址 http://localhost:8888/?token=8afb2489dbd872fd7d59cv640bdc60bakkce610b1d2c5ecb 复制进浏览器,并且改成 你的 网址 类似于这样:http://jupyter.niconiconi.fun/?token=8afb2489dbd872fd7d59cv640bdc60bakkce610b1d2c5ecb 就可以看看到实际运行效果了。
看完实际效果后,回到终端,按 CTRL + c 键结束进程,按 CTRL + d 键 退出 jupyter用户。

因为使用 http 在公网传输,信息有被人截获的风险,所以我建议设置一下 ssl。

使用 Let’s Encrypt 设置ssl

首先需要把 域名解析到 本台 vps 的 ip 上,这一步非常重要,解析方法我就不多概括了。

安装 certbot

sudo apt install certbot

/etc/nginx/conf.d/jupyter.conf 的信息改为

sudo vim /etc/nginx/conf.d/jupyter.conf

server {
    listen 80;
    server_name jupyter.oxmo.cn;# 改成你的域名
    access_log /var/log/nginx/jupyter.access.log;
    error_log /var/log/nginx/jupyter.error.log;

    charset utf-8;
    root /var/www/jupyter;
}

新建申请证书需要的目录

sudo mkdir /var/www/jupyter

重启 nginx

sudo systemctl restart nginx

运行 certbot 申请证书

sudo certbot certonly

以下是设置时需要填的信息,我会把重要的地方标出来

root@219c9645d534:/# certbot certonly
Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1: Place files in webroot directory (webroot)
2: Spin up a temporary webserver (standalone)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
#选择第一种验证方式
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):[[email protected]](https://niconiconi.fun/cdn-cgi/l/email-protection)
#这里填你的邮箱
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. 
You mustagree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A
#是否同意用户条款,选 A 同意
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c' to cancel):jupyter.niconiconi.fun
# 这里输入你的域名
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for jupyter.niconiconi.fun

Select the webroot for jupyter.niconiconi.fun:
-------------------------------------------------------------------------------
1: Enter a new webroot
-------------------------------------------------------------------------------
Press 1 [enter] to confirm the selection (press 'c' to cancel): 1
# 选 1
Input the webroot for test.com: (Enter 'c' to cancel):/var/www/jupyter
#这里是验证时需要的网站目录
#到这里需要输入的就全部完成了,接下来回车执行

不出意外证书就申请好了

接下来 配置 nginx 以支持 ssl

/etc/nginx/conf.d/jupyter.conf 修改为

sudo vim /etc/nginx/conf.d/jupyter.conf

server {
    listen 80;
    server_name jupyter.oxmo.cn;

    rewrite / https://$host$uri permanent;

    access_log /var/log/nginx/jupyter.access.log;
    error_log /var/log/nginx/jupyter.error.log;

    charset utf-8;

    root /var/www/jupyter;# 创建的文件夹
}

server {
    listen 443;
    server_name jupyter.oxmo.cn;

    access_log /var/log/nginx/jupyter.access.log;
    error_log /var/log/nginx/jupyter.error.log;

    charset utf-8;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/jupyter.oxmo.cn/fullchain.pem;# 改成你的域名
    ssl_certificate_key /etc/letsencrypt/live/jupyter.oxmo.cn/privkey.pem;# 改成你的域名
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_protocols TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES256;

    location / {
        proxy_hide_header X-Powered-By;

        proxy_redirect off;
        proxy_pass http://localhost:8527;# 改成你设置的端口
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
    }
}

重启 nginx

sudo systemctl restart nginx

现在 web 相关的就设置完了


人間になるために生まれて、私はとても悲しいです