afdian-linker 技術(shù)選型與 Vercel 部署指南 | 2025 年第 21 周草梅周報(bào)

本文在 草梅友仁的博客 發(fā)布和更新,并在多個(gè)平臺(tái)同步發(fā)布。如有更新,以博客上的版本為準(zhǔn)。您也可以通過(guò)文末的 原文鏈接 查看最新版本。

前言

歡迎來(lái)到草梅周報(bào)!這是一個(gè)由草梅友仁基于 AI 整理的周報(bào),旨在為您提供最新的博客更新、GitHub 動(dòng)態(tài)、個(gè)人動(dòng)態(tài)和其他周刊文章推薦等內(nèi)容。


技術(shù)分享

afdian-linker 的開(kāi)發(fā)工作已經(jīng)告一段落,之前也分享了一些開(kāi)發(fā)心得(詳見(jiàn):afdian-linker 正式發(fā)布 | 2025 年第 18 周草梅周報(bào)),因此現(xiàn)在來(lái)簡(jiǎn)單的做一下技術(shù)選型上的分享。

框架選型

從立項(xiàng)開(kāi)始,afdian-linker 就確定了要能夠在 Vercel 等云服務(wù)平臺(tái)上部署的要求,因此在框架選型上,優(yōu)先考慮可以部署在 Vercel 上的框架。

Vercel 為例, Vercel 平臺(tái)支持的框架包括 Next.js、SvelteKit、Nuxt、Astro、Remix、Vite 等,基本上主流的 CSR 和 SSR 框架都能夠支持。

其中又以 Vercel 官方出品的Next.js支持性最佳,支持 Vercel 平臺(tái)全部的特性和功能。

image-20250525172423998

這也是為什么目前主流的無(wú)服務(wù)器部署方案都推薦使用 Next.js 開(kāi)發(fā),因?yàn)橥ㄟ^(guò) Vercel 部署實(shí)在太方便了。

不過(guò) Next.js 是基于 React 開(kāi)發(fā)的,對(duì) React 生態(tài)更加友好。

出于技術(shù)選型的偏好,個(gè)人還是選擇了 Vue 生態(tài)下的 Nuxt 框架,對(duì)標(biāo) Next.js,該有的功能也基本上都有。

無(wú)論是 Next.js、Nuxt,還是其他框架,在開(kāi)發(fā)上都是大同小異的,沒(méi)有本質(zhì)區(qū)別,選擇自己喜歡的框架開(kāi)發(fā)即可。

Next.js 和 Nuxt 框架都是全??蚣?,即在一個(gè)項(xiàng)目中同時(shí)編寫(xiě)前端和后端代碼,集成了網(wǎng)頁(yè)開(kāi)發(fā)和接口開(kāi)發(fā),對(duì)于中小型項(xiàng)目,可以極大的省去前后端聯(lián)調(diào)的時(shí)間,也可以增加代碼的復(fù)用,節(jié)約開(kāi)發(fā)和部署的時(shí)間。

數(shù)據(jù)庫(kù)選型

在選擇完開(kāi)發(fā)框架后,就要選擇數(shù)據(jù)庫(kù)了。

在 afdian-linker 中,是要記錄用戶和訂單等數(shù)據(jù)的,所以需要一個(gè)數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)這些數(shù)據(jù)。

由于前面已經(jīng)選擇了在 Vercel 部署項(xiàng)目,因此這里也選擇 Vercel 提供的 PostgreSQL 數(shù)據(jù)庫(kù)。

image-20250525175409011

注意:Vercel 平臺(tái)的 PostgreSQL 數(shù)據(jù)庫(kù)是由合作的第三方提供的,例如 Neon 和 Supabase 都提供了 PostgreSQL 數(shù)據(jù)庫(kù),詳見(jiàn) Neon plansSupabase pricing,分別有 500MB 和 256MB 大小。

當(dāng)然,這里也稍微提一下其他類型的數(shù)據(jù)庫(kù)。

由于本項(xiàng)目是要部署到云服務(wù)上的,沒(méi)有固定的服務(wù)器,因此像 SQLite 這樣的本地?cái)?shù)據(jù)庫(kù)就不再適用。不過(guò)如果是單機(jī)部署的話,那么也可以考慮使用 SQLite ,以節(jié)約數(shù)據(jù)庫(kù)的空間。

