vuejs、php、caddy 与 docker —— web 期末大作业上云部署
这学期修了一门叫《用HTML5 和 PHP编写JavaScript,jQuery 和 AJAX脚本》的 web 课(对,听起来很奇怪的名字)。期末大作业是写一个影评系统,前端允许使用框架,后端仅允许使用 php,具体的作业要求如下(源码会在验收结束以后开源)大作业写了得要有三个礼拜,工作时长加起来得有 30 个小时,想着验收之前上线一段时间积累一些评论数据,验收的时候也会更加顺利一些,于是就开始尝试在服务器上部署。部署的过程还是比较复杂的,所以写下这篇博客记录一下。后端部分早前有《PicUploader使用系列(一)——在Archlinux上使用Caddy部署PicUploader》的经验,便...【翻译】使用 PHP 构建简单的 REST API
我这学期有一门偏向前端的 WEB 课程,期末大作业要求使用 PHP 作为后端语言实现一个简单的影评系统,应该是不允许使用框架,使用中文关键字在搜索引擎上搜了一阵子似乎没有可供参考的案例,后来就找到了这篇博客,当中的许多观点与我不谋而合,因此我将这篇博客翻译成中文,原文戳这里: https://amirkamizi.com/blog/php-simple-rest-api介绍上周 @rapid_api 发了一个非常好的关于使用 nodejs 和 express 创建 REST API 的教程帖子。我想要帮助你使用 PHP 开发同样简单的 REST API。首先,如果你不了解 REST API,请...在 Hexo Fluid 主题中使用霞鹜文楷
我的博客换到 fluid 主题已经有两年了,期间一直有为博客更换字体的想法,但之前没有前端开发的相关知识支撑我换字体的需求。不过现在,我已经有了一些 Vue.js 的开发经验,相信能支撑我完成这个目标。我在谷歌搜索到了这篇文章——《Hexo博客Fluid主题,字体全局更改为霞鹜文楷体》。文章中直接修改了 themes/fluid/layout/_partial/head.ejs 让文章生成时在 html 的 head 标签中引入 lxgw-wenkai-screen-webfont 的 css 文件,并使用自定义 css 方案。但这种方案我不喜欢,我的 fluid 主题是通过 npm 安装 h...【翻译】GLWTPL——祝你好运开源许可证
说实话,当我第一次看见 GLWTPL( Good Luck With That Public License ) 的时候,我差点把嘴里的饭给喷出来了,这是一个非常有意思的开源许可证。原文请直接戳原仓库 -> https://github.com/me-shaon/GLWTPL如果你对你的代码有这样的感觉:当我写下这段代码的时候,只有上帝和我知道我在写什么。 现在只有上帝知道了。 那不如来考虑一下将这份开源许可证添加到你的项目中!并且,祝你未来的自己、人类同胞、外星人或人工智能机器人(可以编码并会毁灭人类)——实际上是任何敢于参与你的项目的人好运。当然,它还有一个脏话版本。干杯!可能的使用场景你...通过巴法云将向日葵智能插座接入米家,实现小爱同学远程控制
在上一篇博客中,我们介绍了如何在本地局域网中通过发送 http 请求控制向日葵智能插座 C2 的开关状态。但这还远远不够,我自己是小米生态链的忠实用户,在宿舍里也接入了四五个米家的智能设备,因此我想把这个智能插座接入米家,实现离家时一键关闭。在阅读小米IoT开发者平台的接入文档后,我发现米家对于个人开发者并不友好,接入文档大部分要完成企业认证以后才能实现。在谷歌一番搜索过后,我发现了通过假设 Home Assistant 后通过巴法云接入米家的方案。但我眼下就这一个非米家的智能家具,暂时还不想去碰 Home Assistant 那套体系。因此我便找上了巴法云。在巴法云的官网中提到,他们是「专注...使用 Root 后的安卓手机获取向日葵智能插座 C2 的开关 api
之前看到 https.gs 上的一篇文章,发现可以抓取向日葵智能插座 C1Pro 的开关 api,并实现局域网或公网的控制。这样一来,我们其实就不需要依赖于向日葵自己家的 App 去实现智能插座的开关操作,还是比较方便的。今年趁着双十一,直接低价拿下来带有计电功能的 C2,便也来试一试能不能抓到接口。首先,拿到插座以后肯定还是下载向日葵的官方 App,完成 wifi 的链接,这里就不再赘述。然后就可以打开我们的抓包软件。需要注意的是,原博客中抓到的接口是 http 协议,但这个接口在新版的 App 上已经变为了 https 协议,因此我们需要找一台 Root 过后的安卓机去抓包。抓包的步骤没什...创建 b23.tv 追踪参数移除 bot
前两天似乎有人高调宣称自己发 b23.tv 没问题,结果过两天就被拿下的消息。我自己并不是他的粉丝,但这个戏剧性的流言也又一次说明了注重隐私保护的重要性。早前就有 b23.tf 和 b23.wtf 两个域名专门在做移除追踪参数的事情。只要将短链接中的 b23.tv 改成 b23.tf ,别人访问链接时就会被转到移除了追踪参数的链接。但这需要发送者在分享时手动更改域名。因此,我也开始为自己的 bot 添加了 b23.tv 的 track id 移除功能。当用户的信息中包含 b23.tv 短链接,将会自动发送一条移除了 track id 的信息,用户就可以直接点击无追踪参数的链接。当然,这两种方案...jinja2 中如何优雅地实现换行
在使用 python 的 jinja2 模板引擎生成 html 的时候,会遇到 \n 换行符无法被正常换行的问题。我本能的想法就是将 \n 替换成 html 标签 <br />,但失败了,jinja2 有自动转义的功能,直接将标签原模原样地渲染了出来,并没有生效。而为这一段代码块关闭自动转义则会有被 js 注入的风险,因此这也不是上策。在 jinja2 的官方文档中,提出了使用 filter 的方案。也就是说,filter 将 \n 识别出来,并自动替换成 <br /> 标签,并且使用 Markup 函数将这一段 html 文本标记成安全且无需转义的。见: https://jinja.pall...手动指定 python-selenium 的 driver path 以解决在中国大陆网络环境下启动卡住的问题
之前因为学校社团迎新的需求,就临时写了一个 QQ Bot,最近又给 bot 加上了 /q 的功能,原理是通过 python 的 selenium 去启动一个 headless Firefox 去截由 jinja2 模板引擎生成的 html 的图。每次这个 bot 重启的时候都因为 selenium 而需要花费好几秒的时间,甚至经常概率性启动失败。我就寻思者应该把这个图片生成的 generator 从 bot 中抽出来,这样就不至于每次重启 bot 都要遭此一劫。但就在我将 generator 打包成 docker 部署上云服务器的时候,发现居然无法启动。于是手动进 docker 的 shell...从零开始的静态网页部署(到个人云服务器)
这篇博客是受 Tiancy 之托,在2023年精弘网络暑期授课的前端系列第七节课时针对项目部署这一块内容时所产生的产物。在授课视频中,受时长所限,我不得不采用宝塔面板+纯 ip 访问的方式来完成一个简单的部署,但这终究不是什么优雅的方案: 宝塔的安全性堪忧、其隐私性也是备受争议,而纯 ip 访问的方式也过于简陋,且没有支持 https 访问。因此这篇博客将以面对初学者的口吻去讲述如何从零开始部署一个 Vue.js 的项目到云服务器,以解我心头的愧疚。但是,我没有备案过的域名,且国内云服务器厂商众多,这篇博客终究不可能做到像保姆级教学那样去一一演示每一家云服务器厂商网页面板上的操作过程,而一些比...