昨天先做到送出網站建置,今天接著確認建置結果,再把 WorkCafe 部署到 Cloud Run。這次已取得公開 HTTPS 網址,首頁能顯示地圖與店家卡片。
這篇依實際操作順序整理:確認映像、部署服務、設定正式網址,再測試網站。Cloud Run 執行 Laravel+Inertia+React,店家資料仍放在 Firestore,由 Laravel 透過 REST API 讀取。
截圖記錄了部署版本、首頁、篩選與零結果畫面,也保留瀏覽器警告和伺服器日誌。尚未完成的驗證放在文末。
建置成功代表網站已打包成容器映像,還沒有公開網站網址。下一步才是讓 Cloud Run 執行它。
Day 28 原先建議 1 GiB 記憶體、最小 0/最大 2 個實例與 60 秒逾時;這次修訂版本截圖顯示的是 512 MiB、修訂版本執行個體數上限 20,以及 300 秒逾時。兩者不同,因此不能把原先建議寫成已套用。最小實例數與服務層級的上限仍需另外核對;實例數上限也不是帳單金額上限。
開啟容器的「變數與密鑰」,逐筆新增:
| 名稱 | 設定方式 |
|---|---|
| APP_NAME | WorkCafe |
| APP_ENV | production |
| APP_DEBUG | false |
| FIRESTORE_PROJECT_ID | 私下填入實際專案 ID |
| FIRESTORE_DATABASE_ID | 現有資料庫 ID;預設資料庫填 (default) |
| SESSION_DRIVER | cookie |
| CACHE_STORE | file,僅作單一實例暫存;不作跨實例共用限制或狀態 |
| LOG_CHANNEL | stderr |
| APP_URL | 取得服務 HTTPS 網址後補入並發布設定更新 |
沿用 Day 28 建立的 workcafe-app-key,不重新產生金鑰:
Cloud Run 會讀取指定的密鑰版本,透過 APP_KEY 環境變數提供給 Laravel。之後更新網站保留相同設定。Firestore 使用服務帳戶身分取得 ADC,不填本機 JSON 檔案路徑。
Laravel 設定快取必須在執行環境變數與 secret 到位後建立,不能帶入本機或建置階段的設定快取。
接著到 Maps 瀏覽器金鑰的網站限制,加入這個正式來源,例如 https://你的服務網址/,並保留必要 API 限制。若本次確實公開 Firebase Auth 登入,再將正式網域加入授權網域;尚未啟用的功能不列為已驗證。
若只是調整金鑰允許的來源,不必因此重建前端;若更換 VITE_ 的值,就需要重新建置映像。
修訂版本(revision)是 Cloud Run 每次部署留下的版本紀錄。確認最新版本就緒、流量指向本次版本後,依序檢查:
/up 成功代表應用健康檢查通過;首頁能否讀取 Firestore,要另外核對店家資料與日誌。
這次首頁截圖已顯示地圖、店家卡片與示範資料標示。/up 與 /test/work-score 的狀態仍需要各自的請求紀錄,不能用首頁載入成功代替。
記錄此次 revision、映像版本與測試時間。既有服務保留前一個可用 revision,必要時把流量切回;第一次部署尚無可回復版本,失敗時先停止發布並修正。
📸 圖片 1-1|Cloud Run 修訂版本就緒並承接 100% 流量
📸 圖片 1-2|公開 HTTPS 網址顯示地圖與店家卡片
Cloud Run 的版本更新不會自動清除使用者瀏覽器的 PWA 快取。公開網址的互動、離線與更新流程,接著分別測試。
先用新的瀏覽器工作階段測一次,避免本機或舊版快取影響判斷。
| 流程 | 檢查重點 |
|---|---|
| 首頁資料 | 店家載入、示範標示與錯誤狀態正確 |
| 搜尋與篩選 | 單條件、多條件、零結果與清除條件正常 |
| Marker 與卡片 | 有 Marker 的店家隨篩選同步,不殘留被排除的標記 |
| 外部導航 | 開啟對應店家的 Google Maps 目的地 |
| PWA | 正式來源的 Manifest、worker、離線提示與恢復流程 |
| 本機測試入口 | /test/* 在正式環境不可用 |
| 登入、收藏、AI | 只測本次已確認公開的功能,其餘標為不適用 |
首頁顯示五間示範店家;選取「插座多」後,清單剩下兩間。搜尋 zzzz-no-match-29 時,清單顯示零間店家與清除搜尋入口,地圖上的店家標記也不再顯示。
地圖標記仍依現有資料映射核對,沒有標記的店家不直接算成這次部署造成的問題。
📸 圖片 2-1|選取「插座多」後的兩間店家與地圖標記
📸 圖片 2-2|搜尋無符合店家時的零結果提示
PWA 必須在公開來源重新測試。localhost 的安裝與快取不會自動變成正式網站的驗證紀錄;Android 模擬器可以繼續使用,但要直接開啟公開 HTTPS 網址,並清楚記錄測試裝置。
跑完指定流程後,核對同一段時間的瀏覽器 Console、Network 與伺服器日誌。若有錯誤,記下操作步驟、請求狀態與處理結果,不只截一個剛清空的 Console。
用量也一起看:Maps 請求、Firestore 讀取及主機資源是否符合這輪測試。若沒有呼叫 AI,就不把 AI 用量寫成已驗證;也不要為了截圖額外送出請求。部分監控資料有延遲,沒有立即出現數字時先記錄待確認。
📸 圖片 3-1a|地圖點擊紀錄與 Console 待處理警告
Console 留下了地圖標記點擊紀錄,也出現兩項警告:地圖事件監聽方式需要調整,以及正式網域尚未加入 Firebase OAuth 授權。登入功能因此仍待處理與驗證,這張圖不能解讀成「所有功能都正常」。
📸 圖片 3-1b|正式首頁的 GET 請求與 Service Worker 200 回應
Network 顯示首頁 GET 請求回傳 200 OK,並標示 from service worker。這代表瀏覽器收到經 Service Worker 處理的回應,不能單靠它判定 Cloud Run 直接回應成功,也不能據此認定首頁來自快取。
📸 圖片 3-2|Cloud Run 日誌中的首頁與靜態資源 200 回應
Cloud Run 截圖可見首頁、sw.js 與圖示等請求的 200 紀錄,補上了伺服器端的觀察。這些紀錄只涵蓋畫面中的時段與請求,尚不足以確認所有路由或 Firestore 權限都已驗證。
瀏覽器截圖使用 Chrome 的 iPhone 16 尺寸模擬,屬於桌面瀏覽器測試,不是 iPhone 實機測試。
整理紀錄時,可以把已移除敏感資訊的附件交給 Agent 核對:
請依附件整理 WorkCafe 發布驗證結果。
逐項列出測試流程、可見結果、錯誤與未驗證事項。
區分平台發布成功、首頁載入成功、互動測試與 PWA 測試。
不可把空白 Console 當成整站沒有錯誤,
不可把 Android 模擬器寫成實體手機。
沒有證據的項目保留待驗證;未公開功能標為不適用。
不要修改程式、部署、呼叫 API、commit 或 push。
WorkCafe 已從本機開發走到公開網址,Cloud Run 修訂版本承接 100% 流量。這次記錄了首頁載入、插座篩選、零結果提示,以及瀏覽器與伺服器端的回應,作為這個版本的實作成果。
這個版本仍有清楚的限制:Console 保留地圖事件監聽與 OAuth 網域警告,部署資源設定也與原先建議不同。/up、測試路由 404、導航、正式來源的 PWA 離線與恢復、版本更新、實體手機測試及用量,未有完整紀錄的部分都不列為已通過。
這個系列的實作就收在這裡。從需求、介面、資料處理到部署,WorkCafe 已成為能透過公開網址開啟的網站;做到了什麼、哪些地方還有限制,也一併留下紀錄。Day 30 會回顧這段開發過程、工具使用與學到的事,為整個系列收尾。
參考:Cloud Run 容器部署、Cloud Run 密鑰設定、Cloud Run 服務身分。