文章目录
- 一、配置过程
- 二、其他需求
- 后台运行Jupyter
- 端口映射
实验环境及需求:远程服务器配置了 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 端口来访问远程主机了。