← → 翻页 · ESC 索引
生成式 AI 職訓 140hr · 弄一下工作室
Vol.11 · D11 · Part 5
Day Eleven · 9 hours · 2 CH + 2 PRAC

Git + 全端

每一步都能反悔,讓API 金鑰不外洩

D10 你會寫 HTML/CSS/JS、會請 AI 幫你做前端。
D11 我們補上兩件「真的要上線才會用到」的事——
版本控制讓你不怕改壞,後端代理讓你的 API 金鑰能光明正大公開部署。

Vol.11·Git · GitHub · 後端代理 · Railway / Render·2026
Duration · 9 小時授課 · D11 / 20
140 小時體系的第十一天
— D11 / 20 —
Why Git + Backend · 為何今天要學這兩個
02 / 38 講義 · CH5-3
The Premise · 今天的主張
會寫程式 ≠ 能上線。 能上線,是會反悔不外洩

Git 讓你每一次改都有後路;環境變數+後端代理讓你的 AI 工具能
公開部署也不怕被盜刷。這兩件事學會之前,做得再漂亮的工具都只能在自己電腦跑。

— D11 核心主張·反悔保險 + 金鑰不外洩
Page 02 · The Premise
— · —
D11 · Learning Outcomes
03 / 38 講義 · CH5-3
OUTCOMES · 今天結束你能做到

三件事

不只是「聽過 Git」,而是「離開教室就有一個含後端的工具公開部署在網路上」。

Outcome 01
會反悔
能用 init / add / commit / log / diff / checkout 六個指令管理任何專案,能寫出三個月後翻記錄看得懂的 commit message。
Outcome 02
會藏鑰匙
能用 .env 加 .gitignore 把 API 金鑰擋在版本庫之外,能解釋為何寫死在前端 = 上線就被盜刷。
Outcome 03
會上線
能寫一個 /api/ask 後端代理,把含後端的 AI 工具部署到 Railway / Render,前端在 Vercel,鑰匙在後端環境變數。
Page 03 · 學習目標 · 9 hours
2 CH + 2 PRAC · D11
第一幕 · Git 與版本保存
Act I · 04 / 38
Act I · CH 5.3 · 3 hr 課堂 + 2 hr 自學

每一步
都可以反悔

工作區 · 暫存區 · 版本庫 — 三段式存檔

Word 的存檔,是「蓋掉上一個版本」。
Git 的 commit,是「留下每一個版本,永遠可以回去」。

Act I 開幕
— Version Control —
Problem · 為什麼存檔不夠
05 / 38 講義 · CH5-3
傳統存檔(Word / Photoshop)

蓋掉舊版

  • · 檔名加 v2 / v3 / final / final-真的-final.docx
  • · 改壞了只能 Ctrl+Z 連按,超過 50 步救不回來
  • · 要回到「上週三那個版本」幾乎不可能
  • · 多人改同一檔 → 互相蓋掉
Git commit(程式碼專用)

留下每個版本

  • · 每次 commit = 一個帶說明的快照
  • · 可以 git log 翻全部歷史
  • · 可以 git checkout 跳回任何一個過去的版本
  • · 兩人在不同分支改 → Git 幫你合併(merge)
Page 05 · Save vs Commit
— Why Git —
Three Stages · Git 的三個區域
06 / 38 講義 · CH5-3
Working → Staging → Repository

檔案會經過三個區

暫存區(Staging)的存在,是讓你「改了五個檔,這次只挑三個進 commit」——commit 才能精準。

Stage 01

工作區

Working Directory
你正在編輯的檔案,存在硬碟上的本體

edit · save

Stage 02 · git add

暫存區

Staging Area
準備要 commit 的修改清單,可以挑進挑出

git add <file>

Stage 03 · git commit

版本庫

Repository
永久保存的快照,每個都有 message 說明為何而改

git commit -m "..."

Page 06 · 三段式
— Space/→ 推進 —
First Repo · 第一次用 Git 的三步驟
07 / 38 講義 · CH5-3
init · add · commit

三個指令,第一個 repo 就成型。