就個(gè)人經(jīng)驗(yàn)而言,大多數(shù)情況下,SQLite 的性能已經(jīng)足以支撐小型項(xiàng)目的業(yè)務(wù)了,畢竟很多時(shí)候都沒(méi)那么多的用戶。

此外,還可考慮使用 MySQL ,不過(guò)相較于 PostgreSQL ,提供免費(fèi)試用的 MySQL 的云服務(wù)商比較少,個(gè)人推薦兩個(gè): TiDBAiven for MySQL。

但這兩個(gè)服務(wù)商還各有各的問(wèn)題,TiDB 雖然提供 5 個(gè) 5 GB 的兼容 MySQL 的分布式數(shù)據(jù)庫(kù)集群(參考:Pricing Details),但正如官方所說(shuō),TiDB 并不是 MySQL ,也就是身說(shuō),不是完全兼容 MySQL 的,可能存在一些細(xì)節(jié)上的差異。由此帶來(lái)的問(wèn)題,需要小心調(diào)試。不過(guò)優(yōu)點(diǎn)就是,TiDB 在國(guó)內(nèi)可以直連,使用上還是比較方便的。

而 Aiven 就略顯尷尬,Free plans 雖然提供免費(fèi)的 1GB 的 PostgreSQL 和 MySQL 數(shù)據(jù)庫(kù)(近期從 5GB 下調(diào)為 1GB 了),不過(guò) Aiven 本身在國(guó)內(nèi)無(wú)法直連,僅適合項(xiàng)目部署在境外服務(wù)器或云服務(wù)商時(shí)使用。

在本項(xiàng)目中,由于 Vercel 本身也是在境外的,因此可以使用 Aiven 的數(shù)據(jù)庫(kù)

當(dāng)然了,如果更喜歡 NoSQL 的話,也可以用MongoDB,官方也提供了 512 MB 的試用。

緩存數(shù)據(jù)庫(kù)的選型上,毫無(wú)疑問(wèn)的選擇 Redis(Vercel 也提供了)。

項(xiàng)目開(kāi)發(fā)

項(xiàng)目開(kāi)發(fā)中的心得已在《afdian-linker 正式發(fā)布 | 2025 年第 18 周草梅周報(bào)》一文中進(jìn)行了詳細(xì)說(shuō)明,此處不再贅述。

程序員使用 AI 工具寫(xiě)的項(xiàng)目水平,不會(huì)超過(guò)他自己水平的上限;反之,也不會(huì)低于自己水平的下限。

代碼庫(kù)中的代碼質(zhì)量,依舊是由程序員自己的水平?jīng)Q定的。

AI 工具的使用不會(huì)超越程序員自身的水平,但能顯著提高效率。

開(kāi)發(fā)總結(jié)

這次額外提一點(diǎn),很多人以為在 AI 大模型出來(lái)后,就可以實(shí)現(xiàn)人人都能開(kāi)發(fā)自己的軟件,寫(xiě)自己的項(xiàng)目了。

這句話錯(cuò)也沒(méi)錯(cuò)。

沒(méi)錯(cuò)是因?yàn)椋珹I 大模型在客觀上講,將軟件開(kāi)發(fā)中存在技術(shù)難度的部分——代碼編寫(xiě)——的開(kāi)發(fā)難度大大降低了,可以通過(guò)自然語(yǔ)言去描述需求和寫(xiě)代碼,這確實(shí)加快了很多寫(xiě)代碼的速度。

不過(guò),說(shuō)它錯(cuò),也是因?yàn)?,一個(gè)完整的項(xiàng)目開(kāi)發(fā)流程中,編碼只是其中的一小部分,一個(gè)環(huán)節(jié)而已,并不代表全部。

僅以本文在之前描述的兩個(gè)環(huán)節(jié),框架選型和技術(shù)選型上,一個(gè)從未有過(guò)編程和項(xiàng)目部署經(jīng)驗(yàn)的人,最大可能性是卡在哪一步呢?

