【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)/ 隧道協議概要
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章