01 · git init
在資料夾裡建一個隱藏的 .git 資料夾——從這刻起 Git 開始追蹤這個目錄的所有變動。一個專案做一次就好。
02 · git add .
把目前所有檔案放進暫存區。「.」代表所有檔案;也可以指定 git add index.html 只加單一檔。
03 · git commit -m "..."
把暫存區的內容打包成一個 commit,留下永久快照。-m 後面的就是這次的說明(commit message)。
+ git status
隨時看「現在有哪些檔被改了、哪些已 add、哪些還沒」——卡住時先打這個指令幾乎都能找到方向。
Page 07 · 第一個 repo
— Hands-on ready —
Write Why · commit message 怎麼寫
08 / 38 講義 · CH5-3
The Rule · 寫「為什麼」,不寫「改了什麼」

Git 自己記得你改了哪幾行

所以你寫的 message 不該重複它。要寫的是「我為什麼決定這樣改」。

無用 ✕
update button
fix bug
修改首頁
asdfasdf
三個月後翻紀錄毫無幫助——Git 已經會告訴你哪幾行被改了。
有用 ✓
修正送出按鈕在 iOS Safari 無法點擊的問題
首頁 hero 改成兩欄,配合 D11 招生頁設計稿
移除 jQuery 依賴,改用原生 fetch
三個月後翻紀錄能立刻想起當時為什麼決定動這塊。
Page 08 · commit message
— Why over What —
Inspect & Restore · 查 / 比 / 還
09 / 38 講義 · CH5-3
log · diff · checkout

反悔的三個動作

git log
列出所有 commit 的 hash + 時間 + message。常用 git log --oneline 看一行版。
git diff
看「現在的工作區」跟「最後一次 commit」差在哪。也可以 git diff <commit-A> <commit-B> 比兩個版本。
git checkout
跳回某個過去的 commit 看當時的檔案狀態。git checkout -- <file> 可以丟掉某檔的未 commit 修改。
初學者最怕的事:「我會不會把整個專案弄壞?」不會。只要有 commit 過,東西就在那裡——Git 的設計就是讓你放心亂試
Page 09 · 反悔三件套
— Safely Experiment —
.gitignore · 別讓不該進 repo 的東西進來
10 / 38 講義 · CH5-3
The Filter · Git 的「無視清單」

每個專案第一個建立的檔案。

在專案根目錄建一個叫 .gitignore 的檔,每行一個 pattern——這些檔案 Git 會完全當作不存在。

Web 專案最低必填
.env
.env.local
node_modules/
.DS_Store
dist/
*.log
為什麼一定要這樣
  • · .env = 你的密碼與 API 金鑰,外洩等於被盜刷
  • · node_modules/ = 動輒幾百 MB,從 package.json 重裝就好
  • · .DS_Store = macOS 的廢檔,給其他系統的人看到很尷尬
  • · dist/ = 編譯產物,每次部署會重生
Page 10 · .gitignore
— First file you write —
Push to GitHub · 從本機到雲端的四步驟
11 / 38 講義 · CH5-3
Local → Remote

本機 repo 變成網路 repo

01 · 在 GitHub 建空 repo
github.com / New repo / 不勾任何初始檔(不要 README、不要 .gitignore,本機已經有了)。建完它會給你一段指令。
02 · git remote add origin <URL>
告訴本機 repo「你的雲端家在這個 URL」。origin 是慣例的遠端名稱,可以不只一個。
03 · git branch -M main
把預設分支改名為 main(有些舊版 Git 預設是 master,GitHub 預設是 main,統一一下避免推不上去)。
04 · git push -u origin main
第一次推送加 -u(upstream),之後只要 git push 就好。整個 commit 歷史一次上傳到 GitHub。
之後每次更新流程:改檔 → git add .git commit -m "..."git push。四個動作就是你後半輩子的工程節奏。
Page 11 · Push to remote
— Your daily loop —
Common Pitfalls · 新手最常踩的坑
12 / 38 講義 · CH5-3
Survival Kit · 卡住時看這裡

四個救命指令

