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

一、安装 Jupyter Notebook

pip install jupyter

二、设置密码生成密钥

打开 python 输入

from IPython.lib import passwd
passwd()

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

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

在这里插入图片描述

三、生成 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 
c.NotebookApp.enable_mathjax = True 
# 是否用mathjax,一种用于数学公式显示的工具

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 &
nohup jupyter notebook > /dev/null 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 username@address_of_remote

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

  1. 开放配置指定的端口

这里开放了 4096 端口

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

持久化 iptables

iptables-save只是暂时保存了端口的开放规则,如果关机或者重启,那么刚才添加的规则就会失效。
使用iptables-persistent可以对端口的开放规则进行持久化操作,使其永久保持有效。from linux/ubuntu系统下开放端口的办法

# 安装iptables-persistent
sudo apt-get install iptables-persistent
# 持久化规则
sudo netfilter-persistent save
sudo netfilter-persistent reload

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 如何开放端口和关闭端口
  4. linux/ubuntu系统下开放端口的办法

解决问题二时参考:

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

博客内容参考:

  1. 服务器 配置 Jupyter notebook 远程访问 (Ubuntu 14.04)
  2. linux后台执行命令:&和nohup
  3. Linux 下后台运行程序,查看和关闭后台运行程序
  4. SSH的三种端口转发(Port forwarding)/ 隧道协议概要
发布了76 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Krone_/article/details/103634016