其实非常没有技术含量。但是为了凑个数,就起了一个这样的名字。
实际上做的是:
Django 写的一个代码质量相当差的后端,能进行通过 Web 请求进行基本的文件操作,列出文件目录,下载预览等等。
Vue.js + ElementUI 写的一个不太稳健的前端,实现一下上述功能。
将后端部署到瑞星微3288开发板上(上面烧录的系统是 Debian 9 ARM)。
在校园网内用 SSH 做内网穿透,连接到我的腾讯云公网服务器,把公网的某个端口的网络请求转发到运行在本地的开发板上的后端。
结果看起来就像是通过 Web 管理电脑上的文件,并支持远程下载和编辑。
想法来源
这个课一定要做个奇奇怪怪的项目,自己想了很久也不知道做啥。硬件方面也不是很想做,要买东西的什么很烦。所以只想考虑软件方面的。
本来想写个复杂点的爬虫,但是爬什么东西,却一点也没有思路。后来老师说可以报销,我突然想起来可以买个树莓派玩玩。就想做树莓派的 Home Server,做个语音控制 + 远程监控之类的小玩意儿。结果老师说太宽泛了。只得做罢。
最后差不多了,选了一个和 Home Server 同源的东西,也是自己比较熟悉的那一套吧……
太烂了。其实应该学点新东西的。
坑
过程中遇到了很多坑。
ElementUI 是很良心了。但是最开始的时候对 Vue 那一套实在不是海东,所以就用了 ElementUI 的那套 StartTemplate。 写到后面发现为什么包都这么老,需要一个一个升级,而且 Webpack config 的结构也似乎是挺乱的,改的时候没办法搞。看了一下还是自己来吧,不用别的模版了。于是就重新用 Vue-cli 写了。
内网穿透最开始用的是 ngrok。 最开始发现 ngrok 最新版似乎已经不开源了。用了第二版进行编译。期间发现要编译不同平台的可执行文件,用 Go 的话就是修改一下环境参数就好,极端的方便。自己还挺高兴。但是发现居然要把域名和证书也编译进去。我就觉得稍微有点不清真。 但是最后还是弄好了。很开心。
后来换了一个域名,重新编译了一套。但是似乎步骤忘记了,最终运行不起来。我也没什么办法。尤其是马上就要展示了。所以经室友提醒赶紧换上了最简单的 SSH 做穿透,用
autossh
避免长时间连接断掉的问题。发现还是 SSH 好啊。这种程度的穿透 SSH 足够了。
Python 字符串 在写后端的时候,要判断给进来的字符串是不是一个合法的路径,所以用了
isFile
和isDir
等等函数。但是后来发现有一个地方总是判断失败。De 了很久的 bug,即使用上了小黄鸡调试法也没看出来是啥问题。
请教了好厉害,发现是字符串的最后有一个是
\r\n
,一个是\n
,所以判断错误了。自己太不敏感了。最后还是不太懂 WSGI 是咋回事,演示也只是在开发服务器上演示的……非常傻……