尼日利亚拉各斯的程序员阿德昆勒(Adkunle)打开笔记本电脑时,国内四大运营商MTN、Airtel、Glo、9mobile的用户正在互相劝退——"Airtel在莱基快""Glo便宜但卡""9mobile我同事说稳定"。他查了查公开数据,发现这些判断全是口耳相传,没人知道伊凯贾(Ikeja)和拉各斯岛(Lagos Island)的真实网速差距。于是他启动了一个15天DevOps挑战:从零搭建NaijaSpeed,一个能自动识别运营商的测速工具。
3天后,他的GitHub仓库里躺着的不是优雅代码,而是一串WSL陷阱、CORS报错和加密货币支付限额的翻车记录。
Day 1:Next.js初始化即翻车,WSL把新手村变成地狱模式
阿德昆勒的栈选型看起来标准到无聊:Next.js 14做前端,Vercel托管,Tailwind CSS画界面,Speedtest库测延迟。他甚至在Notion里画好了数据流图——用户点击按钮→获取IP→匹配运营商→跑测速→存结果。直到他运行npx create-next-app@latest naija-speedtest,终端弹出一行红色报错。
问题出在Windows Subsystem for Linux(WSL,Windows的Linux子系统)。他的Node版本管理器(nvm)在WSL里指向了Windows路径,导致全局安装的包全部失踪。修复花了4小时:卸载WSL2、重装Ubuntu 22.04、重新同步SSH密钥。他在日志里写:"我以为DevOps是写YAML,结果是先当系统管理员。"
更隐蔽的坑是文件系统性能。WSL2的跨文件系统访问(/mnt/c/)让Next.js的热重载(Hot Reload)延迟到8秒以上,他一度以为是自己电脑老了。切换到WSL原生目录(~/projects)后,编译速度从8秒降到800毫秒——一个路径选择,十倍性能差。
Day 2:CORS把本地调试变成打地鼠,运营商API根本没有公开接口
前端跑通后,阿德昆勒开始解决核心功能:自动识别用户运营商。他找到ipinfo.io的免费API,本地测试完美返回"MTN Nigeria"。部署到Vercel后,浏览器控制台炸出一片红色:CORS(跨域资源共享)策略阻止了请求。
浏览器的安全机制要求:前端直接调用的API必须在响应头里声明允许该域名。ipinfo.io的免费套餐不支持自定义CORS头,Vercel的Serverless Function(无服务器函数)又有时延限制。他试过三种绕法:Vercel Edge Middleware代理请求(超出免费额度)、Next.js API Route转发(增加200ms延迟)、直接在前端暴露Token(安全风险)。
最终方案是妥协:用Next.js API Route做一层转发,缓存结果5分钟。但这暴露了更深的问题——尼日利亚四大运营商根本没有公开的基站覆盖或实时质量数据。他翻遍MTN开发者门户,找到的只有短信API和企业账单接口。Airtel的开发者页面404。Glo和9mobile连页面都没有。
阿德昆勒在日志里吐槽:"我想做'尼日利亚的Speedtest',结果发现Speedtest.net能活20年,是因为运营商愿意给它们数据。我没有这个选项。"
Day 3:加密货币支付限额卡住域名购买,他被迫用"土办法"上线
第三天目标是买域名和配置SSL。阿德昆勒没有国际信用卡——尼日利亚的银行外汇管制让美元支付变得困难。他转向加密货币:用币安(Binance)买USDT,转到Namecheap付款。
Namecheap的加密货币通道由BitPay处理,单笔限额100美元。他选的域名+隐私保护+两年托管刚好102美元。尝试拆分订单失败,因为BitPay要求单笔完整支付。又花了3小时找朋友代付,对方PayPal被风控拒绝。最终他用尼日利亚本地域名注册商(whois.com.ng)完成购买,价格贵40%,但至少接受本地银行转账。
SSL证书的配置又遇到WSL陷阱:Certbot的自动验证需要80端口开放,WSL的端口转发在Windows防火墙里随机失效。他改用Vercel的自动HTTPS,放弃了自己的服务器方案——一个技术决策,被支付基础设施倒逼回来。
三天后的NaijaSpeed:能跑,但数据黑洞还在
到Day 3结束,阿德昆勒的MVP(最小可行产品)上线了:用户打开网页,能测下载/上传速度,IP识别勉强工作(准确率约85%,因为运营商IP池有重叠),结果存入Supabase免费版。他发推展示时,评论区有人问:"那拉各斯岛和伊凯贾的数据对比呢?"
他回复:「目前样本量127条,MTN平均下载12Mbps,Airtel 9Mbps,但地理标签精度只有城市级。我需要用户手动输入位置,或者等浏览器Geolocation API权限——而后者在尼日利亚安卓机上默认关闭。」
这个回复暴露了项目的核心矛盾:测速工具的价值依赖密度足够高的地理数据,但获取精确位置需要用户信任,而信任需要工具先有价值。Speedtest.net用了15年积累这个循环,阿德昆勒有12天。
他的DevOps挑战还剩12天。下一步计划是接入尼日利亚通信委员会(NCC)的季度报告做交叉验证,以及用Web Workers让测速不阻塞主线程。但更大的问题没写在TODO里:如果运营商永远不开放数据,一个独立测速工具能走多远?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.