不知道現在狀況
先打 git status。它會告訴你哪些檔被改、哪些已 add、哪些還沒——九成的卡關都是搞不清現在處於哪個階段。
add 錯了想反悔
git restore --staged <file>。把已 add 的檔退回工作區,但不會丟掉你的修改內容。
commit message 打錯字
git commit --amend -m "新訊息"。只能改最後一個 commit;如果已經 push 了則需要 -f 強推(多人專案先問清楚)。
push 被擋(remote 比較新)
git pull --rebase 把遠端新東西拉下來,再 push。九成發生在你忘記 pull 直接 commit 的時候。
Page 12 · 救命指令
— git status first —
CH5-3 收束 · 為何要學會反悔
13 / 38
End of Act I · 把 Git 接到後端之前
不會 Git 的人, 不敢大膽改、大膽試 這就是區隔「業餘」與「專業」的那條線

接下來 CH5-4 我們把這個能力升級——學會把 API 金鑰藏好、把含後端的 AI 工具公開部署。

— CH 5.3 收束·下一站:CH 5.4 含後端服務的完整部署
Page 13 · End of Act I
— → Act II —
第二幕 · 含後端服務的完整部署
Act II · 14 / 38
Act II · CH 5.4 · 3 hr 課堂 + 2 hr 自學

讓 API 金鑰
不外洩

環境變數 · /api/ask · Railway · Render

前端寫死 API key 等於把家裡鑰匙貼在大門外。
這一幕教你怎麼把鑰匙搬到後端,前端只跟你的後端講話。

Act II 開幕
— Backend Proxy —
Static vs Backend · 什麼時候你需要後端
15 / 38 講義 · CH5-4
Two Types · 兩種網站架構

不是所有工具都需要後端

D10 學的個人作品頁、PRAC4-1/2 那種純前端工具——靜態就夠。但只要有 API 金鑰、要存資料、要跨裝置同步,就必須上後端。

靜態網站(D10 範圍)

純 HTML/CSS/JS

  • · 部署:GitHub Pages / Vercel / Netlify
  • · 成本:免費
  • · 適合:作品集、文件、單頁工具、計算器
  • · 不能放任何 API 金鑰
含後端(D11 升級)

前端 + 自己的 server

  • · 部署:Railway / Render(後端)+ Vercel(前端)
  • · 成本:每月免費額度,超過幾美金
  • · 適合:呼叫 OpenAI / Anthropic API、要存資料
  • · 金鑰放在後端環境變數
Page 15 · 兩種架構
— Pick one per project —
Decision Tree · 該選哪一種
16 / 38 講義 · CH5-4
Three Questions · 對每個工具問三題

三題都「不用」,靜態就好。

三題裡任一題是「要」,就需要後端(或 BaaS 像 Supabase 也算)。

Q1
要不要
藏 API key?
要呼叫 OpenAI / Anthropic / 任何付費 API → 鑰匙絕對不能放前端 → 需要後端代理。
Q2
要不要
存資料?
使用者輸入要被記住下次再用?要記帳、要存對話歷史 → 需要後端 + 資料庫(或 Supabase 這類 BaaS)。
Q3
要不要
跨裝置同步?
手機開的內容電腦也要看到 → localStorage 不夠 → 需要後端帳號系統。
Page 16 · Decision Tree
— 3 Yes/No —
API Key Security · 鑰匙不能放這些地方
17 / 38 講義 · CH5-4
Where NOT · 三個禁區

金鑰外洩 = 數小時內被盜刷數千美金

網路爬蟲一直在掃 GitHub 找暴露的金鑰,速度比你想的快。先建立鐵則,再學技術。

禁區 01
絕對不能寫在前端 JS 檔——所有人開瀏覽器 F12 都看得到。
禁區 02
絕對不能 commit 進 Git——就算只 commit 一秒鐘再 amend 掉,歷史紀錄裡永遠都在。
禁區 03
絕對不能傳給 AI 對話框、貼進公開 doc、寄信、Slack——你不會知道誰備份了它。
已經不小心推上去了怎麼辦?第一步不是刪 commit。第一步是立刻去 Anthropic Console / OpenAI 後台 revoke 那把金鑰,產一把新的。Git 歷史裡的那把已經要當作全世界都看得到——它不能再用了。
Page 17 · 鐵則
— Revoke first, fix later —
The .env Setup · 三檔搭配的標準姿勢
18 / 38 講義 · CH5-4
.env · .gitignore · .env.example

