做明日故乡过程中的一些 lowcode 经验记录

上周,我正式上线了用一个月时间制作的中国版数字游民指南(nomadlist)明日故乡

在介绍里,我提到这个项目能够成型,ChatGPT 有很大的功劳。这句话被小众软件误解,把明日故乡描述成了通过 AI 帮助寻找下一个旅居地的产品。

实际上,明日故乡本身没有使用任何 AI 技术,因为我暂时还不想在一个免费且没有收益的产品上增加不必要的支出。

但我在制作明日故乡的过程中,确实大量使用了 ChatGPT。可以说,在制作明日故乡的过程中,我没有撰写一行代码,以下就是我这次做这个项目中的一些低代码经验。

如非必要,勿增 WordPress 以外实体

这是这次搞事情中最大的教训,这个项目开始时分为两个部分,第一个部分是数据获取,也就是我如何将想要的数据从互联网不同的渠道整理进一个数据库或数据表中。而另一个部分,就是我如何将这个数据表以可交互的形式呈现给我的目标用户。

我不是一个专职的研发人员,从头建立一个网站或 App 不是不行,但可能费时太多。因此在决定要做这个项目的时候,我就决定要用 lowcode 方案来解决第二部分。

尽管我是一个 WordPress 的资深用户,考虑到我自以为对 WordPress 的理解,我首先排除了 WordPress。因为 WordPress 作为一个 CMS 系统,它的原生功能难以满足 CRUD 的一些基本操作。

在多方筛选之后,我将目标定在了 AppSmith 和 Budibase 两款时下十分流行的开源 lowcode 上。不得不说,两款产品都有非常不错的体验。我最终选择了 Budibase,因为它提供了官方的 Cloud Host 服务,能够避免我将后续的精力花费在基础环境的运维上。

但在网站最终上线前,我又放弃了 Budibase,将技术栈迁移回了 WordPress。这是由于从最终交付的成果来看,Budibase 存在几个问题:

  1. Budibase 默认是一个面向企业内的多 App 平台,域名只能绑定到你的多 App 门户,无法直达 App 本身,这很不优雅;
  2. Budibase 不支持静态化,城市详情页的打开速度过慢;
  3. Budibase 的 SEO 几近于无;

以上三条缺点其实都不算是它本身的缺点,而是我想将 Budibase 这样一个面向企业内开发小工具的方案应用于 C 端开发导致的。

明日故乡的 Budibase 版本,我发给过一些朋友,现在已经下线

其中第二点和第三点是我放弃 Budibase 的根本原因,因为很显然,明日故乡是一个强 SEO 型项目,我预判它未来的主要流量将来自搜索引擎。

于是,我重新开始考虑是否能用 WordPress 来作为解决方案。然后发现,最初对“Wordpress无法做 CRUD 基本操作”的判断是错的。

明日故乡在程序上本质是一个多维表格筛选器,对每个城市的数据呈现对 WordPress 来说并不是难点。难的是要通过单一页面,对所有城市的数据进行筛选。比如最高温度低于多少,最低温度高于多少。

这对于以 Post 为基础记录单元的 Wordprss 来说确实勉为其难,因为在 WordPress 的默认设定中,一个 Post 只有有限的几个字段:标题、标签、分类、正文、作者等。

单 WordPress 官方有一个电商独立站插件 WooCommerce,该插件允许使用者将 WordPress 一键转变为一个电商网站。在电商网站中,每个 SKU 都可以自定义无限个商品属性,如尺寸、重量、型号、颜色等等。并且,可以轻易的依据商品属性进行搜索与筛选。

这就恰好满足了我需要对城市数据进行筛选的需求。于是,仅用了一个下午,我就将技术栈从 Budibase 转移到了 WordPress,又花了另一个下午的时间制作并微调好了网站的前端。

WordPress“站点编辑器”功能,可以让你不写任何前端来定义前端

不得不再说一次,Wordpress 在上了站点编辑器这个功能之后,已经是最强的 C 端 lowcode 没有之一了。

