zhaoolee非常喜欢v2ex.com, v2ex的含义是 way to explore

zhaoolee也杜撰了一个v2fy.com, 含义是 way to fang yuan(方圆), v2fy.com由wordpress搭建, 托管在阿里云的VPS上, zhaoolee充分发挥了程序员的主观能动性, 数据库, 图床, apache, wordpress, php, 全部一人搞定;

然而个人建站这种东西,并没有想象中那么美好, 首先是是数据库的搭建问题, zhaoolee直接用mysql的Docker完成了搭建, 详细教程: 用Docker搭建外部可以访问的mysql[1], Docker几乎一行命令就完成了搭建

既然选择了Wordpress, 就要和它所依赖的PHP, 和PHP的好基友Apache打交道, 详细搭建过程: WordPress纪元[2]

完成了以上操作, 基本就有一个完整到Wordpress网站了 https://www.v2fy.com/

正文开始

如何让WordPress自动发文章?

WordPress的NB之处在于它提供了一整套的网站解决方案, 不仅提供了后台,而且提供了api的文档, 你可以通过api直接操控全站的内容,如果你只是向我一样更新文章, 那3个api就够了

获取文章信息

https://www.v2fy.com/wp-json/wp/v2/posts?page=1

创建文章

https://www.v2fy.com/wp-json/wp/v2/posts

根据获取的文章id更新文章信息

'https://www.v2fy.com/wp-json/wp/v2/posts/'+id

有了上面3个api, 你还需要一个授权的api, 用来证明你是WordPress站的主人,授权的api需要依赖WordPress的一个插件JWT Authentication for WP REST API,安装插件完成后就可以从以下api拿到Token

https://www.v2fy.com/wp-json/jwt-auth/v1/token

如何让WordPress稳定

WordPress可以通过安装缓存插件WP Super Cache, 让网站变的很快, 即使数据库挂掉, 也能保证静态页面的稳定, 但WordPress的稳定还是和数据库的稳定息息相关, 如果数据库挂了, 你连WordPress后台都无法访问, 由于zhaoolee的数据库是基于Docker的, 只要保证Docker容器不挂掉就可以了, 于是zhaoolee用nodejs的大神级工具PM2守护一个js脚本,来实现页面的监控, 一旦无法访问网站后台,立即通过 Server酱[3] 报警给微信, 并使用程序自动拉起容器,实现的代码也很简单

const axios = require("axios");const moment = require("moment");const { spawn } = require("child_process");async function start_mysql_docker() { const run_build = spawn("docker", ["start", "zhaooleemysqldb"], {cwd: __dirname}); run_build.stderr.on("data", async data => { axios({ url: encodeURI( "https://sc.ftqq.com/server酱秘钥.send?text=重启mysql容器失败" + moment().format("YYYY-MM-DD-HH-mm-ss") ), method: "GET" }); }); run_build.on("close", async code => { setTimeout(() => { axios({ url: encodeURI( "https://sc.ftqq.com/server酱秘钥.send?text=重启mysql容器执行完成" + moment().format("YYYY-MM-DD-HH-mm-ss") ), method: "GET" }); }, 8000); });}async function listen_v2fy() { try { let result = (await axios({ url: "https://www.v2fy.com/admin", method: "GET" }))["data"]; // console.log(result); // 数据库崩溃 if (result.indexOf("V2方圆") >= 0) { // console.log("一切正常"+moment().format("YYYY-MM-DD-HH-mm-ss")); } } catch (e) { start_mysql_docker(); axios({ url: encodeURI( "https://sc.ftqq.com/server酱秘钥.send?text=V2方圆服务器出问题了" + moment().format("YYYY-MM-DD-HH-mm-ss") ), method: "GET" }); }}function main() { setInterval(() => { listen_v2fy(); }, 5000);} main();

Github REAME.md自动化图片上传的思路

自动化这种东西, 一旦用过之后, 就会想要更多的自动化, 比如Github的markdown展示有个巨坑,如果你使用了github的外站图片,github在展示的时候,会自动给你转换成github站内图片, 这个转换非常高级,是隐式的, 它不会像国内的很多平台, 直接替换你markdown文件中的图片链接到自己的平台, Github只会在展示图片的时候, 将图片重定向到自己的平台的图片, 应该就是做了一个爬虫, 普通图片还好, 如果是体积较大的Gif动图, 就会出现半张图的情况, 解决这个问题也很简单, 写一个自动化脚本, 在往github push markdown 图片之前,直接将图片下载到项目内, 然后生成github站内图片链接, 替换到旧的站外链接就解决了(那原来的markdown图片链接岂不是被改了? zhaooolee给的建议是, 用自动化脚本拷贝一份出来进行改动)

自动化好用么?

完成了自动化后, 每次我往Github发文章,都可以通过上面提到的4个接口自动同步到WordPress, 不仅可以新增文章, 还可以同步更新旧的文章,比如在线工具秘籍[4]中的文章,就会同步更新到WordPress;

自动化给使用者带来了什么?

自动化的上传文章,自动化的转换图片地址,为我节省了时间和精力, 让我有更多的空间去关注生活;

自动化的WordPress数据库监控, 守护进程的自动化重启数据库, server酱自动化报警, 提升了工程的稳定性, 减少了工程的崩溃不确定性, 让我对线上工程多了自信,毕竟收到报警的时候, 程序已经在自动处理了, 收到报警5秒钟后, 就会收到程序已自动重启数据库的消息, 一切恢复正常

自动化更像是一种惯性的升华, 个人惯性能百分之八十的行为都无需经过大脑, 而程序的自动化,可以让百分之百的复杂步骤都无需经过大脑, 完全由计算机完成;

引用链接

[1] 详细教程: 用Docker搭建外部可以访问的mysql: https://www.jianshu.com/p/f6dd94a9f9a5
[2] 详细搭建过程: WordPress纪元: https://www.v2fy.com/dr-wp/
[3] Server酱: http://sc.ftqq.com/3.version
[4] 在线工具秘籍: https://github.com/zhaoolee/OnlineToolsBook