企業級 PHP 微服務生態系與 DevOps 維運基礎建設
從底層 Docker 映像檔到上層 Laravel 核心套件的完整基礎建設,透過私有 Composer 倉庫 (Satis) 統一管理,大幅降低多專案的重複開發與維運成本。
專案背景與挑戰
隨著公司內部系統與微服務數量的增加,各個專案團隊在開發與部署時面臨了幾個嚴重的痛點:
- 環境不一致:每個專案各自維護 Dockerfile,導致 PHP 擴展、Nginx 設定與底層依賴版本混亂,升級困難。
- 重複造輪子:不同專案都需要串接 MQTT、RabbitMQ、API Gateway,甚至連 API 回應格式與 SSO 權限管理都各自實作一套。
- 維護成本極高:當底層邏輯或第三方 API 變更時,需要逐一修改所有專案的程式碼。
為了解決這些問題,我主導規劃並實作了企業級 PHP 微服務生態系與 DevOps 基礎建設,將共用邏輯抽離為獨立套件,並統一底層運行環境。
核心建設架構
1. 標準化底層運行環境 (Docker Base Image)
開發了專屬的 ubuntu-php82 基礎映像檔,作為所有後端專案 CI/CD 部署的標準基底。
- 高度整合:內建 Ubuntu 22.04、Nginx、PHP-FPM 8.2、Supervisor,以及企業必備的資料庫驅動 (SQLAnywhere, MSSQL, ODBC)。
- 統一維護與擴充性:工程師不再需要煩惱 Docker image 的撰寫與除錯。未來若需升級 PHP 版本或修補系統漏洞,只需更新此 Base Image,所有專案在下次 CI/CD 部署時即可自動受惠。
2. 私有套件庫管理 (Webhook Satis)
為了解決跨專案的程式碼共用問題,我導入了 Composer Satis 建立公司專屬的私有套件倉庫。
- 自動化索引:透過 Webhook 自動讀取並索引公司內部所有獨立開發的 PHP 專案與套件。
- 降低耦合:將共用功能封裝成套件 (Package),各專案只需透過
composer require即可安裝與更新,大幅降低多專案的維護與開發成本。
3. 流量控管與快取代理 (Nginx Composer Proxy)
隨著 CI/CD 部署頻率增加,我們遇到了 GitHub API Rate Limit (連線數限制) 的問題,導致部署經常失敗。為此,我設計了基於 OpenResty (Nginx + Lua) 的 Composer 代理快取服務。
- 智慧路由與快取:作為
repo.packagist.org與 GitHub/GitLab 的本地代理,快取套件的 metadata (10分鐘) 與實際的 zip 壓縮檔 (長達 1 年)。 - 動態 URL 重寫:透過 Lua 腳本即時攔截並改寫 Composer 的 JSON 回應,將外部下載連結強制導向內部 Proxy。
- 解決痛點:徹底解決了公司內部多台伺服器同時部署時觸發 GitHub 流量限制的問題,並大幅提升了
composer install的下載速度。
4. 微服務底層與標準化套件 (Laravel Plugins)
在 Satis 私有倉庫的基礎上,我開發了一系列標準化套件,定義了微服務的開發規範:
-
standard(微服務底層核心):- 整合 SSO 統一登入與 API 中心資料交換。
- 內建標準化的帳號管理、RBAC 權限控制、部門組織與選單系統。
- 提供統一的檔案上傳模組 (支援分段上傳與 S3/GCS 遠端同步)。
- 徹底消除各專案在「基礎建設」上的重複開發。
-
laravel-response(統一回應標準):- 強制規範所有後端 API 的 Response 格式,確保前端與跨服務溝通的資料結構一致性。
-
異質系統串接套件:
mqtt-broadcaster:標準化 MQTT 訊息推播實作。laravel-event-rabbitmq:封裝 RabbitMQ 事件驅動架構,簡化非同步任務處理。api-gateway-client:統一 API Gateway 的呼叫與認證機制。
帶來的效益與價值
這套基礎建設的落地,為開發團隊帶來了質的飛躍:
- 開發加速:新專案啟動時,只需引入
standard套件並使用標準 Docker Image,即可在 1 天內完成基礎架構搭建,直接進入業務邏輯開發。 - 維護集中化:任何共用邏輯的 Bug 修復或功能升級,只需在套件端修改一次,各專案更新版本即可,維護成本降低 80% 以上。
- 架構規範化:透過套件強制收斂了 API 格式與權限邏輯,讓不同團隊產出的程式碼具備高度一致性,為未來的系統擴展與微服務化打下堅實的基礎。