欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Linux】Ubuntu 服务器搭建 Jupyter Notebook 云服务 并 开启端口实现远程访问

程序员文章站 2022-05-28 09:42:17
...

一、安装 Jupyter Notebook

pip install jupyter

二、设置密码生成**

打开 python 输入

from IPython.lib import passwd
passwd()

如下图所示,输入并确认密码后会生成一段**,将密码和**都记录下来。

密码用于登录 Jupyter,**用于修改配置文件

【Linux】Ubuntu 服务器搭建 Jupyter Notebook 云服务 并 开启端口实现远程访问

三、生成 Jupyter Notebook 配置文件

jupyter notebook --generate-config

四、修改配置文件

vim ~/.jupyter/jupyter_notebook_config.py

配置文件中添加如下内容:

c.NotebookApp.ip='*' #所有 IP 都能访问,若想只在特定 IP 访问,输入 IP
c.NotebookApp.password = u'sha1:1a******698ce3' #刚才那个生成的**
c.NotebookApp.open_browser = False # 禁止自动打开浏览器,因为我们并不想在服务器上直接打开 Jupyter
c.NotebookApp.port = 4096 # 随便指定一个端口,从这个端口进入使用 Jupyter
# 以下内容可选
c.IPKernelApp.pylab = 'inline' 
# 预载入 相当于 %pylab inline 所有matplotlib的图像都通过inline的方式显示
c.NotebookApp.notebook_dir = '/root/jupyter_projects' 
# 这里是设置 Jupyter 的根目录,若不设置将默认 root 的根目录,不安全
c.NotebookApp.allow_root = True 
# 使用 root 权限,为了安全,Jupyter 默认不允许以 root 权限启动 Jupyter 

PS:

  1. **必须更换。
  2. 端口不能设置成一些特殊端口,否则 Chrome 无法访问,下面 七、遇到的问题 中会列出不能设置的端口。

五、启动 Jupyter Notebook

1. 前台运行

jupyter notebook

2. 后台运行

后台启动 Jupyter 并保持运行,使用 nohup 和 & 命令。

nohup jupyter notebook &
exit

使用 exit 是因为:有可能在当前账户非正常退出或者结束的时候,命令还是自己结束了。所以在使用 nohup 命令后台运行命令之后,需要使用 exit 正常退出当前账户,这样才能保证命令一直在后台运行。

  • & 命令: 当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上 & 实现后台运行。例如:sh test.sh &
  • nohup 命令: nohup 可以在退出帐户之后继续运行相应的进程。nohup 就是不挂起的意思(no hang up)
  • 如果使用 nohup 命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为 nohup.out 的文件中,除非另外指定了输出文件:nohup command > myout.file 2>&1 &
  • 2>&1解析:
  1. command>out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。
  2. 2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个&, 是让该命令在后台执行。
  3. 试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出. from: linux后台执行命令:&和nohup

3. 退出

  1. 前台运行只需 ctrl + C 即可
  2. 后台运行
ps -u root # 显示 root 用户进程信息
# 找到 Jupyter 的 PID number
kill pidnum # 杀死它
  • 查看进程号有两个命令可以用,jobs 和 ps,区别是 jobs 用于查看当前终端后台运行的任务,换了终端就看不到了。而 ps 命令用于查看瞬间进程的动态,可以看到别的终端运行的后台进程。
  • jobs 命令: 查看当前有多少在后台运行的命令。
    jobs -l 选项可显示当前终端所有任务的 PID,jobs的状态可以是running,stopped,Terminated。+ 号表示当前任务,- 号表示后一个任务。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。
  • ps 命令: 用于显示当前进程 (process) 的状态。
    ps -aux 显示所有包含其他使用者的行程。ps -u root 显示 root 用户进程信息。ps -ef 显示所有命令,连带命令行。
  • kill命令: 用于删除执行中的程序或工作。彻底杀死进程 kill -9 pidnum。强制杀死进程 kill -KILL pidnum。

六、远程访问

打开浏览器输入 —— 服务器IP:之前配置的端口号

