
2026 年 2 月 4 日 | 實戰開發日誌
在軟體開發的世界裡,「回饋循環」(Feedback Loop) 的速度決定了創新的品質。
過去幾週,我們每次修改程式碼、微調 UI 或是更新分析邏輯後,都必須依賴 Zeabur 的雲端部署來驗證結果。雖然 Zeabur 的自動化部署已經非常方便,但「推送 -> 建置 -> 部署 -> 生效」這套流程少說也要消耗 3 到 5 分鐘。當你在一天內需要進行數十次微調時,這些零碎的等待時間累積起來,不僅殺死了專注力,也拖慢了進度。
今天,我們決定徹底解決這個痛點:全面建置 Docker 本地開發環境。
🚀 效率革命:從 300 秒縮短至 10 秒
今天的核心任務是將整個「台股 AI 決策顧問」系統搬進本地容器中。我們建立了一套多容器架構(Multi-Container Orchestration),包含:
- PostgreSQL (15-alpine):本地獨立資料庫,與雲端數據完全隔離,提供安全的沙盒測試環境。
- Stock Analysis (Python 3.12):主服務 ETL 與 API。我們特別將 Python 升級至 3.12,解決了
pandas-ta預發行版本的相容性問題。 - AI Ferryman Backend:基於 FastAPI 和 LangChain 的 AI 後端。
- AI Ferryman Frontend:Next.js 14 前端介面。
成果: 現在我們只需要執行一個指令,整個系統就會在本地同步啟動。修改程式碼後,重新建置與生效的時間從幾分鐘縮短到了 10 至 20 秒。這種「隨改隨看」的即時感,讓開發體驗提升到了另一個層次。
🛠️ 工作流自動化:自定義斜槓指令
為了追求極致,我們不僅建置了 Docker,還為開發流程設計了專屬的自動化腳本(Workflows):
/local-test:一鍵執行環境清理、Docker 建置、啟動服務,並自動輸出測試網址。/push-github:當本地測試確認無誤後,一鍵完成 Git Commit 操作並推送到雲端。
這樣的設計消除了重複輸入指令的負擔,也確保了開發流程的標準化與精確性。
💡 技術碎碎念:那些踩過的坑
在本地化過程中,我們遇到了一個有趣的技術細節:環境變數衝突。由於主服務和前端共用了同一個 .env.docker,而 Next.js 看到 PORT=8080 就會自動改用該端口啟動,導致了映射失敗。
我們最後透過在 docker-compose.yml 中強制覆蓋環境設定(PORT=3000),成功解決了這個「雙服務搶端口」的隱形炸彈。這也再次提醒我們,隔離(Isolation) 是容器化成功的關鍵。
🎯 結語:穩健地邁向用戶
今天的進展不僅僅是技術上的「本地化」,更是心態上的「專業化」。有了本地 Docker 環境,我們可以在不干擾雲端用戶的情況下,大膽地實驗複雜的功能。
「開發在本地,部署在雲端」。這套流程的確立,標誌著我們的台股 AI 系統已經從一個「實驗性專案」,進入了高效穩定的「產品級開發」路徑。
明天,我們可以跑得更快了。
本專案代碼已同步更新至 GitHub。 目前進度:Docker 本地開發環境 100% 建置完成、工作流指令已啟用。