以 AI Proxy 應用為例,這是一個典型的前后端分離架構的應用,主要由兩部分組成:

  1. 基于 Next.js 開發的前端應用和 BFF 層。BFF 層負責用戶鑒權,并將經過驗證的請求轉發給后端服務。
  2. 使用 Golang 開發的后端服務,負責核心業務邏輯,包括 token 存儲、日志記錄和請求轉發等功能。

接下來,我將詳細介紹如何高效地開發這樣一個生產級別的系統

Golang 后端

創建開發環境

首先在 Sealos Cloud (https://hzh.sealos.run) 中打開 Debox 應用,創建一個新項目,選擇 Go 作為運行環境,選擇 1.23 版本。

Devbox 為開發者提供了幾個非常實用的功能:

創建完成后,幾秒鐘即可啟動開發環境。

環境準備好后,我們直接用 Cursor 連接開發環境。在操作選項中選擇使用 Cursor 連接:

首次打開會提示安裝 Devbox 插件,安裝后即可自動連接開發環境。

導入項目到 Cursor

首先 Fork Sealos 源碼到自己的倉庫,然后再將你自己的倉庫克隆到 Devbox 開發環境:

測試環境開發

在 Cursor 的面板中切換到 “Databse” 標簽頁,然后點擊箭頭指向的按鈕,在瀏覽器中打開 Sealos 的數據庫應用:

然后創建 PostgreSQL 和 Redis 實例。

回到 Cursor 面板的 “Database” 標簽頁,點擊刷新即可看到剛創建的數據庫實例,點擊可復制連接信息:

在終端中啟動服務:

export ADMIN_KEY=sealos-admin
export SQL_DSN=<復制的pgsql連接串>/postgres
export REDIS_CONN_STRING=<復制的redis連接串>
go run . --port 8080

提示 server stared 即為啟動成功

在 Cursor 面板的 “Network” 標簽頁中,點擊地址欄右側的 ?? 按鈕,然后在彈窗中選擇 “Copy”,將地址復制到自己電腦上使用 curl 進行測試:

curl https://mmznjndvzdrv.sealoshzh.site/api/status -H "Authorization: sealos-admin"

接口返回沒有問題。

優化數據庫設計

在開發過程中,我們發現數據庫中 Group 和 Token 之間的外鍵約束增加了系統維護的復雜度。為了簡化這一關系,我們可以將外鍵約束改為程序層面的顯式調用,這樣可以讓代碼邏輯更加清晰和可控。

首先切換到 fix-aiproxy 分支:

sealos/service/aiproxy/model/group.go 文件中,我們需要將 Group 結構體中一個外鍵約束改成在程序內顯示調用更新和刪除來降低維護心智。

這里我選擇使用 Cursor 的 Chat 功能讓 AI 自己寫代碼,最后生成的結果如下:

這種實現方式的優勢在于:當刪除 Group 時,相關的 Token 刪除操作會在同一個事務中完成。由于是在事務內進行,我們不需要擔心刪除失敗或系統宕機導致的數據不一致問題。

我們可以通過一系列測試來驗證這個優化是否達到預期效果。首先編譯并運行服務:

go build . && ./aiproxy --port 8080

然后通過以下 API 調用來測試完整的 Group 和 Token 生命周期:

# 創建一個group
curl https://gawavirgsomu.sealosbja.site/api/group/ -H "Authorization: sealos-admin" -d '{
"id": "ns-admin"
}'

# 創建一個token
curl https://gawavirgsomu.sealosbja.site/api/token/ns-admin -H "Authorization: sealos-admin" -d '{
"name": "token 1"
}'

# 查詢token
curl https://gawavirgsomu.sealosbja.site/api/tokens/ -H "Authorization: sealos-admin"

# 刪除group
curl https://gawavirgsomu.sealosbja.site/api/group/ns-admin -H "Authorization: sealos-admin" -X DELETE

# 再次查詢token
curl https://gawavirgsomu.sealosbja.site/api/tokens/ -H "Authorization: sealos-admin"