答案是:在進(jìn)入框架選型和技術(shù)選型前,就已經(jīng)找不著方向了,因?yàn)檎嬲男氯松踔敛恢涝搹哪睦镩_(kāi)始。(這也是為什么出現(xiàn)了一些一站式集成開(kāi)發(fā)的 AI 網(wǎng)站,提供從開(kāi)發(fā)到部署的全流程服務(wù))。

可以說(shuō),AI 大模型可以加速編程,其實(shí)是已經(jīng)掌握了編程技能的程序員的特權(quán)。

此外,想必各位程序員也聽(tīng)說(shuō)過(guò)這樣一句話:接手一個(gè)老項(xiàng)目,往往重新開(kāi)發(fā)會(huì)比接著寫(xiě)更快。

這是為什么呢?因?yàn)樵陧?xiàng)目開(kāi)發(fā)的時(shí)候,不同的人往往有不同的思路,而接手別人的代碼,就意味著要去理解當(dāng)初寫(xiě)這段代碼的思路,這實(shí)際上并不是一件容易的事情。除此之外,還有代碼風(fēng)格、編碼習(xí)慣等小問(wèn)題。

在我看來(lái),AI 編程實(shí)際上相當(dāng)于人類去接手 AI 編寫(xiě)的代碼。雖然 AI 編寫(xiě)的代碼質(zhì)量不一定低,甚至還比人類高,但,能否讓接手的人類可以理解,恐怕還是個(gè)問(wèn)題。

從這個(gè)角度看,就可以理解為什么人類總是看不懂 AI 編寫(xiě)的代碼了,因?yàn)槟瞧鋵?shí)也相當(dāng)于接手了 AI 開(kāi)發(fā)的“屎山”。

為了避免或減少此類問(wèn)題,還是需要人工手動(dòng)審查 AI 編寫(xiě)的代碼,及時(shí)糾正錯(cuò)誤寫(xiě)法,或者要求 AI 重新編寫(xiě)。

項(xiàng)目部署

image-20250525183935662

在 Vercel 上部署項(xiàng)目是非常簡(jiǎn)單的,如果是自己的倉(cāng)庫(kù)的項(xiàng)目,只要直接import即可。

image-20250525184253679

如果是第三方項(xiàng)目,也只要導(dǎo)入對(duì)應(yīng)的倉(cāng)庫(kù)地址即可。

此外,afdian-linker 還支持一鍵部署。

點(diǎn)擊下方按鈕一鍵部署到 Vercel。

一鍵部署到 Vercel

image-20250525184215729

創(chuàng)建完項(xiàng)目后,就是修改構(gòu)建命令和填寫(xiě)環(huán)境變量。

image-20250525184519065

一般來(lái)說(shuō),Vercel 默認(rèn)的構(gòu)建命令已經(jīng)是可以用的了,無(wú)需特別修改即可正常運(yùn)行。

如需修改,可以按實(shí)際情況改動(dòng)。

image-20250525184625876

而環(huán)境變量,則按照文檔說(shuō)明填寫(xiě)即可。

修改環(huán)境變量之后記得重新部署

到這一步,一切順利的話,項(xiàng)目已經(jīng)可以正常運(yùn)行了,可以嘗試通過(guò) Vercel 提供的默認(rèn)域名進(jìn)行訪問(wèn)。

以 afdian-linker 為例,可以通過(guò) https://afdian-linker.vercel.app/ 訪問(wèn)(需要科學(xué)上網(wǎng))

綁定域名

你可能會(huì)注意到,Vercel 提供的默認(rèn)域名是無(wú)法直接訪問(wèn)的,vercel.app在國(guó)內(nèi)無(wú)法直接連接,因此需要一個(gè)自己的域名用于直接訪問(wèn)。