三個檔案互相照應

File 01 · 不進 git

.env

ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
PORT=3000

真的金鑰放這裡,自己機器才看得到。

File 02 · 守門員

.gitignore

.env
.env.local
node_modules/

擋住 .env 進 git。每個專案的第一個檔。

File 03 · 進 git 的範本

.env.example

ANTHROPIC_API_KEY=
OPENAI_API_KEY=
PORT=3000

給其他人(或未來的自己)看「需要哪些變數」,留欄位但不填值。

Page 18 · .env 三檔組
— Space/→ 推進 —
Backend Skeleton · 一個 /api/ask 路由就夠
19 / 38 講義 · CH5-4
Minimum Backend · Node.js + Express 版

後端最小骨架 ≈ 30 行

不用學整個後端框架——只要一條路由:前端 POST 過來 → 後端讀 .env 的 key → 呼叫 Anthropic → 回傳結果。Python Flask 版概念完全一樣,約 20 行。

// server.js
import express from "express";
import Anthropic from "@anthropic-ai/sdk";
import "dotenv/config";

const app = express();
app.use(express.json());
app.use(express.static("public")); // 前端放 public/

const client = new Anthropic(); // 自動讀 process.env.ANTHROPIC_API_KEY

app.post("/api/ask", async (req, res) => {
  const msg = await client.messages.create({
    model: "claude-3-5-sonnet-latest",
    max_tokens: 1024,
    messages: [{ role: "user", content: req.body.prompt }],
  });
  res.json({ reply: msg.content[0].text });
});

app.listen(process.env.PORT || 3000);
Page 19 · /api/ask
— 30 lines is enough —
Anatomy · 拆解這 30 行在做什麼
20 / 38 講義 · CH5-4
Four Concepts · 後端代理的四個觀念

四個動作合起來叫「後端代理」

01 · 讀環境變數
dotenv 套件把 .env 載進 process.env。Anthropic SDK 會自動讀 ANTHROPIC_API_KEY,不用手動傳。
02 · 開一個 POST 路由
前端用 fetch("/api/ask", {method:"POST", body: JSON.stringify({prompt})}) 把問題送過來。後端在 req.body 拿到。
03 · 後端代呼 AI
後端拿著金鑰呼叫 Anthropic API。整個過程前端看不到金鑰、也看不到 API endpoint——只看到「我家後端」。
04 · 回傳給前端
把 AI 回答用 res.json() 送回去。前端 fetch 拿到後渲染到畫面上。
Page 20 · Backend anatomy
— Proxy pattern —
Deploy to Railway · 從 GitHub 到公開網址
21 / 38 講義 · CH5-4
Five Steps · 一次性設定,之後 push 即部署

後端上線五步驟

Step 01

推 GitHub

確認 .env 在 .gitignore 裡,再 git push。

Step 02

連結 repo

Railway 登入用 GitHub 帳號 → New Project → 選你的 repo。

Step 03

填環境變數

Variables 頁籤 → 把 .env 裡的每行貼上去。這是金鑰真正放的地方

Step 04

等 build

Railway 自動偵測 package.json → npm install → npm start。看 Logs 確認沒錯誤。

Step 05

取得網址

Settings → Generate Domain → 拿到 .up.railway.app 公開網址。

之後每次更新:本機改好 → git push。Railway 偵測到新 push 自動重新部署,不用回平台操作。
Page 21 · Deploy
— Push to deploy —
Debug Deploy · 部署失敗怎麼辦
22 / 38 講義 · CH5-4
The Big 4 · 第一次部署最常見的四個錯

九成的部署失敗都是這四個

