工作緣由:jupyter notebook 只能在局域網內部使用,假如你的工作計算機不在局域網內部就不能實現訪問。因此需要添加一種內網穿透的工具來幫助我們使用任何能聯網的計算機來訪問notebook。
實質:服務器靜態IP與內網動態IP之間建立某種協議,當計算機訪問外網靜態IP的某個端口時,外網服務器會將內容轉發給內網計算機的相應端口,內網計算機相應端口要發送內容的時候也會經過外網靜態IP,所以內網穿透實際上是一種數據轉發工具(工具人實錘)。
首先你需要一個有外網IP的服務器,我這里是用的阿里雲的輕量級服務器,然后使用內網穿透frp工具。
這個工具分為客戶端和服務端,在具有外網IP的服務器上運行服務端,在具有內網IP的筆記本上運行客戶端,這樣就能通過外網訪問筆記本上的終端了。
具體操作如下:
服務器端
$ vim frps.ini % 此文件是服務端的配置文件
[common]
bind_port = 7000 % 訪問端口
vhost_http_port = 8888 % 配置notebook的端口
% 運行服務端程序
$ ./frps -c ./frps.ini
客戶端
$ vim frps.ini % 此文件是客戶端的配置文件
[common]
server_addr = 101.200.151.XXX % 你的服務端IP地址
server_port = 7000 % 服務端的端口
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000 % ssh 的時候需要設置的端口
[jupyter]
type = http
local_port = 8888 % jupiter訪問時的端口
custom_domains = 101.200.151.XXX % 你的服務端IP地址
$ ./frpc -c ./frpc.ini % 運行客戶端
此時,可以通過外網ssh到筆記本,通過remote端口訪問服務器,會將這個端口的接受數據映射到客戶端去訪問。
$ ssh -p 6000 user&101.200.151.XXX
% 其中,6000是remote端口,user是筆記本的用戶名,101.200.151.XXX是服務器外網IP地址
jupiter操作,指定local_port,和配置文件
$ jupyter notebook --config=/home/user/.ipython/profile_myserver/ipython_notebook_config.py --port 8888
注意:輕量級服務器的防火牆一定要把相應的端口打開,不然怎么都訪問不了的,我這里打開了7000和8888這兩個端口。
