本地浏览器打开远程服务器上的Jupyter Notebook

实验环境及需求:远程服务器配置了 Jupyter Notebook,本地电脑没有相关的环境,想要在服务器端启动 Jupyter Notebook,然后直接从本地浏览器打开进行操作。

一、配置过程

1. 登录远程服务器

2. 生成配置文件

>> jupyter notebook --generate-config

执行上面的命令,会生成 ~/.jupyter/jupyter_notebook_config.py 配置文件

3. 生成 Jupyter 密码

>> python

from notebook.auth import passwd
passwd()

首先输入 python 命令进入 python 环境,然后输入上面的代码设置密码。输入密码之后会再次进行确认,完毕后输生成的密钥。这里提前将密钥全部复制下来(包括单引号)备用。

Enter password:
Verify password:
'argon2:$argon2id$v=1$m=1024,t=0,p=0$RUJxA2Za9'  # 生成的密钥

4. 修改配置文件

>> vim ~/.jupyter/jupyter_notebook_config.py

使用 vim 打开配置文件,看到配置文件里全是被注释的内容,可以找到下面修改内容的对应行,取消注释后进行修改。但是我为了方便,就直接在配置文件开头添加下面的内容,两种做法效果是一样的。

c.NotebookApp.ip = '*' 
c.NotebookApp.password = u'argon2:$argon2id$v=1$m=1024,t=0,p=0$RUJxA2Za9'  # 这里u之后就是第3步生成的密钥
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8891   # Jupyter端口,可以自定义
c.NotebookApp.allow_remote_access = True

5. 启动 Jupyter

jupyter notebook

启动 Jupyter 之后我们可以在 terminal 里看到运行情况和运行日志。

6. 打开本地浏览器,运行 Jupyter

IP:Port

在浏览器地址栏输入 服务器IP:Jupyter端口号,这里的端口号就是在第 4 步配置文件 c.NotebookApp.port 指定的端口。

然后就可以正常访问啦~

二、其他需求

后台运行Jupyter

1. 后台运行 Jupyter

使用命令 jupyter notebook 启动 Jupyter,需要保持本地 terminal 一直打开,如果关闭 terminal 会切断本地和服务器的连接。如果我们觉得没必要在 terminal 里一直查看 Jupyter 运行情况和运行日志,可以通过后台运行 Jupyter 的方式达成目的。通过后台运行,即使关闭 terminal 或者 ssh 断开连接,本地也能通过 IP:Port 正常访问服务器端的 Jupyter。

方法:使用 nohup 命令后台运行 Jupyter

nohup jupyter notebook &

nohup 的用途是忽略 hangup 信号运行程序,程序的输出默认重定向到当前文件夹下的 nohup.out 文件中,如果要查看 Jupyter 的日志文件,可以用 vim 打开 nohup.out 文件进行查看。通过 nohup COMMAND > FILE 可以修改输出文件定位到指定的文件 FILE 中。& 的作用是在后台运行程序

输入以上命令后,终端有如下输出:

在这里插入图片描述

[1] 后面的 898214 就是 Jupyter 运行的 PID,后期可以通过这个 PID 关闭进程。‘nohup.out’ 是运行日志文件,保存在当前目录下。

2. 关闭后台运行的 Jupyter

要关闭通过 nohup 启动的 Jupyter,可以通过 ps -aux | grep jupyter 命令找到正在运行的 Jupyter 的 PID,然后通过 kill -9 pid 的方式关闭运行即可。

ps -aux | grep jupyter
kill -9 623370 

下面红框内的数字即进程的 PID:
在这里插入图片描述

端口映射

有些服务器可能只开放一个对外的端口,即访问服务器的端口。这样直接在本地访问仍然会显示无法连接,可以通过端口映射来解决。

本地连接服务器时,通过如下命令:

ssh -L 8891:localhost:8891 UserName@IP -p ServerPort

-L 后面是 Jupyter 的端口号(这里是我设置的端口 8891), UserName 是登录服务器的用户名,IP 是服务器 IP,ServerPort 是服务器端口号。

这句命令表示把本地的端口 8891 映射到远程服务器的端口 8891 上,这样便可以通过本地的 8891 端口来访问远程主机了。

猜你喜欢

转载自blog.csdn.net/qq_31347869/article/details/127899203