缺 start script
package.json 沒寫 "scripts": {"start": "node server.js"},Railway 不知道怎麼跑你的程式。
PORT 寫死了
app.listen(3000) 不行——Railway / Render 會動態指派 port。要寫 app.listen(process.env.PORT || 3000)
忘記填環境變數
本機跑得好好的,Railway 一跑就 401 / undefined——99% 是忘記在 Variables 頁籤把 ANTHROPIC_API_KEY 填上去。
前端打錯後端網址
部署後前端的 fetch URL 還是 http://localhost:3000。要改成相對路徑 /api/ask,或 Railway 給的網址。
Debug 第一動作:去 Deployment Logs 頁籤。Railway / Render 都把 build 與 runtime 錯誤訊息全部寫在這裡,貼給 AI 幾乎都能秒解。
Page 22 · Debug Deploy
— Read the logs —
CH5-4 收束 · 上手做的時候到了
23 / 38
End of Act II · 概念講完,剩下用做的
看懂後端代理只需要 30 分鐘。 第一次跑通整套大概要踩三個坑 所以接下來兩個 PRAC 我們現場一起踩

PRAC5-3 先做純前端的作品集首頁練 Git 部署節奏;
PRAC5-4 再上含後端的完整工具,把今天所有觀念串成一條工作流。

— CH 5.4 收束·下一站:PRAC 5.3 個人作品展示首頁
Page 23 · End of Act II
— → Hands-on —
第三幕 · 個人作品展示首頁
Act III · 24 / 38
Act III · PRAC 5.3 · 1.5 hr 動手

把所有工具
串成一頁

portfolio.html · 卡片清單 · 部署

你前面做的 PRAC4-1 ~ PRAC4-4、PRAC5-1 v2,散落在不同 URL。
這一節把它們整合成一張首頁——同時也是練 Git push 的最好機會。

Act III 開幕
— Portfolio Page —
The Brief · 你接下來 1.5 小時要做什麼
25 / 38 講義 · PRAC5-3
Goal · 一頁、3-6 張卡、一個 URL

做出一個能放履歷的網址

每張卡 = 一個工具:名稱 + 一句話說明 + 連結。產出後 git push,PRAC5-2 設過的部署會自動更新。

關鍵心法 · 一句話法則:每個工具用「一句話說清楚它能解決什麼問題」,不要寫技術描述。
✕ 使用 NLP 的會議摘要工具
✓ 把會議逐字稿自動整理成行動清單
Why 練這個?履歷上一行「會用 AI 開發工具」沒人信。一個能點開的網址、上面五個你做的工具——這就是你 D11 結束帶走的第一份對外名片
Page 25 · Brief
— Your business card —
Workflow · 1.5 小時的四個動作
26 / 38 講義 · PRAC5-3
List → Fill → Copy → Push

四個動作串成一條工作流

Step 01 · 5 min

列工具清單

把 PRAC4-1 ~ PRAC4-4、PRAC5-1 v2 全列出來。挑 3 ~ 6 個最完整的。

Step 02 · 30 min

填生成器

打開 PRAC5-3 內建生成器,每個工具填名稱、一句話說明、連結。

Step 03 · 20 min

複製 HTML

點「生成首頁 HTML」→ 複製到 portfolio.html。瀏覽器開來確認樣式。

Step 04 · 25 min

推送部署

git add / commit / push。Vercel 偵測到新 push 自動重新部署,等 60 秒拿到網址。

Page 26 · 四步流程
— Space/→ 推進 —
Card Generator · 連結要填相對還是絕對
27 / 38 講義 · PRAC5-3
Tactics · 兩個現場最常被問的問題

連結怎麼填?看部署形式

情境 A · 工具與首頁同 repo

用相對路徑

part4/PRAC4-2.html
tools/expense-tracker.html

優點:repo 改名 / 換 domain 都不用改連結。

情境 B · 工具部署到獨立網址

用完整 URL

https://my-tool.vercel.app
https://expense.up.railway.app

優點:每個工具獨立 repo / 獨立部署,可單獨更新。

Page 27 · 連結策略
— Pick per case —
Delivery Rubric · 三段交付清單
28 / 38 講義 · PRAC5-3
Three 30-min Blocks · 每段交一樣東西

每 30 分鐘拿出一個成品

