驗證中…
Deployment // for vibe coders
用 AI 做出來的小工具跑在自己電腦上很正常,傳給別人就一片空白。這頁講三件事:部署到底在搬什麼、怎麼判斷自己需要哪種平台,以及在公司實際上要走哪一條路。
這是第一個大家都會踩的坑,而且錯的不是程式,是那串網址本身。
http://localhost:3000 — localhost 就是「我現在坐著的這台電腦」。瀏覽器根本沒有連上網,它只是問自己的電腦:3000 號窗口有東西在跑嗎?有,就是 AI 剛幫你在終端機裡跑起來的那支程式。終端機一關,它就不見了。
同一串網址,他的瀏覽器也照做同一件事:問他自己的手機或電腦有沒有東西在 3000 號窗口。他手機裡沒有你的程式,所以只會跳「無法連線」。
把整個資料夾寄給對方也不算解法:那要對方自己裝環境、裝套件、還要跟你要 API 金鑰。要的是「點一下連結就能用,什麼都不用裝」。
在自己電腦上寫程式像在家煮私房菜——很好吃,但只有你吃得到。開店要搞定三件事,加起來就叫部署。
STEP 01
你的筆電會闔上、會帶出門,但客人可能半夜或從國外連進來。所以要一台永遠醒著的雲端電腦。
= 雲端伺服器
STEP 02
程式碼、執行環境、API 金鑰全部搬到那台機器上,而且要確認在店裡煮得出跟家裡一樣的味道。
= 部署與環境設定
STEP 03
給那台機器綁一個固定的公開網址,別人才找得到門在哪。
= 網域
直接去比較各家平台的規格只會越看越亂。平台只是工具,先搞清楚自己的專案是什麼形狀。
前端是外場(看得到的畫面),後端是內場(記帳、驗密碼、拿金鑰去呼叫 AI)。作品集、活動頁、瀏覽器裡的小遊戲通常不用開內場,那叫純靜態網站。
自問:要不要登入?要不要存資料?有沒有金鑰不能給人看到?三個都沒有 → 純靜態。
全端是外場內場寫在同一個專案裡(例:Next.js);分離是兩個獨立專案,前端呼叫後端的 API 拿資料。
自問:平常要開幾個終端機才跑得起來?一個 → 全端;要開兩個 → 前後端分離。
常駐伺服器適合長時間任務(影片轉檔、定時爬蟲、多人聊天室),沒人用也在計費。Serverless 平常不開機,有人按按鈕才啟動幾秒,按次數計費。
自問:功能都是「按一下、幾秒內算完」嗎?是 → Serverless 就夠,而且通常有很大的免費額度。
先認識分類,因為看懂分類才知道別人在討論什麼。但最後一欄才是我們的重點。
| 類型 | 常見平台 | 適合什麼 | 公司能不能用 |
|---|---|---|---|
| 靜態託管 + CDN | Cloudflare Pages、GitHub Pages、Netlify | 純前端頁面。CDN 把檔案複製到全球機房,誰連都快 | 只能放完全公開的內容;有公司資料一律不行 |
| Serverless 全端託管 | Vercel(Next.js 首選)、Netlify | 全端框架、短運算(登入、記一筆、呼叫一次 AI) | 不行——機敏資料會離開公司可控範圍 |
| 常駐伺服器 / 容器 | Railway、Render、Zeabur | 要一直開著的任務:爬蟲、即時聊天、獨立後端 | 不行(同上) |
| 雲端巨頭 | AWS、Google Cloud、Azure | 什麼都能做,但要自己組裝維護 | 公司有正式流程,但個人小工具用它是殺雞用牛刀 |
| 公司內部路線 | Google Apps Script、Firebase | 表單自動化、內部工具、儀表板、要登入的頁面 | 這就是我們要走的兩條路,見下一節 |
那些平台本身沒問題,問題是資料落在哪裡。我們的工具幾乎都會碰到玩家資料、營運數字或內部流程,一放上去就離開了公司可控範圍。所以規則很簡單:要給同事用的東西,部署到公司可控的 Google 生態;想練手的純公開小遊戲才考慮外部平台。
兩條都用同一套習慣:程式碼放 GitLab,推上 main 由 CI 自動部署,不用手動點後台。範本在 GitLab 的 ai-seeds/sharing 群組,fork 一份就能開始。
表單自動化、Sheets 加工、定時抓資料、小工具。$0,不用開專案。
# 1. 裝 clasp(一次) npm install -g @google/clasp && clasp login # 2. fork ai-seeds/sharing 的 gas-template # 3. 把 Script ID 填進 .clasp.json # 4. 寫 code → git push → CI 自動部署
Code.gs 是主程式,範本裡已有 Gemini API 與 Sheets 的例子.gitlab-ci.yml:merge 到 main 就自動 clasp push 並部署script.google.com/macros/...,可設成只有公司帳號打得開要前端框架、要登入、要資料庫的頁面(這個學習平台本身就是這樣蓋的)。
# 1. 裝 Firebase CLI(一次) npm install -g firebase-tools && firebase login # 2. fork ai-seeds/sharing 的 firebase-template # 3. 開自己的 Firebase 專案(Spark 免費方案),ID 填進 .firebaserc # 4. 寫 code → git push → CI 自動部署
<你的專案ID>.web.app到 GitLab 的 project → Settings → CI/CD → Variables 設定,設一次之後每次 git push 就自動部署。
| 走哪條 | 要設的變數 | 用途 |
|---|---|---|
| GAS | CLASPRC_JSON(型別選 File)、DEPLOYMENT_ID | 讓 CI 有權限推上你的 Apps Script 專案並部署到固定版本 |
| Firebase | FIREBASE_TOKEN、FIREBASE_PROJECT | 讓 CI 有權限部署到你自己的 Firebase 專案 |
「部署成功」不等於「網站打得開」。這四件事每個平台都有,只是名字不一樣——最常出事的是第二個。
| 要確認什麼 | GAS 看哪裡 | Firebase 看哪裡 |
|---|---|---|
| 部署狀態 這次推上去到底成功了沒 |
GitLab 的 pipeline 綠燈,再看 Apps Script 的部署版本號 | GitLab 的 pipeline 綠燈,再看 Hosting 的發布紀錄 |
| 金鑰與設定值 本機 .env 裡的東西雲端拿不到,程式就當機 |
Apps Script 的 指令碼屬性(Script Properties),程式用 PropertiesService 讀 |
Spark 沒有後端,金鑰不要進前端;要用金鑰就得改走 GAS 或申請正式後端 |
| 網址 要好記、要能限定誰打得開 |
script.google.com/macros/...,存取權可設「僅公司網域」 |
<專案ID>.web.app,可綁自訂網域;要限公司登入得自己加閘門 |
| 日誌 同事說「壞了」的時候看這裡,不要猜 |
Apps Script 編輯器的執行項目(Executions),含錯誤堆疊 | Firebase 的 Hosting 請求記錄 / 瀏覽器 Console;有後端才有 Functions 日誌 |
出錯的時候不用自己瞎猜:把日誌裡那段紅字複製給 AI,或讓 AI 直接透過 MCP 去讀日誌,它會照證據找原因。這也是為什麼「看得懂後台在講什麼」比「會不會操作」重要。
流程上真正需要你親自做的其實只有幾件事,其餘都能派給 AI。
能點開連結就能用,對同事是方便,對外人也是。三件事最少要做到:內部工具一律加登入限制(GAS 設僅公司網域;Firebase 要自己加閘門與 Firestore 規則)、金鑰不要放前端(前端的東西使用者都看得到)、不要把公司資料放進外部平台。
這頁只把流程講到「能安心分享給同事」;正式對外的產品等級資安是另一個專業領域,平台上另有資安主題的資源可以接著看。
觀念框架(localhost 為什麼打不開、部署的三件事、選平台的三個判斷、上線後看四個地方)蒸餾自公開的中文教學影片
〈用 AI 寫程式之後,怎麼把作品部署上線〉;平台地圖的「公司能不能用」、GAS / Firebase 兩條路的實作步驟、CI 變數與後台對照表是我方依公司規範與 ai-seeds/sharing 的範本整理,原影片沒有這部分。
截圖為實際操作畫面。