http://xx.xx.xx.xx:4096

七、遇到的问题

1. 无法访问此网站 ERR_CONNECTION_REFUSED

原因: 是服务器防火墙设置的问题,配置中的端口没有开放。
解决: 有两种方法。

  1. 在本地建立一个ssh通道,本地转发,将远程端口4096映射到一个本地端口8889

在本地终端中输入

ssh -L 8889:127.0.0.1:4096 [email protected]_of_remote

ssh 本地转发通过参数 -L 指定,格式:
ssh -L [本地主机:]本地主机端口:远程主机:远程主机端口 ssh待登录主机
当成功执行上面的命令之后,访问本地的 8889 端口,就等同于访问远程主机的 4096 端口。但和直接访问有着本质的区别:这次是通过登录主机来安全转发数据的,没有人知道你和远程主机之间传输了何种数据。就算你不能和远程主机建立连接(而登录主机能访问),那就能突破(绕过)(防火墙的)限制。from: SSH的三种端口转发(Port forwarding)/ 隧道协议概要

  1. 开放配置指定的端口

这里开放了 4096 端口

iptables -A INPUT -p tcp --dport 4096 -j ACCEPT
service iptables save # 保存设置

2. 无法访问此网站 ERR_UNSAFE_PORT

原因: 我之前配置使用的是 6666 端口。这是 Chrome 的“问题”。ERR_UNSAFE_PORT,顾名思义就是“非安全端口” ,「6666」看上去挺酷的,但却是 Google Chrome 默认的非安全端口列表。
解决: 重新 build chrome 虽然可以解决问题,但比较麻烦。建议尽量避免以下端口。

非安全端口列表 from:坑嗲坑娘坑自己的「6666」端口(记一次网络故障排查)

1,    // tcpmux
7,    // echo
9,    // discard
11,   // systat
13,   // daytime
15,   // netstat
17,   // qotd
19,   // chargen
20,   // ftp data
21,   // ftp access
22,   // ssh
23,   // telnet
25,   // smtp
37,   // time
42,   // name
43,   // nicname
53,   // domain
77,   // priv-rjs
79,   // finger
87,   // ttylink
95,   // supdup
101,  // hostriame
102,  // iso-tsap
103,  // gppitnp
104,  // acr-nema
109,  // pop2
110,  // pop3
111,  // sunrpc
113,  // auth
115,  // sftp
117,  // uucp-path
119,  // nntp
123,  // NTP
135,  // loc-srv /epmap
139,  // netbios
143,  // imap2
179,  // BGP
389,  // ldap
465,  // smtp+ssl
512,  // print / exec
513,  // login
514,  // shell
515,  // printer
526,  // tempo
530,  // courier
531,  // chat
532,  // netnews
540,  // uucp
556,  // remotefs
563,  // nntp+ssl
587,  // stmp?
601,  // ??
636,  // ldap+ssl
993,  // ldap+ssl
995,  // pop3+ssl
2049, // nfs
3659, // apple-sasl / PasswordServer
4045, // lockd
6000, // X11
6665, // Alternate IRC [Apple addition]
6666, // Alternate IRC [Apple addition]
6667, // Standard IRC [Apple addition]
6668, // Alternate IRC [Apple addition]
6669, // Alternate IRC [Apple addition]

八、参考链接

搭建时参考:

  1. Jupyter notebook远程访问服务器

解决问题一时参考:

  1. 通过SSH远程使用jupyter notebook
  2. 搭建Jupyter Notebook远程云服务器
  3. Linux 如何开放端口和关闭端口

解决问题二时参考:

  1. 坑嗲坑娘坑自己的「6666」端口(记一次网络故障排查)

博客内容参考:

  1. 服务器 配置 Jupyter notebook 远程访问 (Ubuntu 14.04)
  2. linux后台执行命令:&和nohup
  3. Linux 下后台运行程序,查看和关闭后台运行程序
  4. SSH的三种端口转发(Port forwarding)/ 隧道协议概要
相关标签: Linux