測試結果符合預期,確認優化方案可行。接下來我們就可以提交這些更改并創建 Pull Request 了。

上線到生產環境

首先在 Cursor 目錄頂層的 endpoint.sh 中設置啟動命令,在文件中添加以下啟動配置:

cd sealos/service/aiproxy
export ADMIN_KEY=sealos-admin
# 可以再創建一個單獨的生產環境數據庫,與開發環境隔離
export SQL_DSN=<復制的pgsql連接串>/postgres
export REDIS_CONN_STRING=<復制的redis連接串>
# 使用編譯好的二進制文件
./aiproxy --port 8080

然后來到 Devbox 發布頁面發布版本:

點擊發布按鈕后,等待發布流程完成。發布成功后,點擊 “上線” 按鈕進入部署頁面,然后點擊 “部署應用” 即可:

部署完成后,進入應用的詳情頁面,等待應用變成 running 狀態,然后復制公網地址:

這個公網地址就是生產環境的域名,我們可以使用生產環境的域名進行測試:

# 這里使用的是生產環境的域名
curl https://jpesudzryuhp.sealosbja.site/api/tokens/ -H "Authorization: sealos-admin"

Next.js 前端

前端項目搭建

前端環境的搭建與后端類似,具體步驟如下:

  1. 在 Devbox 中創建一個 Node.js 環境,版本選擇 20,端口改成 3000。由于 pnpm 安裝依賴比較消耗資源,建議選擇 4c 16G 的配置。然后克隆你自己 Fork 的 Sealos 倉庫:git clone https://github.com/xxx/sealos.git。AI Proxy 的前端代碼位于 sealos/frontend/providers/aiproxy 目錄。
  2. 切換到 sealos/frontend 目錄,首先修改 sealos/frontend/package.josn 文件,去除 node 版本限制,直接刪除 "node": "20.4.0""pnpm": "8.9.0" 這兩行即可,這一步很重要,不然代碼構建依賴會不成功
  1. 執行命令 pnpm i 安裝依賴。
  1. 執行命令 pnpm -r --filter ./packages/client-sdk run build 構建 client-sdk 包。
  1. 為了讓 Cursor 的 i18n 插件正常工作,我們需要將項目根目錄切換到 sealos/frontend/providers/aiproxy

切換目錄后,建議安裝所有 @recommended 插件以獲得最佳的開發體驗:

  1. 之前只是構建出了 Sealos Desktop SDK,并沒有安裝 aiproxy 的依賴,aiproxy 的依賴需要在 aiproxy 工作目錄下 sealos/frontend/providers/aiproxy 進行安裝。直接執行命令 pnpm i 安裝即可:

對接后端環境

項目搭建完成后,我們需要配置環境變量來對接后端服務。在項目根目錄創建一個 .env 文件,需要配置以下幾個關鍵變量:

NEXT_PUBLIC_MOCK_USER=""
AI_PROXY_BACKEND_KEY=""
APP_TOKEN_JWT_KEY="test123"
AI_PROXY_BACKEND=""
AI_PROXY_BACKEND_INTERNAL=""
ADMIN_NAMESPACES=""

mock 數據如下:

{
"workspaceId" : "test"
}

環境變量配置完成后,運行 pnpm dev 即可啟動開發服務器。項目的發布和部署流程與前面介紹的后端開發流程完全一致。

總結

AI Proxy 前端項目采用了經典的 Next.js App Router 架構,其中 app/[lng] 目錄用于頁面路由,app/api 目錄則用于后端 API 路由。

在這個項目中,Next.js 的后端實際上是一個中間層,它主要負責用戶認證相關的業務邏輯,并將經過認證的請求轉發給真正的 Golang 后端服務。這種分層設計可以讓 Golang 后端專注于核心業務邏輯,不需要關心認證等基礎設施,從而提高了代碼的靈活性和可移植性。

本文轉載自公眾號@sealos

上一篇:

免費強大的API開發和調試工具——Reqable

下一篇:

Ollama Python 調用:本地大模型的高效交互方式
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費