作为一个学大数据的pythoner,
jupyter-notebook
可谓是神器啊~可以实时交互并且把代码块的结果保存在页面上……(省略n个夸奖词)
而且把它搭建在服务器中一直开着的话可以走到哪用到哪,只要有浏览器就可以继续写代码,于是就有了这次的踩坑记录~
掉坑前
我有一台腾讯云的学生机,但是内存太小,所以被我用做内网穿透的服务器(使用的是frp),之前很喜欢捣鼓树莓派,手头有三个3B+和一个4B 4G内存版的,就像拿这个4B开刀,通过内网穿透技术把服务暴露在公网上,这样就可以用自己的域名来使用自己搭建的各种服务,想想都爽~
搭建jupyter-nptebook
环境的步骤这里就不详细讲了,百度上多的是,如果有时间可能会写,frp的使用以后也会写,到时候链接会补充在这里~
搭建完环境,通过路由器局域网访问都没有问题,好~继续把默认的8888端口通过frp暴露在我已经开好的二级域名jupyter.lvpeng990324.cn
下,测试能登陆打开网页,突然开心,但是当我新建一个notebook后我发现它一直连接不到内核😨,oh gg,掉坑里了~
查找问题
作为一个做过python web开发的人,第一意识想到了类似于前后端分离的架构特点,会不会是这个开放的8888端口只是展示页面的,页面与后台服务交互会用到其他端口呢?
果断F12大法好,打开浏览器的调试页面检查向服务器发送的请求,果然发现了问题:
检查向服务器请求记录我发现每次点这个Reconnect
的按钮右边就会多一个channels
请求记录,而且都是无响应,点开发现协议是ws
,哈?竟然是websocket
,难怪内网没问题,映射到外网就不行了,我知道的情况,frp只能把http
和https
协议映射到二级域名下,而这两种协议都不支持websocket
,所以这个请求会失败。
解决方法
很无奈,我现在还不知道怎么把
tcp
协议映射到二级域名下,谷歌搜了一圈也没找到,frp下提issue也还没理我😂
没办法,简单粗暴地把内网的8888端口映射到顶级域名下的某个端口吧,访问的时候没有那么优雅而已(lvpeng990324.cn:xxxx
),其他的也没啥,就是吧,作为一个强迫症感觉后边加端口号好low啊😂
没啥好办法了,如果看到的同学知道怎么把tcp端口映射到二级域名下请私信我救救这个被强迫症折磨的孩子叭~
网友评论