此處不會(huì)贅述如何購(gòu)買(mǎi)域名,可以自行在國(guó)內(nèi)國(guó)外域名網(wǎng)站中購(gòu)買(mǎi)(提供一個(gè)域名比價(jià)網(wǎng):https://tld-list.com/)。

image-20250525185133924

在 Vercel 的 Domains 中進(jìn)行配置即可。

修改函數(shù)區(qū)域

在 Vercel 部署的 Next.js、Nuxt 等全棧項(xiàng)目中,后端接口能力都是由 Vercel 的云函數(shù)(Vercel Functions)提供的,因此 Vercel Functions 的訪問(wèn)速度會(huì)直接影響用戶體驗(yàn)。

image-20250525185600969

在 Vercel 的 Function Region 頁(yè)面中,修改云函數(shù)的部署區(qū)域即可。

如果是面向國(guó)內(nèi)用戶,則建議部署在距離更近的香港地區(qū)。

面向哪個(gè)國(guó)家和地區(qū)的用戶就把云函數(shù)部署在哪個(gè)國(guó)家和地區(qū)

修改部署區(qū)域之后記得重新部署

部署總結(jié)

雖然通過(guò) Vercel 部署項(xiàng)目確實(shí)挺簡(jiǎn)單的,不過(guò)因?yàn)橐恍┛陀^原因,想要訪問(wèn) Vercel 卻并不容易,這也是 AI 無(wú)法解決的問(wèn)題。

可以說(shuō),在一個(gè)項(xiàng)目的完整流程中,只有從開(kāi)發(fā)完畢到成功部署,才算真正完成了項(xiàng)目開(kāi)發(fā)。

為什么只說(shuō)是項(xiàng)目開(kāi)發(fā)呢?因?yàn)橐粋€(gè)真正的軟件項(xiàng)目,只有真的投入使用后,才是一個(gè)切實(shí)可用的真實(shí)項(xiàng)目。

任何未經(jīng)用戶實(shí)際檢驗(yàn)的項(xiàng)目,都只是開(kāi)發(fā)者的練手項(xiàng)目而已。

如果算上這一步,可見(jiàn),AI 大模型無(wú)法解決的問(wèn)題會(huì)越來(lái)越多,這也就是為什么我說(shuō)“有了 AI 大模型,也不等于人人都能開(kāi)發(fā)自己的軟件”,對(duì)軟件工程還是要有一定的敬畏之心,對(duì)項(xiàng)目運(yùn)營(yíng)更要有敬畏之心。

以上就是本人對(duì)這次 AI 開(kāi)發(fā)開(kāi)源項(xiàng)目的一次簡(jiǎn)單的開(kāi)發(fā)心得、技術(shù)選型和部署指南分享,如有錯(cuò)漏,歡迎指正。

最新 GitHub 加星倉(cāng)庫(kù)

  • CaoMeiYouRen starred cmd-generator - 2025-05-24 01:44:44
    該內(nèi)容描述了一個(gè)通過(guò)點(diǎn)擊按鈕生成 CMD 命令的項(xiàng)目。主要編程語(yǔ)言為 TypeScript,項(xiàng)目在 GitHub 上獲得了 27 個(gè)星標(biāo)。
  • CaoMeiYouRen starred FFmpegFreeUI - 2025-05-24 01:44:11
    3FUI 是一款基于 ffmpeg 的 Windows 平臺(tái)專業(yè)交互外殼,主要用于視頻轉(zhuǎn)碼。該軟件的開(kāi)發(fā)動(dòng)機(jī)源于對(duì)現(xiàn)有轉(zhuǎn)碼工具的不滿,開(kāi)發(fā)者希望通過(guò)自己的努力提供更好的解決方案。3FUI 使用 Visual Basic .NET 作為主要編程語(yǔ)言,并在 GitHub 上獲得了 615 個(gè)星標(biāo)。

其他博客或周刊推薦

阮一峰的網(wǎng)絡(luò)日志

阿貓的博客

潮流周刊

二丫講梵的學(xué)習(xí)周刊

總結(jié)

本周的更新和動(dòng)態(tài)如上所示。感謝您的閱讀!
您可以通過(guò)以下方式訂閱草梅周報(bào)的更新:

往期回顧

本文作者:草梅友仁
本文地址:https://blog.cmyr.ltd/archives/2025-21-caomei-weekly-afdian-linker-tech-selection-deployment-guide.html
版權(quán)聲明:本文采用 CC BY-NC-SA 4.0 協(xié)議 進(jìn)行分發(fā),轉(zhuǎn)載請(qǐng)注明出處!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容