[特殊字符] 嘘!别声张!我用这 10 个“查无此人“的免费开发神器,把 5000 块月账单干到了 0,故事完整版
一、那个让银行发来"慰问短信"的夜晚
晚上十一点四十七分,阿杰的手机屏幕亮了一下。
是一条银行短信。他当时正半躺在出租屋那张吱呀作响的电脑椅上,两条腿搭在堆满快递盒的飘窗边,左手端着半凉的挂耳咖啡,右手还在机械地刷新着 GitHub Actions 的构建日志。他本以为是快递到了,结果解锁屏幕一看,心脏猛地一缩。
“【XX银行】您尾号 3721 的卡于 11 月 1 日 23:46 支出 486.72 美元,余额 583.19 元。如有疑问请致电……”
短信里的数字他反复看了三遍,像看一个不肯醒来的噩梦。四百八十六美元。折合人民币三千五百多块。这还只是 11 月刚刚过去的那一瞬间、那一笔、那一个云厂商从信用卡上自动划走的"第一滴血"。
他把手机扣在桌上,又翻过来,再扣上。最后他打开账单后台,把 10 月份的账单一条一条往下拉:Vercel 超了流量,AWS 的 RDS 实例在夜里偷偷跑着没人用的冷数据,S3 的读请求像超市收银台一样滴滴答答计费,还有某个他早就忘了密码、却依然按月扣费的 staging 环境。每一个数字都不大,连在一起却像一群咬人的蚂蚁。
"五千三百七十四块三毛六。"他盯着自己算出来的月账单总额,喃喃自语,“我一个月房租才两千二。”
阿杰是个独立开发者,五年前开始写代码,两年前从一家不大不小的互联网公司裸辞出来,想做一款自己的产品。他没什么宏大叙事,梦想也很朴素:做出一个真正有人用的东西,然后靠它养活自己,不用再挤早晚高峰的地铁,不用再在周日下午因为"周一要交周报"而焦虑到胃痛。
他做的是一个面向内容创作者的 “素材云盘 + 短链分发” 工具,名字叫 FlashBuck。用户上传图片和视频素材,系统生成短链,发到各个社交平台,后台还能看点击数据。听上去没什么了不起,但他自己就是目标用户,痛点抓得死死的。为了这个项目,他写了五个月代码,画了四版 UI,跟三个测试用户磨了六轮需求。
产品逻辑跑通了,Demo 也出来了,甚至连朋友圈都开始有人转发了。
但产品越接近上线,后端账单就越像一只要把他吞掉的怪兽。
他早年写前端,对 Vercel 和 Netlify 感恩戴德——那两家把他从"买 VPS、配 Nginx、装 SSL"的深渊里捞出来。可当他开始做全栈,开始跑 Python 脚本、跑后台任务、跑数据库,一切就变了。Vercel 的 Serverless Function 执行时间有上限,冷启动的时候慢得像在泥里走路;想要跑个 Go 写的图床服务?抱歉,得加钱升级。AWS 倒是无所不能,可它的账单也无所不能地吃掉你的余额。RDS 开个最便宜的实例,一个月一两百块起步;S3 存点图,出口流量能把你下载到怀疑人生。
"我不是在做产品。"他看着信用卡中心发来的那条"本月消费金额已超过您近三个月平均水平"的提醒,苦笑着对屏幕说,“我是在给云厂商打工。”
那天晚上,他做了一个决定:产品可以不上线,但账单必须死。
他打开浏览器,在 GitHub 的搜索框里输入"self-hosted、free tier、alternative to Vercel",像在垃圾堆里翻找别人看不上眼的宝贝。他有个习惯,叫"GitHub 考古"——专挑那些 Star 不多、更新却勤快、文档写得磕磕绊绊但功能却惊人完整的项目。
这一挖,就是整整两个星期。
两个星期后,当他把自己云计算账单上的"月支出"一栏从五千多块改成 0 元的时候,他忽然觉得,自己这五年写代码最爽的瞬间,不是某个页面第一次渲染成功,也不是某个 Bug 修好的那一刻,而是这一刻:他用一些"查无此人"的免费神器,把命运从云厂商手里夺了回来。
下面这个故事,就是他那两个星期的完整记录。每一个工具、每一次踩坑、每一行省下来的账单数字,都是真的。看完之后,你可能会想回头扇自己一巴掌——“我为什么现在才知道这些东西?”
二、故事开始之前,先认识一下这个"穷鬼开发者"
在正式开讲之前,有必要把阿杰这个人交代清楚。否则你会觉得他太抠、太折腾。
阿杰,二十七岁,租住在南方某二线城市的一个老小区里。房子是上个世纪九十年代盖的,楼道的灯时亮时灭,电梯三天两头检修,但胜在租金便宜,离市中心近,楼下有家开到凌晨两点的沙茶面摊,是他深夜调试代码后的唯一精神支柱。
他的开发设备是一台 2019 年的 MacBook Pro,电池循环次数已经超过 800 次,左边的 Shift 键偶尔失灵,但他舍不得修——"修一次够交两个月电费。"他的桌子是一张从二手市场淘来的长桌,上面并排摆着两个 27 寸显示器,一个用来写代码,一个永远开着五六个浏览器标签页,分别是:产品文档、GitHub Issues、竞争对手的页面、AWS 账单后台、以及一条他没舍得关掉的"如何用免费额度跑商业项目"的知乎问答。
他喜欢开源,但并非那种"为爱发电"的传道者。他的口号很实际:“能白嫖的,坚决不掏钱;不能白嫖的,想办法白嫖;实在不能白嫖的,再想想是不是真的需要它。”
你别笑。就是这样一个斤斤计较的穷鬼开发者,最后愣是靠着 10 个你可能听都没听过的免费服务,跑起了一个月活上万、日点击几百万次的短链产品。
而这一切的起点,是他在那个被账单短信击穿的夜晚,写下的一行字:
“如果我必须在’再开一个信用卡’和’自己动手丰衣足食’之间选一个,我选择后者。”
三、第一块多米诺骨牌:一夜之间省下 480 美元的部署平台
阿杰的第一个目标,是干掉 Vercel 和 AWS 上那些乱七八糟的部署费用。他的 FlashBuck 后端用了四种语言:Python 写图床处理脚本,Go 写短链跳转服务,Node.js 写 Web 端 API,还有一个边缘 Sidecar——就因为这个"混合语言"的架构,Vercel 根本接不住。
他在 GitHub 上逛到凌晨三点,眼睛已经快睁不开了,直到一个叫 Zeabur 的项目出现在他眼前。网页上写着一句话:“Deploy anything, from any language, in seconds.”(任何语言,任何东西,几秒部署。)
"吹吧。"他嘟囔了一句,但还是点开了文档。
半小时后,他坐直了身体。
Zeabur 不是 Vercel 那种"只爱前端和 Node"的平台,它是一个真正的万能部署平台。Docker、Go、Python、Node、Java——你随便甩一个项目上去,它都能接住。更狠的是,它不仅能跑应用,还能一键部署数据库:PostgreSQL、MongoDB、Redis,点一下就创建好,而且自动把连接字符串注入到环境变量里。
"等一下,"阿杰想起了自己上个月配 AWS RDS 的经历:开实例、设安全组、配子网、生成密钥、下载证书、再在代码里小心翼翼地拼连接串,足足折腾了两个晚上。结果这个平台上就一个按钮?
他把 FlashBuck 的 Go 服务推了上去。Zeabur 自动识别了 Dockerfile,构建完成,一行命令没改,服务就出来了。那一刻,他感受到一种久违的感动,像回到了当年第一次用虚拟主机上传 PHP 文件就能访问页面的那种"简单的快乐"。
"这感觉太像宝塔面板了,但底层又是容器化的。"他在当天的开发日记里写道。
他给这个章节总结了一段话:
- 它最神的点:把容器的强大和虚拟主机的傻瓜化体验结合在了一起。你不用管 Kubernetes,不用写复杂的 YAML,不需要理解容器编排,只需要把代码推上去。
- 免费额度:对个人开发者和小项目非常友好,做 Demo、跑测试环境绰绰有余。
- 省了多少钱:阿杰把两个 AWS 上的 staging 环境和三个 Vercel 测试项目迁过去,一个月省下大约 480 美元。
那天早上九点,他做了个最直接的复盘:第一张倒下去的多米诺骨牌,改变了整个游戏的走向。
四、数据库的"边缘革命":Turso 让他的数据学会了瞬移
部署平台搞定了,下一个要解决的是数据库。
阿杰的 FlashBuck 有一个核心功能:用户上传的素材可以生成一个短链,短链会跳转到素材预览页。这个"跳转"动作对速度的要求极高——用户点一下,最好一百毫秒内看到东西,超过半秒,用户就会觉得"这产品是不是卡了",然后关掉页面。
传统的数据库部署在某个固定的区域。比如他之前用的一个便宜 VPS 上装 MySQL,服务器在东京。如果用户在北京,请求要飞到东京再飞回来,延迟一百多毫秒;如果用户在北美,延迟动辄三四百毫秒。对于需要"秒开"的短链跳转来说,这种延迟是致命的。
他需要一种"数据库就在用户身边"的解决方案。
于是他在 GitHub 上考古时发现了一个名字非常奇怪的项目——Turso。
"Turso?听着像某种意大利运动?还是某种奇怪的狗粮?"他一边自言自语,一边点进了仓库的 README。
看完第一段他就愣住了:Turso 是一个基于 SQLite 的边缘数据库平台。注意,是边缘数据库。它的核心思路是:把你的数据库副本部署到全球几十个边缘节点上。用户在任何一个地方发起请求,都会被自动路由到离他最近的数据库副本上。
就像外卖配送:你住在这个城市,外卖就从你家附近的门店出货,而不是从一千公里外的总店发货。
"这不就是 Cloudflare Workers 的逻辑,但用在了数据库上吗?"阿杰一拍大腿。
Turso 的底层是 libSQL,这是一个完全兼容 SQLite 的数据库分支。对阿杰来说,这意味着他不需要重新学任何东西。SQLite 他闭着眼睛都会用,写了几百遍 CREATE TABLE 和 SELECT,现在只需要把连接地址从本地换成 Turso 给的那个 URL,代码逻辑一行不变。
更让他兴奋的是,Turso 免费层的额度大到让他怀疑自己看错了。他心里盘算着:FlashBuck 的核心数据无非是用户信息、素材元数据、短链映射关系,这数据量,别说 0.5G,可能 10MB 都不到。
他做了一组测试:把自己的 API 服务分别连到东京的普通 MySQL 和 Turso 的边缘节点,然后用脚本从全球十几个测速点发起请求。结果让他差点把咖啡喷到键盘上:
- 普通 MySQL:全球平均延迟 210ms,最远的点 460ms。
- Turso:全球平均延迟 68ms,最远的点 124ms。
快了三倍多。
他把短链跳转服务切到了 Turso 上,上线第二天,用户反馈的第一条消息是:“怎么感觉今天的链接点开像瞬移一样?”
"因为你的数据现在学会瞬移了。"他回复道,心里爽得要命。
后面他还发现一个"隐藏福利":Turso 支持把数据库嵌入到前端代码里跑。这意味着如果以后他做一款纯前端应用,甚至不需要单独的后端服务器,直接把数据逻辑写在前端,用 Turso 的同步能力做数据一致性。这个自由度,是传统数据库完全给不了的。
这里他特别想给读者留一个代码对比,展示迁移成本有多低。以前他连 MySQL 的连接串都背得滚瓜烂熟:
-- 传统 MySQL 的建表逻辑
CREATE TABLE short_links (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
slug VARCHAR(16) UNIQUE NOT NULL,
target_url TEXT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
而换成 Turso 之后,他几乎什么都没改:
-- Turso(libSQL,兼容 SQLite 语法)的建表逻辑
CREATE TABLE short_links (
id INTEGER PRIMARY KEY AUTOINCREMENT,
slug TEXT UNIQUE NOT NULL,
target_url TEXT NOT NULL
);
同一个 SQL 习惯,同一个世界。 这就是阿杰对 Turso 最精准的评价。
五、Neon:他给数据库装上了"时间机器"和"平行宇宙"
如果说 Turso 让阿杰知道"数据库可以无处不在",那 Neon 则让他知道"数据库可以像代码一样被分支、合并、穿越"。
在 FlashBuck 开发的后期,最让阿杰崩溃的是测试环境的维护。当时他的做法很原始:
- 每次想测试一个新功能,就给本地数据库导一份生产数据的副本;
- 在测试环境里跑各种诡异的写操作,把数据改得面目全非;
- 改到一半发现逻辑有问题,想恢复?只能删库重建;
- 最恐怖的是有一次改着改着,不小心把测试实例的连接串填到了配置文件里,导致生产库被一次性清了三条关键数据。
"数据库不是代码啊,它没有 Git 这样的版本管理,太绝望了。"他在深夜的微博上吐槽过这句话。
然后他就看到了 Neon——一个 Serverless PostgreSQL 平台,主打功能是数据库分支。
阿杰第一次看官方文档的时候,用"起鸡皮疙瘩"来形容自己的感受。
Neon 能在你的生产数据库上开一个"分支",就像你在 Git 里 git checkout -b feature/test 一样。这个分支会复制一份生产库的快照,你在分支里随便折腾——删数据、改结构、跑 Schema 迁移、执行破坏性实验——完全不影响主库。等你测试完了,这个分支可以直接丢掉,或者合并回主干。
"数据库也有了 Git 的分支管理能力?"这在他的认知里,简直是外挂级别的功能。
他立刻给 FlashBuck 搭了一套新的测试流程:每次开发新功能,就用 CI 自动创建一个 Neon 分支,跑完测试之后再自动删除。整个过程没有人工干预,数据库环境像代码一样可创建、可回滚、可丢弃。
这个能力带来的好处不止是测试。它的"时间点恢复"功能也很实用。有一次阿杰在生产环境执行了一个有 Bug 的迁移脚本,导致部分用户数据被错误的 SQL 更新了。放在以前,他得从凌晨的备份文件里手动恢复,少说要两个小时,而且恢复期间服务中断。用 Neon 之后,他直接跳转到"出错前五分钟的那个时间点",生成一个新分支,把正确数据捞回来,重新切过去。整个事故处理时间从两小时变成 五分钟。
"这不是数据库。"他在 Star 了 Neon 的仓库之后写道,“这是数据库界的时光机加平行宇宙。”
从技术层面再看,Neon 的免费福利对个人项目也相当实在:0.5GB 存储。对 FlashBuck 这种产品来说,0.5GB 足够存储几千个用户的核心业务数据了。关键是这份稳定上的保障,比他之前用的某免费 MySQL 托管服务动不动就"休眠"要强太多。
他还发现 Neon 是 Next.js 和 Serverless 架构的绝佳搭档。连接方式做了专门优化,冷启动场景下不会像传统 PostgreSQL 那样出现连接池被占满、首包延迟飙升的问题。这让他以后如果想把 FlashBuck 的前端改成 Next.js 的 Serverless 方案,数据库层完全不用动。
六、Upstash:当 Redis 不需要"吃内存"之后,贫穷限制不住他了
解决了主数据库之后,阿杰开始盘算缓存和会话存储。
FlashBuck 有一个实时点击统计功能。用户打开后台,能看到自己的短链在过去一小时、过去一天、过去七天被点击了多少次,点击来自哪些国家、哪些设备。这个功能的技术实现,天然离不开 Redis:把点击事件以极快的速度写入计数器,用原子操作做累加,再用排序集合做排行榜。
但 Redis 是个"吃内存的怪兽"。阿杰遇到过最尴尬的一次:在一台 1G 内存的 VPS 上同时跑 MySQL、Nginx 和 Redis,结果某天 Redis 的 RDB 持久化一跑,内存直接飙到 90%,整台服务器开始疯狂 swap,SSH 都卡得进不去。他以为被人攻击了,最后发现是自家 Redis 把自己的服务器"吃"崩了。
而云厂商的托管 Redis,价格能让他怀疑人生。最便宜的实例一个月也要二十多美元,还是美元,换算过来就是一百多块。对穷鬼开发者来说,这不叫贵,这叫"劝退"。
Upstash 就是在这个节骨眼上出现的。它是一款 Serverless Redis,核心卖点很直接:按请求计费,闲置不花钱。
阿杰看中它的免费额度:10,000 次请求/天,256MB 存储。对 FlashBuck 当前的量级来说,一天能有一万次 Redis 读写就已经是很了不起的流量了。而且这个额度是每天刷新,不是一次性给定的,完全覆盖了他早期产品的全部需求。
它最厉害的地方在于不需要维护实例。没有实例就无所谓内存占用、无所谓主从备份、无所谓半夜三更突然宕机。请求来了,它就启动运行;请求走了,它就停止计费。对个人博客、小型产品来说,这种模式几乎完美。
阿杰把 FlashBuck 的点击计数、Session 存储、限流开关全部迁移到了 Upstash。整个迁移过程只花了一个晚上,因为他惊讶地发现 Upstash 提供的 REST API 可以直接用 HTTP 请求操作 Redis,比如一个最简单的计数自增:
POST https://xxx.upstash.io/incr/counter
Authorization: Bearer YOUR_TOKEN
这也就意味着,他甚至可以在前端代码里直接操作 Redis(前提是权限配置得当)。这种自由度,是传统 Redis 客户端无法提供的。
迁移完成后的那个月,缓存相关的账单是 0 元。而性能上,点击统计的实时更新反而快了,因为 Serverless Redis 在请求高峰时能自动扩容,不存在"单实例被打满"的问题。
"Redis 不一定要住在你的服务器里。"阿杰在团队会议里一本正经地说,“它也可以住在云上,只在需要的时候醒来。”
七、Clerk:他这辈子再也不想写的"登录注册",有人顺手替他写完了
如果你问阿杰,做独立开发最痛苦的事情是什么,他的答案可能既不是调试,也不是部署,更不是推广。
是登录注册。
"注册、登录、退出、忘记密码、重置密码、验证码、社交登录、双因素认证、Session 有效期、Cookie 安全、密码加密……"他像背贯口一样把这些词吐出来,“每一个项目都要写一遍,每次写的代码还不一样,每次写完都战战兢兢,因为你总觉得自己在安全上留了个后门。”
他数了数自己过去的项目,至少写过六套认证系统。每一次写到最后,都伴随着深深的自我怀疑:“我真的该把一个普通用户的信息,交给我自己手写的那套半吊子认证逻辑吗?”
Auth0 是行业里大家都知道的方案,但免费层太抠,很多关键能力要付费解锁。自己写呢?又累又不安全。这是每个独立开发者都会遇到的死局。
直到他发现了 Clerk。
Clerk 是目前最优雅的用户认证解决方案之一,专门给现代 Web 应用准备。它跟 Auth0 最大的区别在于:它不是只给你一套 API,让你自己去拼 UI;它是直接给你一套现成的、颜值极高的登录界面。
你只需要在前端引入一个组件:
import { SignIn } from "@clerk/nextjs";
export default function LoginPage() {
return (
<div className="flex min-h-screen items-center justify-center">
<SignIn />
</div>
);
}
就这几行代码,一个完整的登录页就出来了。它包含了邮箱登录、密码登录、社交登录、忘记密码、验证码、双因素认证——所有你曾经熬夜写过的功能,全都被封装好了,而且 UI 现代、响应式、可定制。
阿杰把 FlashBuck 的整套认证迁移到 Clerk 后,花了三个小时。这三个小时里,两个半小时用来阅读文档和配置 OAuth,真正写代码的时间大概只有三十分钟。而在没有 Clerk 之前,他估算过,要完整实现一套登录系统,至少需要一个星期的开发量。
"省下的不是代码量,是安全感。"他意识到,登录系统由专业团队维护,比自己手写的那套要安全得多。
Clerk 的免费额度也让人感动:10,000 月活用户。注意,是"月活",不是"注册总数",也不是"API 调用次数"。这意味着对绝大多数早期产品和独立项目来说,完全够用。即使产品增长到一定规模,再考虑付费,也从没有"一分钱没赚到先被认证服务坑一笔"的窘迫感。
他给这部分的总结是:登录注册这种"又累又重要"的事情,能交给别人,就别自己死磕。你的时间应该花在真正能让产品不同的地方。
八、Cloudflare R2:那个让 AWS S3 流量费见鬼去的"救世主"
FlashBuck 的核心功能之一是素材云盘:用户上传图片、视频、音频,系统保存到对象存储,生成访问链接。
这个功能在技术选型上,一开始让阿杰非常头疼。对象存储的行业标准是 AWS S3,几乎所有云厂商都提供 S3 兼容接口。但 S3 有个让他睡不着觉的东西:出口流量费。
他算过一笔账。假设一个用户上传了一个 100MB 的视频,被下载了 1000 次,那么产生的流量就是 100GB。AWS S3 的出口流量费大约在每 GB 0.09 美元左右,一百 GB 就是 9 美元。而存储这个视频本身,一个月可能才几美分。
这意味着什么?你存的东西越受欢迎,你付的钱就越多。 你的用户在"享受"你的产品,而你在为他们的每一次点击买单。流量费这种收费方式,对独立开发者来说是一个巨大的隐形陷阱。
更气人的是,阿杰有一个图床项目,被某个论坛用户无意间搬运到热门帖子里,结果一夜之间被下载了几万次,第二天账单上多了一项"$47.80"的流量费用。"我他妈什么都没做,就有人帮我烧掉了五十美元。"他当时气得在办公室捶桌子。
Cloudflare R2 出现之后,阿杰觉得自己的人生观都被刷新了。
R2 是 Cloudflare 推出的对象存储服务,完全兼容 S3 API。这意味着你现有的 S3 SDK、工具库、命令行工具,几乎不用改就能对接上。但它的价格模型是完全不同的:R2 没有出口流量费。
没有出口流量费。这五个字对普通用户来说可能无感,但对像阿杰这样被流量费反复毒打的开发者来说,简直是"救世主"级别的存在。
你把文件存在 R2 里,不管它被下载多少次、被多少人访问、被传输到多少个城市,流量一分钱不收。你只需要为存储空间付极少的费用,而且 R2 的免费额度里有 10GB 的存储空间。
配合 Cloudflare 那个遍布全球的 CDN 网络,访问速度还快得惊人。之前阿杰的富媒体文件放在单节点的对象存储上,北美用户访问要跨太平洋,现在通过 Cloudflare 的节点,速度提升了几倍。
他做了一次全量迁移:把 FlashBuck 的所有素材文件从 S3 迁到了 R2,代码里只改了一个 endpoint 和密钥。迁移完成那个月,对象存储相关的账单从几十美元变成了 0 美元。
"从今天起,"他在项目 README 里郑重地写下一行字,“我再也不为任何人的下载行为付费了。让流量费见鬼去吧。”
九、Trigger.dev:当后台任务从"手工建造"变成"隐形推手"
随着 FlashBuck 功能越来越完整,阿杰发现有一部分逻辑不能再放在用户请求的主链路里了。
比如:用户上传一个视频素材之后,系统需要做格式转换、生成缩略图、提取元数据、触发通知;用户点击短链之后,系统需要异步记录统计数据、做设备识别、更新周报。这些任务执行时间长、资源占用大、和用户的操作链路本身没有强关联。如果放在 HTTP 请求里同步执行,页面会卡到让人想砸键盘。如果自己搭建异步队列,又得引入 RabbitMQ 或 BullMQ,还要管理 Worker 进程,让本就不富裕的开发时间雪上加霜。
他犯过一个典型错误:第一次上线视频处理功能时,他把"压缩视频"放进了同步接口里。结果有一个用户上传了一个 800MB 的 4K 视频,服务器直接卡死,所有请求全部超时。那个用户等了二十分钟,留下一句"这产品有 Bug 吧?"就注销了账号。
"后台任务,"老张,他那个在大厂做基础设施的朋友,在微信里丢给他一句话,“要有后台任务的思考方式。别什么都往请求里塞。”
于是阿杰去搜"Serverless background job",找到了 Trigger.dev。
Trigger.dev 是一个无服务器后台任务平台。它的核心概念就是把"耗时任务"从主链路中剥离出来,让这些任务在一个专门的运行时里执行。开发者只需要写一个普通的函数,告诉平台"这个函数放到后台去跑",剩下的事情它会自己处理:自动重试、自动日志、自动并发控制、可视化监控。
使用方式简单到他一度以为自己做错了。大概是这样:
import { task } from "@trigger.dev/sdk/v3";
export const processVideo = task({
id: "process-video",
run: async (payload: { videoUrl: string }) => {
// 耗时任务:下载视频、压缩格式、生成缩略图
await downloadVideo(payload.videoUrl);
await compressVideo(payload.videoUrl);
await generateThumbnail(payload.videoUrl);
return { ok: true };
}
});
然后在整个应用里,凡是要处理视频,就调用这个 task,用户请求立刻返回,剩下的交给 Trigger.dev 在后台慢悠悠地跑。
阿杰最欣赏的一个能力是它的可视化界面。每个任务的运行状态、执行时间、失败原因、重试次数都清清楚楚地展示在后台。以前他写后台任务,出问题全靠翻日志文件,现在打开 Trigger.dev 的控制台,一眼看过去,哪个任务跑完了、哪个卡住了,像看机场航班大屏一样直观。
免费额度对个人项目也非常友好,执行次数足够覆盖他早期的需求。他算了一笔账:以前自己搭消息队列、写 Worker、做监控,大概需要三天时间;现在用 Trigger.dev,一天就搞定了,而且更稳。
"它不是后台任务的’脚手架’,"阿杰后来在朋友圈写道,“它是后台任务的隐形推手。你看不到它,但它让一切都在默默发生。”
十、Dub.co:短链接界的"变形金刚",他白嫖了一个营销中台
FlashBuck 的名字里就有"短链",阿杰对短链接的需求当然不止是"把长网址变短"这么简单。
他最想要的能力有三个:
- 点击分析:知道每一个短链被点击了多少次,点击来自哪些浏览器、哪个国家、什么设备;
- 自定义域名:用户可以用自己的域名创建短链,这样品牌感更强;
- 运营能力:支持 A/B 测试、多个目标 URL 分流。
市面上做短链接的成熟产品不少,但几乎都有一个通病:要么收费,要么塞广告,要么数据不给你。阿杰尝试过某知名短链服务,免费版竟然只能在点击目标里插播一段五秒广告,气得他直接关了页面。
Dub.co 是他在 GitHub 上发现的另一个宝藏。这是一个开源的短链接管理平台,在国内外的开源圈子里热度极高,Star 数一路飙升,更新速度非常快。
阿杰最欣赏 Dub.co 的两点:
第一,UI 极其现代。打开它的后台,那套 Dashboard 的设计水平甚至比他见过的大多数 SaaS 收费产品都要高。深色模式、数据可视化、响应式布局,每一个细节都打磨得很到位。
第二,点击分析做得非常细致。浏览器、国家、设备、来源——你可以在面板上看到每一次点击的"画像"。对于做营销、做投放的人来说,这些数据就是金矿。
更让阿杰开心的是,Dub.co 的云端版有免费额度,同时支持自托管。对于他这种有一定运维能力的开发者来说,自托管意味着可以几乎零成本地跑一个属于自己的短链服务,数据完全在自己手里。
他把 FlashBuck 中所有和短链相关的功能做了一层抽象,优先调用 Dub.co 的能力。对他来说,Dub.co 已经不仅仅是一个"短链工具",而是一个轻量级的营销中台:创建链接、分发链路、分析效果、优化投放,一整套闭环都可以在里边完成。
"你知道最爽的是什么吗?"他在产品群里跟人分享,“我白嫖了一个别人每月要花几十美元订阅的 SaaS,而且它的核心代码我还完全看得到,想改哪里改哪里。”
十一、Resend:他再也不用手写"带 HTML 表格的邮件模板"了
FlashBuck 有一个再常见不过的功能:系统通知邮件。用户注册要发验证码,密码找回要发重置链接,素材被评论要发提醒。每个做产品的开发者都逃不过这个需求。
阿杰曾经用的是 SendGrid,这是他接触过的第一个邮件发送服务。早期用着还不错,API 简单,文档清楚,价格也不贵。但慢慢地,事情起了变化:免费层的额度越来越抠,而且不知从什么时候开始,他发出的邮件动不动就进了垃圾箱。
"用户注册完收不到验证码,跑回来问’你们系统是不是挂了’——那一刻真的又羞耻又无奈。"他回忆说。
邮件送达率这件事,比很多人想象的要复杂得多。它取决于发信域名的信誉、邮件内容的质量、是否被爬虫误判为垃圾邮件,还有 DNS 配置、SPF、DKIM、DMARC 一系列冷僻的技术。自己从零搭建邮件服务器?几乎不可能稳定地绕过 Gmail 和 Outlook 的垃圾邮件过滤器。
Resend 帮他解决了这个问题。
Resend 是由 React 团队打造的一个专门给开发者使用的邮件 API 服务。它可以发送事务邮件、验证码、通知,而且到达率极高,官方对垃圾邮件过滤机制做了大量优化,开发者不用再为"邮件进了垃圾箱"而头疼。
免费额度是 3,000 封/月,每天 100 封。对阿杰这个体量的产品来说,足够他把所有通知类邮件的需求都覆盖掉。
但真正让他"哇"出声的,是 Resend 的一个特殊能力:支持用 React 组件写邮件模板。
如果你写过传统邮件,你一定知道"邮件 HTML"有多反人类。为了让邮件在各种邮箱客户端里正确显示,你得用一大堆藏满 table 标签的 HTML 代码,连个圆角按钮都要写五行内联样式,每次改模板都像在做外科手术。
而用 Resend 的 React 邮件组件,你可以像写前端页面一样写邮件:
import { Body, Container, Head, Heading, Html, Button, Text } from "@react-email/components";
export function ResetPasswordEmail({ resetUrl }) {
return (
<Html>
<Head />
<Body style={main}>
<Container style={container}>
<Heading>重置密码</Heading>
<Text>点击下面的按钮重置你的密码:</Text>
<Button href={resetUrl}>重置密码</Button>
</Container>
</Body>
</Html>
);
}
组件化、可复用、可维护,再也不用面对那一坨黏糊糊的 HTML 表格了。阿杰把 FlashBuck 的全部邮件模板用 React 组件重写了一遍,整个人神清气爽。
"发邮件这件事,"他总结道,“从’每次改模板都要死一次’变成’跟写组件一样自然’,这个转变对我来说价值千金。”
十二、Coolify:他花 100 块,给自己造了一个"私有 Vercel"
故事讲到这里,你可能已经发现了:前九个工具虽然都很好用,但大多还是别人家的平台。放在上面跑,数据多多少少还是"寄宿"在别人那里。免费额度总有上限,条款也许某天会变,服务也许某天会调整。对于阿杰这种已经把"不交钱"写进人生信条的人来说,还有一个终极问题要解决:
能不能把这些能力都搬回自己的服务器上,完全由自己掌控?
答案来自最后一个出场的"大杀器"——Coolify。
Coolify 是一个开源的、自托管的 PaaS。简单来说,它是"自己版本的 Vercel"。你买一台便宜的 VPS,装上 Coolify,就拥有了一个像 Vercel 一样的面板:把 Git 仓库连上来,代码推送之后自动构建、自动部署、自动申请 SSL 证书、自动管理环境变量、自动做反向代理。
阿杰想起了 Vercel 企业版的价格:按团队人数和构建次数计费,一年下来随随便便几百上千美元。而 Coolify 呢?软件完全免费开源,你唯一要付的钱就是那台 VPS 的租金。
他买了一台年付 100 块钱的 VPS,1 核 1G 内存,装上了 Coolify。整个安装过程出奇地顺利,一条命令装完,然后打开浏览器,一个漂亮的控制台就出现在他面前。他连上自己的 GitHub 仓库,点了几下按钮,FlashBuck 的前端、后端、后台任务服务就都部署上去了。SSL 证书自动生成,域名自动绑定,连 Docker 镜像的构建日志都清清楚楚地展示在面板里。
"一百块钱,我得到了一个 Vercel 企业版,而且数据全在自己的服务器上。"他看着控制台里的绿色状态灯,有种恍惚的感觉。
Coolify 对他的意义不只是"省钱"。它是一种选择的自由:你可以选择用第三方的 SaaS,也可以选择用自己的服务器;你可以把 Free Tier 用到极致,也可以在流量大了之后平滑地迁移到自托管,代码却不用改。它让阿杰意识到,所谓"云原生"并不意味着你必须被某一家云厂商绑定——你可以用开源工具,自己搭建一套"属于自己的云"。
这就是 Coolify 的哲学:把控制权还给开发者。
十三、两个星期之后:账单归零的那个早晨
把十个工具全部迁移完成,花了阿杰两个星期。
这两个星期里,他白天写代码、改配置、做测试,晚上对着各种文档和 Issue 死磕。中间当然踩过坑:有一次 Zeabur 的构建缓存没命中导致部署慢了三分钟;有一次 Turso 的连接串配错环境变量,害他排查到凌晨四点;还有一次 Neon 的分支合并和主库 Schema 产生了冲突,他手动修了快两个小时。
但和之前被云厂商账单折磨的日子相比,这些坑显得如此温柔。
11 月 15 日的早晨,天气很好,阳光从他那扇朝东的窗户照进来,正好打在键盘上。阿杰做了一件很有仪式感的事情:打开各个云厂商的账单后台,把 FlashBuck 上个月的开销和这个月的开销摆在一起,逐项比对。
- 部署平台:上个月 $128,这个月 $0。
- 数据库:上个月 $96,这个月 $0。
- Redis:上个月 $45,这个月 $0。
- 对象存储流量费:上个月 $54.8,这个月 $0。
- 邮件服务:上个月 $23.5,这个月 $0。
- 后台任务:上个月 $38,这个月 $0。
- 短链服务:上个月 $29,这个月 $0。
总计:上个月 $414.3,这个月 $0。
人民币四舍五入一下,就是五千多块变成零。那个曾经被银行短信吓得失眠的夜晚,像一场遥远的噩梦。
而产品的性能呢?没有下降,反而提升了。短链跳转快了,数据库访问快了,图片加载快了,邮件送达率高了,后台任务不再丢消息了,甚至连登录页都比以前好看了。
他把信用卡的自动扣款关掉了一大半,然后做了一件想了很久的事:请楼下的沙茶面摊老板多煮了一份加料版,庆祝自己的"第二出生日"。
吃面的路上,他在手机上发了条朋友圈,配图是他刚做的"月账单对比图",配文是:
“以前我以为是自己在用云服务,后来才发现是云服务在用我。现在,我把主动权拿回来了。免费的,真的不代表差。”
十四、把故事讲给你听:这 10 个工具到底教会了我什么
故事到这里,十个工具已经全部出场。但我(阿杰)想在这个地方停一停,跟正在读这篇文章的你,认真说几句这出戏之外的心里话。
这趟"白嫖之旅"最大的收获,不是省下那四千多块钱,而是一种世界观的重构。
首先,它让我明白:开发者最大的成本不是服务器,而是时间。 那些免费工具真正值钱的,不是它们免掉的账单,而是它们替你省下的搭建时间、维护时间、踩坑时间。Clerk 替我写了一周的登录代码,Trigger.dev 替我省了三天的消息队列搭建,Coolify 替我免去了对 K8s 的恐惧——这些时间如果用来做产品、做功能、做用户访谈,也许 FlashBuck 早就能多迭代一个版本。
其次,它让我重新理解了"免费"。免费的背后不一定都是陷阱,免费也可以是一种慷慨。开源社区里就是有那么一群人,他们造出了这些功能强到离谱的工具,然后笑着说"拿去用吧,不用客气"。我们能做的,就是在能力允许的时候回馈社区:提个 Issue、写篇测评、捐点钱、或者仅仅是把它推荐给下一个人。
最后,它让我明白了一个产品层面的道理:别让工具限制了你的想象力。 如果你一开始就认为"没有 AWS 我就不能做全栈"“没有付费数据库我就不能做全球化”,那你永远都停在原地。工具的多样性带来的是自由的多样性。当选择足够多的时候,你才会真正站在"产品"的角度思考,而不是被"技术成本"绑架。
十五、写在最后:别让工具限制了你的想象力,也别让账单偷走你的热爱
今天列出的这 10 个工具,很多名字你可能是第一次听。它们没有 AWS 那种铺天盖地的广告,没有销售团队给你打电话,也没有"企业版咨询"的按钮追着你跑。它们安静地躺在 GitHub 的角落里,旁边可能只有寥寥几个 Star,以及一群和自己一样穷、一样抠、一样较真的独立开发者。
但它们却共同组成了我最喜欢的那种东西:独立开发者社区的核心精神。
用最少的钱,造最酷的东西。
技术的发展太快了,Netlify 和 Vercel 固然好,AWS 和 GCP 固然强大,但世界很大,好东西还有很多。下次你准备掏钱包买服务器、开实例、续费那套"行业标准"的时候,不妨先来这篇故事里逛一圈。
也许你会发现,那个报价 99 美元一个月的托管服务,一个名叫"鬼都不知道"的开源项目就能替代;那个让你每个月提心吊胆的流量账单,其实可以被一个"不看出站流量"的对象存储解决;那个让你痛苦万分的认证系统,其实只需要几行组件代码。
毕竟,省下来的钱,多吃两顿火锅不香吗? 🍲😁
对了,FlashBuck 后来怎么样了?它已经上线了,跑在 Coolify 控制的 VPS 上,数据库用 Turso,认证用 Clerk,邮件用 Resend,文件存在 R2,后台任务交给 Trigger.dev。每一个月,阿杰都只付那一百块的 VPS 租金。
而那条曾经把他吓得半夜坐起来的银行短信,已经很久没有在深夜出现过了。
这个故事里出现的每一个工具,都是真实存在的。它们或许正是你下一个项目里,最该提前认识的那位"无名英雄"。
💬 互动时间
你还知道什么偏门但好用的免费开发神器?
欢迎在评论区爆料!让我们一起把这个"白嫖"清单变得更长。👇
如果你也曾被云厂商的账单坑过,说出你的故事,让大家看看,这世界上到底有多少个"阿杰"。
**觉得有用?点个赞 👍 再走呗!**白嫖"清单变得更长!👇
觉得有用?点个赞 👍 再走呗!
更多推荐
所有评论(0)