不过,Hack Budibase 的过程还挺好玩的,比如 Budibase 不支持在界面中插入 Google Analytics。所以,我通过 Posthog 的 API 实现了一个 Budibase 的统计系统。

域名与微信问题

我一开始想过是否要将这个网站放在境内,因为现在个人网站备案也没有那么麻烦。但考虑到如果后期要开放每个城市下面的留言板(当然还是要经过审核的),还是暂时将网站放在了境外。目前的规则是,个人域名备案是不允许开设 UGC 内容的,只有公司的备案才可以。

在注册域名时,选择了一个有着不错寓意的域名 guxiang.xyz,但上线后才发现这个域名竟然直接在微信浏览器中被转码了

后来查了微信开发者社群的很多帖子才发现,无论是否有非法内容,.xyz 域名在微信中是默认拦截的都会经过一次跳转才可以方案,并且只有备案过的 .xyz 域名才能申诉成功。这个策略大概是因为 .xyz 域名真的太便宜了,所以很多非法网站都在使用该后缀域名。

我刚上线的 guxiang.xyz 域名使用 Google 的“网页数据分析”都能弹出一些博才网站。

没办法,所以直接换了个域名。但 xyz 域名应该也会持有一段时间,如果后续打算注册公司来将服务器迁到境内,还是启用 xyz 域名更好看些,也更符合这个网站的内容。

ChatGPT 比想象的能干

作为一个本质是数据集的项目,在做的过程中肯定有大量的数据获取与整理的工作。

先声明一点,明日故乡的整个制作过程未使用任何爬虫技术,全部数据来自直接采买或合规 API 获得。但即便如此,一旦提及数据获取与整理,就肯定离不开 Python,而我作为一个只会一点点 PHP 的写手,是不可能为了这么个副业去重头学 Python 的。

所以,我的第一思路还是“能不能离开 Python”,这个思路害了我。

我找到了开源社区中比较火热的 workflow 工具 n8n,这是一个非常好用的低代码自动化工具,它允许使用拖拖拽拽的方式来定义一个工作流,这看上去可以满足我对数据输入、数据处理、数据输出的需求。

在处理其中的一些数据时,它也确实起到了不错的作用,但当我开始处理一个 300Mb 的 json 时,它崩了。

n8n 还是很强的,在逻辑上都能实现,但卡在数据量不能太大

很简单,它的数据处理似乎是在前端使用 JavaScripts 完成的,这意味着当我将一个 300Mb 的 Json 丢给它的时候,它会把这 300Mb 的数据读入 Chrome 建立一个超大型数组,然后……哪还有然后,我 32GB 的 M1 Max 也不可能让 Chrome 跑这样的数据处理。

我又试了多种图形化的 json 编辑器,他们要么是死贵,要么是无法实现我的需求(从某个嵌套数组中提取特定元素)。于是,我想起了 ChatGPT。

没想到,ChatGPT 只用了三个回合就解决了我的需求:

第一回合,它给出了一个煞有介事的代码,我根据它的提示建立了 Python 文件,运行了很长时间,但全部报错。于是我继续向它请教:

它说的对,我的json确实不是按行分割,但我不知道怎么修改,于是我给了它json的片段作为参考,让它帮我修改:

然后,它就给出了正确的代码处理 python 文件。

这时,将这个 python 文件存到本地,然后运行一下,数据就处理好了。

除了 Python 之外,我还依赖 ChatGPT 完成了 Excel 的处理工作。有些数据并不那么精确,我需要在 Excel 中批量进行处理,然后再手工对一些奇异值进行处理。

这时候,我就需要先用 Excel 搭建好大致的中间计算框架,然后再让 ChatGPT 帮我去写一下每一步计算所需要的函数就可以了,就像这样:

如果你遇到了错误,还可以直接将错误发给它,让它给出纠正:

在一个需求完成后,你可以紧接着让它开始下一步工作:

事实上,比起作为编程助手,我认为 ChatGPT 更擅长作为 Excel 助手。因为 Excel 的函数更有限,错误更标准,ChatGPT 几乎可以在极短的时间内协助你将 Excel 的能力榨到极致,而不用去翻阅复杂的 Excel 函数手册。

在项目上线后,ChatGPT Plus 更新了 Code Interpreter,我测试了一下,现在你甚至不需要让 ChatGPT 教你如何处理数据了(比如让它给你写个 Python 或 Excel 公式)。直接丢给它一个原始数据,然后告诉它你的处理需求,它就会直接生成处理完的 CSV 给你。

这让我觉得所有面向办公室白领的那种以提高工作效率为主要目标的 Excel 和 Python 课程全没用了。

当然,比起让 ChatGPT 写 Python 的方法,Code Interpreter 是没法复用的,下次你要处理同类数据,还需要借助 ChatGPT Plus,并且即便是同一个 Prompt,有时也会出差错。所以对于需要重复使用的数据处理过程,还是一次调教让 ChatGPT 生成一个可以保存在本地的 Python 比较好。

DreamHost 的 DreamPress 性价比不错

决定最终用 WordPress 呈现后,肯定就还是要找个云服务商嘛。一开始想的还是在 vultr 这种卖 VPS 的地方搞个一键部署,毕竟便宜。

但 vultr 的低端档位在境内(其实在境外也是)访问速度一直不是太好,而高端档位又比较贵。考虑到这个网站上线初期可能有一波流量潮,还是找个“能短时间承受高访问量,但价格又不太贵的”比较好。

满足这种需求的,一般反而不是独享而是那种共享服务,于是我找了下哪家现在提供专门的 WordPress 托管,而非 VPS 上一键部署 WordPress,就找到了老牌云服务商的 DreamHost 下面的 DreamPress

它的 DreamPress 是 16.96 美元每月起,每月的前 10 万次 UV 提供高可用性服务,后续在整个虚拟资源池里的运行优先级会下降。然后比起独立的 VPS 上托管一个 WordPress 额外提供了每日备份和 Staging 环境,对于我这种半吊子的个人开发来说,相当于提供了一个简易且方便的生产环境与研发环境分离。

实测下来,明日故乡的筛选页,在全国全线路基本都能在 1 秒左右加载完成。首页因为有张 Unsplash 的大风景图,也基本能在 2 秒左右加载完,对境内访问可以说是非常友好。

但初期的高流量还是没抗下来,毕竟我是没想到这个小网站能在即刻和微博有这么多人转发和点赞,也是远远超出了我对它的预期。

不过,扩容就算了,明日故乡以后每天能有 500 人访问就不错了。我也不指着它能有什么流量带来收益,它就是一个数据库,有需要的人想用的时候,能打开用,就足够了。在这种条件下,所有的运维成本压到最低是最好的。

目前计算下来,每年的服务器+域名+数据采买成本,大约在 4000 元人民币左右,还是凑合可以个人支出的范围。

评论尸 的头像

如果你觉得本文有信息增量,请:

喜欢作者

 

精选评论

  1. aerodnalsa 的头像

    从《明日故乡》过来 “副业”哥/姐真是很厉害

  2. qingwa 的头像

    略尴尬,已更新描述。

    1. 评论尸 的头像

      无论如何,还是感谢推荐。🙏

  3. 喂猫 的头像

    第一回合,它给出了一个煞有介事的代码,我根据它的提示建立了 Python 文件,运行了很长时间,但全部报错。于是我继续向它请教:
    这段话下面的配图和上面的重复了,应该是粘贴错了?

    1. 评论尸 的头像

      已更正。

  4. skinner 的头像

    好奇是出于什么样的动机构建这样一个网站,毕竟每年也要耗费 4000 元的运营成本,一般来讲做一个产品,要么自己用的上,要么能够产生收益,不知作者是怎样考虑的

    1. 评论尸 的头像

      自己要用。