Dockerfile、環境變數與 API endpoint:一次把坑補齊的週記

這兩天主要在補技術債、梳理架構,過程當然少不了自我懷疑,但也總算把幾個老問題收斂了。

先是 Dockerfile。昨晚就覺得哪裡怪,早上看 deployment log 才確認——前端 CORS 一直叫,後端 API 的 domain whitelist 根本沒吃到。追了半天發現是啟動命令寫法有問題,環境變數沒進去,CORS 就默默回到 localhost。這種低級錯誤不是第一次發生,每次都要再問自己一次:「你到底什麼時候才會記住?」好,這次除了修指令,乾脆把環境變數管理自動化,一個 bash script 負責切換 beta、dev、prod,順手把環境特定的 .env 加進 .gitignore,避免哪一天不小心把敏感資訊推上去。這種看起來小事,但出包就會後悔到爆。

API 這邊也趁機整理。把 api-client 的 base URL 去掉原本的 /v1,版本管理改走 header 或其他方式,避免未來升到 v2 又要全站改 URL。這件事我也猶豫了一陣子:是刻意簡化,還是在偷懶?最後回到原則,盡量避免 breaking change,留可演進的空間。

前端部分,FeedbackContent 的聯絡資訊重新排版,之前確實有使用者找到不到窗口,這種細節不處理,說自己「以用戶為中心」就只剩嘴上說說。RootLayout 也加了 GA。對 GA 的矛盾一直在:隱私 vs.數據。做法是把追蹤寫成獨立 Component 放在 RootLayout 裡,未來要換工具或調整不會拖著整個架構走。效能與接受度先用數據說話,上線後再看情況。

Next.js 設定則更大膽一點:啟用 appDir 和 Server Components,開始測試 markdown 渲染與 SSR 效能。官方寫著 Experimental,不踩就不會出事,但不踩技術債也只會往後積。剛開就遇到一堆 edge case,還是硬著頭皮把流程跑完。順帶把半年前暫時放的 CHANGELOG_SIMPLE.json 砍了,改成正式的 changelog API route,先把 cache 關掉,確保更新即時反映。臨時解法拖太久就不是臨時了。

後端依賴也小調整:在 requirements 裡加了 aiohttp。requests 一直很好用,但某些場景同步呼叫就是讓整體反應慢了一拍。引入 asyncio 難免不安,擔心自己只是想玩新玩具。不過考量接下來成分分析與第三方 API 呼叫會變多,先讓 aiohttp 上場測試,不行再退回去,別把路封死。

最後是文件。IngreLens 的架構文件已經和現況脫節一段時間了,這次把系統架構圖和技術選型重新對齊。文件真的煩,但每次踩坑時都會怪自己沒維護好。與其每次回頭都一臉懵逼,不如定期把思路寫清楚。

總結:這兩天看起來是各種小修小補,但核心都是同一件事,把「臨時」改成「可以持續維護的正式」。自我懷疑沒有消失,決策也不是每次都漂亮,但至少今天比昨天更接近理想的架構一點。這樣就夠了。