第 1 段(30 min)
列出 3-6 個工具的清單(名稱、一句話、URL),用 PRAC5-3 生成器逐一輸入完成 → 截圖傳到群組。
第 2 段(30 min)
複製生成的 HTML 到本機 portfolio.html,瀏覽器開啟確認樣式正確 → 拍螢幕照傳到群組。
第 3 段(30 min)
git add / commit / push 到 GitHub,等 Vercel 自動部署完成 → 把公開網址貼到群組,這是今天的交付物。
卡關時:不要悶頭硬撞。先在群組貼出「我卡在第 X 段,錯誤訊息是 ...」,講師或同學會在五分鐘內回。Git / 部署的錯誤 80% 都是同一批問題。
Page 28 · Rubric
— Show before fix —
Done? · 結束前自檢
29 / 38 講義 · PRAC5-3
Self-check · 五個勾選

離開教室前確認這五件

□ 01
portfolio.html 在公開網址打得開(不是 localhost、不是 file://)
□ 02
有 3-6 張工具卡片,每張的「一句話」都不是技術術語
□ 03
每張卡的連結點下去都打得開(沒有 404)
□ 04
這個 URL 已經貼到群組(講師可立即點開)
□ 05
這個 URL 已經存進你的「我的作品集」工具,下次自動跟你結業作品一起匯出
Page 29 · End of Act III
— → Final Act —
第四幕 · 含後端代理的完整部署
Act IV · 30 / 38
Act IV · PRAC 5.4 · 2 hr 動手

把今天
全部串起來

Git + .env + 後端 + Railway — 一條工作流

D11 最重的 PRAC。
做完你會帶走一個含後端的 AI 工具,部署在公開網址上,金鑰放在 Railway 環境變數

Act IV 開幕
— Full-stack Deploy —
The Brief · 你接下來 2 小時要做什麼
31 / 38 講義 · PRAC5-4
Goal · 一個工具、一支 server、一個公開網址

把 CH5-4 的程式碼變成你的工具

不用從零寫——直接複製 CH5-4 的 server.js 當起點,改 prompt 邏輯就好。前端可以是任何一個你之前做過的 PRAC4 工具。

建議題目(任選):
  • · 會議逐字稿 → 行動清單(最熱門,輸入框 + 按鈕 + 結果區)
  • · 客戶意見分類器(分四類:抱怨/建議/讚美/提問)
  • · 履歷一句話強化器(貼一句弱版本,回三個強版本)
  • · 任何 PRAC4 做過的工具,只要原本是「在前端寫 OpenAI key」就改成走後端
關鍵心法:不要重做前端 UI——挑 PRAC4 你最滿意的工具,把它的「呼叫 AI」那段抽出來放到後端就好。整個 PRAC 的學習重點是「後端在哪、金鑰怎麼藏」,不是 UI。
Page 31 · Brief
— Reuse front-end —
Workflow · 2 小時的五個動作
32 / 38 講義 · PRAC5-4
init → install → .env → test → deploy

五個動作串成一條完整工作流

01 · 10 min

建專案

mkdir my-ai-backend
cd my-ai-backend
npm init -y

02 · 20 min

裝套件 + 程式碼

npm i express
@anthropic-ai/sdk dotenv
// 貼 CH5-4 server.js

03 · 10 min

三檔組

.env
.gitignore
.env.example

04 · 30 min

本機跑通

node server.js
localhost:3000
確認 AI 回得來

05 · 50 min

推 + 部署

git push
Railway 連 repo
填 ENV → 拿網址

Page 32 · 五步流程
— Space/→ 推進 —
Critical Step · 第 5 步最容易漏的事
33 / 38 講義 · PRAC5-4
The One Thing · 部署後沒填這個 = 工具直接報 401

Railway 的 Variables 頁籤

本機你的 .env 在自己電腦上有效。Railway 看不到你電腦——它要用自己的環境變數。沒填,就只有「undefined」。

本機(.env)
ANTHROPIC_API_KEY=sk-ant-real-key-xxxxx
PORT=3000

node server.js 會讀這個

Railway(Variables 頁籤)
ANTHROPIC_API_KEY = sk-ant-real-key-xxxxx
// PORT 不用填,Railway 自動帶

部署版本會讀這個

.env.example 的角色:進 git,內容只有變數名稱沒有值。三個月後你(或同事)clone 這個 repo,看 .env.example 就知道「啊,要建一個 .env 填這幾個變數才能跑」——這就是你給未來自己的說明書
Page 33 · Variables
— Local ≠ Cloud —
Full-stack Checklist · 全端部署檢查清單
34 / 38 講義 · PRAC5-4
Done = 八勾全綠

全部勾完才算 PRAC5-4 完成

本機端
  • □ npm init / install 都成功
  • □ .env 裡有真實的 ANTHROPIC_API_KEY
  • □ .gitignore 有把 .env 擋住
  • □ node server.js 能跑、localhost 能呼叫 AI
雲端
  • □ git push 成功,GitHub 看得到 commit
  • □ GitHub repo 裡沒有 .env
  • □ Railway Variables 頁籤填了 ANTHROPIC_API_KEY
  • □ Railway 給的公開網址打得開、AI 回得來
第二項要特別檢查:有時候第一次 commit 已經把 .env 推上去了,後面才補 .gitignore——這時 .env 還在 git 歷史裡。要打 git rm --cached .env + 立刻去 Anthropic 後台 revoke 那把金鑰、產新的。
Page 34 · Checklist
— 8 boxes —
Pitfalls · D11 總整理:你會遇到的所有坑
35 / 38 講義 · PRAC5-4
The Survival Guide · 帶回家備用

D11 全坑一頁清單

部署後 401
99% 是 Railway Variables 沒填 ANTHROPIC_API_KEY。回 Variables 頁籤補填,等 redeploy。
部署 build 失敗
看 Deployment Logs。最常見:package.json 沒 start script、或 node 版本太舊(在 package.json 加 "engines":{"node":">=18"})。
Application failed to respond
PORT 寫死成 3000 了。Railway 會給你一個動態 port,必須用 process.env.PORT || 3000
前端 fetch 失敗(CORS)
前端、後端不同 domain 時。後端裝 cors 套件 → app.use(cors())。或乾脆讓 Express 用 express.static 一起服務前端。
.env 已經被推上去
立刻 revoke 金鑰——第一動作。然後 git rm --cached .env、補 .gitignore、commit、push。
本機改了 push 後 Railway 沒更新
Railway 沒設好 webhook。回 Settings → Deploy 區看 Auto Deploy 是否打勾。或手動點 Redeploy 一次。
Page 35 · Pitfalls
— Take this home —
To Be Continued · D12 預告
36 / 38
D11 → D12 · 第十二天會發生什麼事

速通工具庫

八個小工具一天速做完

D11 你學會了完整工作流——慢、扎實。
D12 我們用同一套工作流,一天速做八個小工具:抽籤器、看板、倒數牆、Kanban……
讓「全端部署」從第二次開始變成肌肉記憶

Day Twelve Preview
— PRAC 5.5 ~ 5.12 —
Tools Map · 今天用到的工具一頁清單
37 / 38
One-page Tools Map · 帶回家速查

D11 用到的所有工具

Git CLI
init / status / add / commit / log / diff / checkout / push / pull——10 個指令打天下。卡住先打 status。
GitHub
遠端 repo 與部署 webhook 的中介。免費方案個人專案夠用一輩子。
.env + .gitignore + .env.example
三檔組合是「後端開發的標準起手」。每個專案的第一個動作。
Express + dotenv + Anthropic SDK
後端最小組合。30 行程式碼搞定 /api/ask。Python Flask 替代品也行。
Railway / Render
含後端的部署平台。連 GitHub repo + 填環境變數 + 等 build = 公開網址。每月免費額度。
Vercel / GitHub Pages
純靜態前端的部署平台。Vercel 偵測 push 自動 redeploy,GitHub Pages 在 Settings 開啟。
Page 37 · D11 工具地圖
— Take this home —
D11 · End
38 / 38
End of Day Eleven · 9 hours · 2 CH + 2 PRAC

To Be
Continued

D12 · 速通工具庫(PRAC 5.5 ~ 5.12)

今天你帶走了會反悔(Git)+ 會藏鑰匙(.env)+ 會上線(Railway)——
明天我們把這套工作流跑八次,讓它變成你身體的一部分。

Vol.11·D11 / 20·弄一下工作室
明天見 · See you tomorrow
— D12 / 20 —