megrxu

家庭存储的互联网访问实现

Jul 4, 2017  #Code #Recording 

其实非常没有技术含量。但是为了凑个数,就起了一个这样的名字。

实际上做的是:

  1. Django 写的一个代码质量相当差的后端,能进行通过 Web 请求进行基本的文件操作,列出文件目录,下载预览等等。

  2. Vue.js + ElementUI 写的一个不太稳健的前端,实现一下上述功能。

  3. 将后端部署到瑞星微3288开发板上(上面烧录的系统是 Debian 9 ARM)。

  4. 在校园网内用 SSH 做内网穿透,连接到我的腾讯云公网服务器,把公网的某个端口的网络请求转发到运行在本地的开发板上的后端。

结果看起来就像是通过 Web 管理电脑上的文件,并支持远程下载和编辑

想法来源

这个课一定要做个奇奇怪怪的项目,自己想了很久也不知道做啥。硬件方面也不是很想做,要买东西的什么很烦。所以只想考虑软件方面的。

本来想写个复杂点的爬虫,但是爬什么东西,却一点也没有思路。后来老师说可以报销,我突然想起来可以买个树莓派玩玩。就想做树莓派的 Home Server,做个语音控制 + 远程监控之类的小玩意儿。结果老师说太宽泛了。只得做罢。

最后差不多了,选了一个和 Home Server 同源的东西,也是自己比较熟悉的那一套吧……

太烂了。其实应该学点新东西的。

过程中遇到了很多坑。

  1. ElementUI 是很良心了。但是最开始的时候对 Vue 那一套实在不是海东,所以就用了 ElementUI 的那套 StartTemplate。 写到后面发现为什么包都这么老,需要一个一个升级,而且 Webpack config 的结构也似乎是挺乱的,改的时候没办法搞。看了一下还是自己来吧,不用别的模版了。于是就重新用 Vue-cli 写了。

  2. 内网穿透最开始用的是 ngrok。 最开始发现 ngrok 最新版似乎已经不开源了。用了第二版进行编译。期间发现要编译不同平台的可执行文件,用 Go 的话就是修改一下环境参数就好,极端的方便。自己还挺高兴。但是发现居然要把域名和证书也编译进去。我就觉得稍微有点不清真。 但是最后还是弄好了。很开心。

    后来换了一个域名,重新编译了一套。但是似乎步骤忘记了,最终运行不起来。我也没什么办法。尤其是马上就要展示了。所以经室友提醒赶紧换上了最简单的 SSH 做穿透,用 autossh 避免长时间连接断掉的问题。

    发现还是 SSH 好啊。这种程度的穿透 SSH 足够了。

  3. Python 字符串 在写后端的时候,要判断给进来的字符串是不是一个合法的路径,所以用了isFileisDir等等函数。但是后来发现有一个地方总是判断失败。

    De 了很久的 bug,即使用上了小黄鸡调试法也没看出来是啥问题。

    请教了好厉害,发现是字符串的最后有一个是 \r\n,一个是\n,所以判断错误了。自己太不敏感了。

  4. 最后还是不太懂 WSGI 是咋回事,演示也只是在开发服务器上演示的……非常傻……



可能相关的