01網站部署與版本控制的基本觀念
前五章完成的金融網站目前只在個人電腦中執行。若網站只保存在本機,會遇到:其他人無法透過網路使用、電腦故障可能遺失檔案、修改錯誤後不容易回復舊版本、不同電腦之間難以同步,以及無法建立正式網址等問題。
反面教材:檔名版本控制——很多初學者用這種方式管理版本,不可持續:
網站最新版.html 網站最新版2.html 網站最新版最後.html 網站最新版最後修正版.html 網站最新版真的最後.html ← 真的是最後嗎?
這種方式的問題:無法判斷哪一個才是正確版本、不知道每個版本修改了什麼、修改錯誤時難以回復、多人合作時容易覆蓋彼此的檔案、不同電腦之間無法同步。
版本控制的好處:以 Git commit 管理版本
| 版本 | commit 訊息 | 日期 |
|---|---|---|
| v1 | 建立首頁 | 2026-01-10 |
| v2 | 新增複利計算器 | 2026-01-15 |
| v3 | 新增債券 JSON 資料庫 | 2026-02-01 |
| v4 | 修正 JSON 格式錯誤 | 2026-02-03 |
| v5 | 新增股票圖表 | 2026-02-20 |
若 v5 發生嚴重錯誤,可以立即回到 v4,不需要依賴人工備份的「最終版」。這就是版本控制的核心價值。
02Git、GitHub 與 Cloudflare Pages 的差異
| 工具 | 主要功能 | 不負責的事 |
|---|---|---|
| Git 版本控制工具(本機) | 記錄每次檔案修改、建立版本(commit)、比較差異、回復舊版本、建立分支(branch)、合併修改(merge) | 不等於雲端,也不等於網站 |
| GitHub Git 專案託管平台(雲端) | 保存 Repository、顯示每次 commit、多人協作、連接 Cloudflare Pages、Issues 與專案管理 | 不負責部署網站,不執行程式 |
| Cloudflare Pages 靜態網站部署服務 | 連接 GitHub Repository、自動取得最新檔案、建立公開網址(pages.dev)、提供 HTTPS、偵測 push 後自動重新部署、綁定自有網域 | 不負責撰寫程式,不取代 Git 版本控制 |
03Repository 的基本概念
Repository(簡稱 Repo)可以理解為「一個具有版本紀錄的專案資料夾」。金融網站的 Repository 包含所有 HTML、CSS、JavaScript、JSON、圖片、Python 程式與說明文件。
financial-platform/ ├─ index.html ← 第一章:複利計算器 ├─ time-value.html ← 第二章:貨幣時間價值 ├─ bond-database.html ← 第三章:債券資料庫 ├─ visualization.html ← 第五章:金融圖表 ├─ css/ ← 所有 CSS 樣式 ├─ js/ ← 所有 JavaScript ├─ data/ ← JSON、CSV 資料 ├─ images/ ← 圖片資源 ├─ output/ ← Plotly 輸出 HTML ├─ python/ ← Python 分析程式 ├─ README.md ← 專案說明(必填) └─ .gitignore ← 排除不應上傳的檔案
Public vs Private Repository
| 設定 | 說明 | 適合情境 | 注意 |
|---|---|---|---|
| Public | 任何人都可查看程式碼 | 開源專案、教學示範、個人作品集 | 機密資料仍不能上傳! |
| Private | 只有授權使用者可查看 | 尚未公開的商業專案、個人管理工具 | Private ≠ 安全儲存密碼的地方 |
即使 Repository 設為 Private,也絕對不能將 Token、密碼或 API 金鑰上傳。私人專案仍可能因設定錯誤、權限分享或帳號遭入侵而外洩。
04建立 GitHub Repository
登入 GitHub 後,新建 Repository 的操作步驟:選擇 New repository → 輸入名稱(建議英文小寫連字號格式)→ 填寫說明 → 選擇 Public 或 Private → 可勾選建立 README → 建立。
| 建議命名(✓) | 避免的命名(✗) | 原因 |
|---|---|---|
| financial-platform | 新網站 | 中文名稱在部分環境可能有相容問題 |
| financial-learning-tools | 最後版 | 無意義名稱,未來難以辨識用途 |
| finance-education-site | test / website123 | 命名與專案用途不符 |
05建立 README.md
README.md 是專案說明文件,顯示在 Repository 首頁。應包含:專案名稱與目的、主要功能、資料夾結構、本機測試方式、免責聲明。
# 金融程式設計與知識網站實作 本專案是一個金融教育與分析工具網站,包含複利、 貨幣時間價值、債券資料庫、股票分析與互動圖表。 ## 主要功能 1. 複利終值計算器(index.html) 2. 現值與終值計算器(time-value.html) 3. 債券 JSON 資料庫(bond-database.html) 4. 股票 CSV 資料清理與報酬分析(python/stock-analysis.py) 5. Chart.js 金融圖表(visualization.html) 6. Plotly 互動圖表(python/stock-charts.py) ## 本機測試 在專案資料夾中執行: ```bash python -m http.server 8000 ``` 瀏覽器開啟 http://localhost:8000 ## 免責聲明 本專案僅供金融教育、程式設計與情境試算使用, 不構成任何投資建議或報酬保證。
06建立 .gitignore
.gitignore 用來告訴 Git 哪些檔案不應加入版本控制。即使這些檔案存在本機,Git 也不會追蹤或上傳它們。
# Python 虛擬環境(不上傳,佔用空間且含平台設定) .venv/ venv/ # Python 快取 __pycache__/ *.pyc # ⚠️ Streamlit 機密設定(絕對不能上傳) .streamlit/secrets.toml # ⚠️ 環境變數(絕對不能上傳) .env .env.* !.env.example ← 範例檔案(不含實際值)可以上傳 # ⚠️ Token 與金鑰檔案(絕對不能上傳) token.txt secrets.json credentials.json # 作業系統暫存檔 .DS_Store ← macOS Thumbs.db ← Windows # 編輯器設定 .vscode/ .idea/ # 暫存與日誌 *.tmp *.bak *.log # 個人或未公開資料 data/private/ data/personal/
.gitignore 的限制:若某個檔案已被 Git 追蹤,後來才加入 .gitignore,Git 仍會繼續追蹤。此時需用 git rm --cached 檔案名稱 解除追蹤,再重新 commit。若 Token 已被上傳:不能只刪除最新版本!它仍存在舊 commit 中,應立即 revoke Token → 建立新 Token → 清理 Git 歷史 → 更新本機設定。
07哪些檔案應上傳、哪些絕對不能上傳
| ✅ 通常可以上傳 | ❌ 絕對不能上傳 |
|---|---|
| index.html 等 HTML 頁面、css/、js/、data/bonds.json(教學用)、images/、python/stock-analysis.py、output/、README.md、.gitignore | GitHub Token / Cloudflare API Token、帳號密碼、API 金鑰、.streamlit/secrets.toml、.env、學生個資、未授權金融資料、.venv/、暫存檔 |
前端 JavaScript 不能藏密碼
// ✗ 這樣寫是嚴重錯誤! const apiKey = "sk-xxxxxxxxxxxxxxxxxxxxxxxx"; // 問題:瀏覽器下載整份 JS 檔案給使用者, // 任何人按 F12 → Sources 就能看到這個金鑰! // ✓ 正確做法: // 1. 金鑰放在伺服器端(Node.js / Python 後端) // 2. 使用環境變數(.env,已加入 .gitignore) // 3. 使用 Cloudflare Workers Secrets 或 GitHub Secrets
凡是寫在 HTML、CSS 或前端 JavaScript 中的資料,都會傳送到使用者的瀏覽器。機密金鑰在前端完全無法真正保密。
08使用 GitHub 網頁上傳檔案(初學者友善方式)
若尚未安裝 Git,可先使用 GitHub 網頁介面上傳檔案。操作方式:進入 Repository → Add file → Upload files → 拖曳檔案 → 填寫 commit 訊息 → 確認提交。
不可將所有檔案平放在同一層!應保留 css/style.css、js/calculator.js、data/bonds.json 的資料夾結構,否則 HTML 中的相對路徑會全部失效。
commit 訊息範例
| ✓ 好的 commit 訊息 | ✗ 差的 commit 訊息 | 差在哪裡 |
|---|---|---|
| Add compound interest calculator | 更新 | 不知道更新了什麼 |
| Fix mobile chart layout | 修改 | 太模糊 |
| 新增手機版圖表 | test | 沒有意義 |
| 修正債券資料篩選邏輯 | 123 | 數字不是說明 |
commit 訊息應簡短說明「修改了什麼」。英文或中文都可以,重點是讓三個月後的自己(或合作者)一眼看懂這次修改的目的。
09使用 Git 與 PowerShell 管理版本
# 確認 Git 已安裝 git --version # 設定使用者名稱(出現在 commit 紀錄中,首次使用執行一次) git config --global user.name "Your Name" git config --global user.email "your-email@example.com" # 確認設定 git config --list
10完整 Git 第一次上傳流程
# 步驟 1:進入專案資料夾 cd C:\financial-platform # 步驟 2:初始化 Git(建立 .git 隱藏目錄) git init # 步驟 3:查看狀態(確認哪些檔案待追蹤) git status # 步驟 4:加入所有檔案到暫存區 git add . # 步驟 5:建立第一個 commit git commit -m "建立金融網站初始版本" # 步驟 6:設定主要分支名稱為 main git branch -M main # 步驟 7:連接 GitHub Repository(貼上你的 Repository 網址) git remote add origin https://github.com/帳號/financial-platform.git # 步驟 8:第一次推送 git push -u origin main # ── 若 GitHub 已有 README(非空 Repository),需先 pull ── # git pull origin main --rebase # 再重新執行步驟 8
本節的完整流程可以到「示範分頁」逐步點擊執行,看每一個指令實際會輸出什麼結果。
11日常更新流程
# 查看修改狀態 git status # 加入所有修改 git add . # 建立說明修改內容的 commit git commit -m "修正債券資料庫篩選邏輯" # 推送到 GitHub(Cloudflare 會自動重新部署) git push
push 前的安全確認清單:本機測試通過、JSON 格式有效、圖片路徑正確、git status 無可疑機密檔案。
12常用 Git 指令速查表
| 指令 | 用途 | 初學者常見情境 |
|---|---|---|
| git init | 在目前資料夾初始化 Git Repository | 第一次使用 Git 時執行一次 |
| git status | 查看修改狀態與準備提交的檔案 | 每次 add/commit 前先確認 |
| git add . | 將所有修改加入暫存區 | 或 git add index.html 指定檔案 |
| git commit -m "..." | 建立版本紀錄,附上說明訊息 | 訊息要描述修改內容 |
| git push | 將本機 commit 上傳至 GitHub | 第一次:git push -u origin main |
| git pull | 從 GitHub 下載最新版本並合併 | 換電腦前或多人協作時先執行 |
| git clone <網址> | 第一次將 GitHub 專案下載到新電腦 | 複製整個 Repository,含所有 commit 歷史 |
| git log --oneline | 查看精簡的 commit 紀錄 | 找出需要回復的 commit ID |
| git revert <commit> | 建立反向修改 commit(安全回復) | 不改寫歷史,適合已 push 的情況 |
| git switch -c <分支名> | 建立並切換到新分支 | 開發新功能時,避免影響 main |
| git tag -a v1.0 -m "..." | 建立版本標籤 | 正式上線前標記重要版本 |
commit / push / pull / clone 的差別
| 指令 | 資料流向 | 執行時機 |
|---|---|---|
| git commit | 修改 → 本機版本 | 每次完成一個邏輯單元的修改 |
| git push | 本機版本 → GitHub | commit 後,或準備部署前 |
| git pull | GitHub → 本機 | 換電腦前、多人協作時先同步 |
| git clone | GitHub → 全新本機資料夾 | 第一次在新電腦取得專案 |
13branch 分支概念
branch 讓你在不影響正式網站的情況下開發新功能。main 是正式穩定版本,feature/bond-tool 等功能分支在獨立環境中開發,測試通過後再合併回 main。
# 建立並切換到新分支 git switch -c feature/bond-tool # 在新分支中修改、commit、push... # 切回 main git switch main # 合併功能分支 git merge feature/bond-tool # 推送合併結果 git push
個人小型專案前期可以只用 main。當開始開發大型新功能、測試付費功能、或多人協作時,再引入分支開發流程。
14建立 Cloudflare Pages 專案
部署前最重要的確認:GitHub Repository 中必須有 index.html。若沒有,網站根目錄無法正常顯示首頁。
| 步驟 | 操作說明 |
|---|---|
| ① 進入 Cloudflare | 登入 Cloudflare → Workers & Pages |
| ② 建立應用程式 | 選擇建立應用程式 → Pages → 連接 Git |
| ③ 授權 GitHub | 授權 Cloudflare 存取 GitHub → 選擇 Repository |
| ④ 設定建置選項 | Framework preset: None;Build command: 留空;Build output directory: 根目錄或指定資料夾 |
| ⑤ 開始部署 | 點擊儲存並部署,等待 Cloudflare 完成 |
| 設定項目 | 本書建議 | 說明 |
|---|---|---|
| Framework preset | None | 純 HTML/CSS/JS,不需框架 |
| Build command | 留空 | 不需編譯,直接部署原始檔案 |
| Build output directory | 根目錄(或指定) | index.html 所在位置 |
設定錯誤最常見的結果:部署成功,但網站顯示 404。首要確認:Build output directory 設定是否指向 index.html 所在的資料夾。
15GitHub 更新與 Cloudflare 自動部署
| 部署類型 | 說明 | 觸發條件 |
|---|---|---|
| Production deployment | 正式網站更新 | push 到 main 分支 |
| Preview deployment | 預覽網址(不影響正式網站) | push 到其他分支(如 feature/xxx) |
使用 Preview deployment 的好處:在功能分支上測試新工具或新版首頁,確認無誤後才合併到 main,避免直接影響正式網站。
16自有網域設定
Cloudflare Pages 預設提供 https://專案名稱.pages.dev 網址。若要使用自有網域,可在 Pages 專案的 Custom domains 中新增。
| 比較項目 | pages.dev | 自有網域 |
|---|---|---|
| 網址 | https://financial-platform.pages.dev | https://example.com |
| 成本 | 免費 | 需購買網域(年費) |
| SEO | 一般 | 較有利 |
| 品牌識別 | 顯示 pages.dev | 顯示自有品牌名稱 |
17DNS 基本觀念
DNS(Domain Name System)可以理解為網路的地址簿。使用者輸入 example.com,DNS 告訴瀏覽器應連到哪個服務。
| 記錄類型 | 說明 | 金融網站常見用途 |
|---|---|---|
| A 記錄 | 將網域指向 IPv4 位址 | 根網域(example.com)指向 Cloudflare IP |
| AAAA 記錄 | 將網域指向 IPv6 位址 | 同上,IPv6 版本 |
| CNAME 記錄 | 將一個網域名稱指向另一個 | www.example.com → financial-platform.pages.dev |
| TXT 記錄 | 保存文字資訊 | 網域驗證、Google Search Console、Email 安全設定 |
若網域已由 Cloudflare 管理,Pages 綁定自有網域時,系統通常能自動建立所需 DNS 記錄。但仍應確認:無重複記錄、無指向舊網站的舊紀錄、www 與根網域都正常、HTTPS 已啟用。
18HTTPS 與 SSL 憑證
| HTTPS 的作用 | 說明 |
|---|---|
| 加密傳輸 | 瀏覽器與網站之間的資料傳輸加密,防止被攔截 |
| 增加信任 | 瀏覽器顯示「安全」標示,使用者更放心 |
| SEO 加分 | Google 對 HTTPS 網站有排名優勢 |
| 防止警告 | HTTP 網站在 Chrome 等瀏覽器顯示「不安全」警告 |
Mixed Content 警告:若網站使用 HTTPS,但頁面中載入了 HTTP 的圖片或程式,瀏覽器會顯示混合內容警告。所有資源都應使用 HTTPS 來源。
19相對路徑與絕對路徑
<!-- 相對路徑(推薦用於靜態網站)--> <link rel="stylesheet" href="css/style.css"> ← 從目前頁面位置往下找 css 資料夾 <!-- 根目錄路徑(以 / 開頭)--> <link rel="stylesheet" href="/css/style.css"> ← 從網站根目錄開始找 <!-- ✗ 本機絕對路徑(部署後一定失效)--> <img src="C:\\financial-platform\\images\\bond.png"> ← 部署環境沒有 C:/ 路徑,一定 404!
| 問題 | 說明 | 修正 |
|---|---|---|
| 本機正常、部署後 404 | Windows 對大小寫寬鬆,Linux/Cloudflare 嚴格區分 | 統一小寫檔名,路徑與檔名完全一致 |
| 圖片不顯示 | 使用了 C:\... 的本機絕對路徑 | 改用相對路徑 images/bond.png |
| 路徑有空格 | example.com/my folder/image.png 可能失效 | 檔名不用空格,改用連字號 |
20Token 與機密資料保護
| 特性 | Token | 帳號密碼 |
|---|---|---|
| 可限制權限 | ✅ 只授權特定操作(如 read-only) | ❌ 通常是全權限 |
| 可設有效期限 | ✅ 到期後自動失效 | ❌ 通常長期有效 |
| 可單獨撤銷 | ✅ revoke 後立即失效 | ❌ 需要更改密碼 |
Token 外洩的後果:具有寫入權限的 Token 被取得,攻擊者可能修改網站、刪除檔案、竊取私人 Repository 內容。懷疑外洩應立即 revoke,不要等它自然到期。
Token 外洩後的正確處理步驟
- 立即 revoke Token(GitHub Settings → Developer settings → Tokens → Revoke)
- 建立新 Token(最小必要權限 + 設定有效期限)
- 將 Token 移至安全位置(.env 或 secrets.toml,已加入 .gitignore)
- 清理 Git 歷史中的 Token 記錄(使用 git filter-repo 或聯繫 GitHub)
- 檢查帳號是否有異常操作紀錄
- 更新所有使用此 Token 的程式設定
Secrets 與環境變數的正確存放位置
| 使用場景 | 存放位置 | 加入 .gitignore |
|---|---|---|
| 本機 Python 開發 | .env 檔案 | 必須 ✅ |
| Streamlit 後台 | .streamlit/secrets.toml | 必須 ✅ |
| GitHub Actions CI/CD | GitHub Settings → Secrets | 不需要(平台管理) |
| 前端 JavaScript | ❌ 絕對不能存放機密 | 無意義,前端皆可見 |
21部署前安全檢查清單
| 類別 | 檢查項目 | 確認方式 |
|---|---|---|
| 安全 | 沒有 Token / 密碼 / API 金鑰 | git grep -i "token" |
| 安全 | 沒有 secrets.toml 或 .env | git status 查看待提交檔案 |
| 安全 | .gitignore 設定正確 | 確認機密檔案未出現在 git status |
| 程式 | 本機測試通過 | http://localhost:8000 逐頁確認 |
| 程式 | JSON 格式有效 | VS Code JSON 格式化工具或 jsonlint.com |
| 部署 | commit 訊息清楚說明修改內容 | 避免「更新」、「test」等無意義訊息 |
22十步驟完整部署操作流程
| 步 | 步驟名稱 | 操作說明 |
|---|---|---|
| ① | 整理專案 | 確認 index.html 位置、CSS/JS 路徑、JSON 格式、圖片已上傳、無機密檔案 |
| ② | 本機測試 | python -m http.server 8000 |
| ③ | 查看 Git 狀態 | git status |
| ④ | 加入暫存區 | git add . |
| ⑤ | 建立 commit | git commit -m "..." |
| ⑥ | 推送 GitHub | git push |
| ⑦ | Cloudflare 連接 GitHub | Workers & Pages → 建立應用 → Pages → 連接 Git |
| ⑧ | 檢查部署狀態 | 確認 Cloudflare 顯示成功,開啟 pages.dev 網址 |
| ⑨ | 全功能測試 | 首頁、CSS、JS、JSON、圖片、導覽、手機版、Plotly 圖表 |
| ⑩ | 綁定網域 + Tag | Custom domain → DNS → HTTPS;git tag -a v1.0 |
發布功能測試清單(步驟⑨)
| 測試項目 | 驗證方式 | 常見問題 |
|---|---|---|
| 首頁 | 開啟 pages.dev 根目錄 | 404 → 確認 index.html 位置 |
| CSS 樣式 | 確認版面顯示正確 | 樣式失效 → 確認 CSS 路徑與大小寫 |
| JavaScript | 測試計算器按鈕 | 無反應 → F12 Console 查看錯誤 |
| JSON 資料 | 開啟債券資料庫頁面 | 空白 → F12 Network 查看 JSON 是否 404 |
| 手機版 | 瀏覽器縮小至 375px | 版面破版 → 確認 RWD 斷點 |
23常見部署錯誤與除錯
| 症狀 | 最可能原因 | 修正方式 |
|---|---|---|
| 首頁 404 | 沒有 index.html,或 Build output directory 設錯 | 確認 index.html 位置;設定正確輸出目錄 |
| CSS 沒有載入 | 路徑大小寫不一致,或 CSS 未上傳 | 統一小寫檔名;確認 HTML 的 href 路徑 |
| 圖片本機正常,部署後失效 | 檔名含大寫或使用絕對路徑 | 全部改小寫;使用相對路徑 |
| JSON 無法讀取 | 路徑錯誤或格式有誤 | F12 Network 查看 404;確認 JSON 格式合法 |
| 網站仍顯示舊版 | 瀏覽器快取或部署未完成 | Ctrl+F5 強制重整;查看 Cloudflare 部署狀態 |
F12 開發者工具除錯
| 面板 | 用途 | 金融網站除錯場景 |
|---|---|---|
| Console | 查看 JavaScript 錯誤(紅色訊息) | 計算器無反應、JSON 解析失敗 |
| Network | 查看所有資源的載入狀態與狀態碼 | 圖片 404、CSS 未載入、JSON 無法讀取 |
| Sources | 查看下載到瀏覽器的原始碼 | 確認 JS 已更新(清快取)、除錯斷點 |
24Git 版本回復
| 方式 | 指令 | 適合場景 | 是否改寫歷史 |
|---|---|---|---|
| 還原單一檔案 | git restore --source=HEAD~1 index.html | 只有某個檔案改錯 | 否(新建修改) |
| 安全回復 commit | git revert <commit> | 已 push 的 commit 需要撤銷 | 否(新增反向 commit) |
| 強制覆蓋 | git push --force | ⚠️ 不建議初學者使用 | 是(危險!改寫歷史) |
# 1. 查看 commit 紀錄 git log --oneline # a1b2c3d 修正債券JSON(這次有問題) # d4e5f6g 新增金融圖表(這個版本正常) # h7i8j9k 建立首頁 # 2. 查看某次修改內容 git show a1b2c3d # 3. 安全回復(建立新的反向 commit,不改寫歷史) git revert a1b2c3d # 4. 推送(Cloudflare 自動重新部署穩定版本) git push
不要隨意使用 git push --force。強制推送可能覆蓋遠端歷史,在多人協作環境中極可能造成嚴重問題。初學者應使用 git revert 安全地回復版本。
25Git Tag 版本標籤
# 建立附說明的 Tag git tag -a v1.0 -m "金融網站第一個正式上線版本" # 推送 Tag 到 GitHub git push origin v1.0 # 查看所有 Tag git tag # 適合建立 Tag 的時機: # - 網站第一次正式上線 # - 新增大型金融工具 # - 完成重要改版 # - 重要活動前的穩定版本
26實務案例
(一)首頁部署後 404
某學生將網站結構設為 financial-platform/ → website/ → index.html,但 Cloudflare 輸出目錄設為根目錄,造成找不到首頁。解決:將 index.html 移到根目錄,或將 Build output directory 設為 website。
(二)圖片本機正常、部署後失效
本機圖片檔為 BondCover.PNG,HTML 寫成 <img src='images/bondcover.png'>。Windows 對大小寫寬鬆,本機仍顯示;Cloudflare 部署環境(Linux)嚴格區分大小寫,404。解決:統一小寫檔名、修改 HTML 路徑、commit 並 push。
(三)Token 誤上傳 GitHub(最嚴重)
Python 管理腳本中直接寫死 Token 並已推送到 Repository。錯誤的「修復」方式:只刪除最新版本的 Token——問題是舊 commit 中仍存有 Token,攻擊者仍可取得!正確的緊急處理:立即 revoke Token → 建立新 Token(僅最小必要權限)→ 移至 .streamlit/secrets.toml(加入 .gitignore)→ 聯絡 GitHub 支援或使用 git filter-repo 清理歷史 → 檢查帳號是否有異常操作。
(四)JSON 上架設定字串 vs 布林值
資料中寫成 "active": "false"(字串),但程式使用 if (bond.active) 判斷,字串 "false" 在 JavaScript 中為 truthy,下架資料仍顯示。應改為 "active": false(布林值)並使用 bond.active === true 嚴格比對。這個問題第三章已提及,此處在部署情境中再次確認。
(五)私人 Repository 授權中斷
Cloudflare 原本可讀取私人 Repository,後來 GitHub 授權被取消,新 commit 不再自動部署。處理:Cloudflare → Git 整合 → 重新授權 GitHub → 確認 Repository 存取權 → 重新觸發部署。
27常見 Git 錯誤與除錯
| 錯誤訊息 | 原因 | 處理方式 |
|---|---|---|
| fatal: not a git repository | 目前資料夾不是 Git Repo | 確認路徑(pwd),或重新 git init |
| remote origin already exists | 已設定 origin | git remote set-url origin 新網址 |
| rejected non-fast-forward | GitHub 有本機沒有的更新 | git pull --rebase,解決衝突再 push |
| merge conflict | 兩版本修改同一位置 | 手動選擇保留內容,刪除衝突符號,再 commit |
| authentication failed | Token 過期或權限不足 | 更新 Token,或重新設定 Git 憑證 |
| nothing to commit | 無新修改或被 .gitignore 忽略 | 確認是否儲存檔案,或查看 git status |
28網站發布四大檢查表
| 類別 | 檢查項目 |
|---|---|
| ① 程式檢查 | HTML 可以開啟、CSS 載入正確、JS 無 Console 錯誤、JSON 格式有效、圖片路徑正確、手機版 RWD 正常、所有導覽連結有效 |
| ② 金融內容檢查 | 公式計算結果正確、百分比單位正確(5% 輸入 5)、金額格式正確(千分位)、風險提醒完整、沒有「保證報酬」等不當文字、資料來源清楚 |
| ③ 資安檢查 | 無 Token / API 金鑰、無帳號密碼、無 secrets.toml 或 .env、無學生個資、.gitignore 設定正確、Repository 存取權限正確 |
| ④ 部署檢查 | GitHub 最新 commit 正確、Cloudflare 部署顯示成功、pages.dev 可正常開啟、自有網域可正常開啟、HTTPS 正常、手機測試自有網域 |
29關鍵字
30實作練習
- 建立一個新的 GitHub Repository(public),輸入英文名稱與說明
- 建立 README.md(含功能列表、本機測試說明、免責聲明)
- 建立 .gitignore(含 .venv/、secrets.toml、.env 等)
- 使用 GitHub 網頁上傳 index.html、css/ 和 js/ 資料夾
- 將 Repository 連接 Cloudflare Pages,完成第一次部署
- 開啟 pages.dev 網址,逐一確認首頁、CSS、JS 正常
- 將所有 HTML 頁面加入導覽列,commit 並確認部署後正常
- 修正一張圖片檔名為全小寫,更新 HTML 路徑,確認部署後圖片正常
- 故意在 bonds.json 中加入一個逗號錯誤,push 後觀察頁面是否顯示錯誤,再修正並重新 push
- 建立 Git Tag v1.0,推送 Tag 到 GitHub,在 GitHub 查看 Releases
- 建立 feature/new-tool 分支,在分支中修改首頁標語,產生 Cloudflare 預覽部署
- 購買一個網域,在 Cloudflare 綁定自有網域,測試 HTTPS
- 建立 GitHub Actions workflow,在每次 push 時自動驗證 JSON 格式
- 建立部署前自動搜尋 Token 關鍵字的腳本(git grep -i token)
- 測試 git revert:製造一個有問題的 commit,使用 revert 安全回復,確認 Cloudflare 重新部署穩定版
本章沒有可以直接在瀏覽器裡執行的計算工具,所以挑戰任務(04 分頁)改成情境診斷形式——針對「常見部署錯誤」「常見 Git 錯誤」與「Token/資安判斷」三大類設計選擇題,答題後立即看到詳解與正確處理方式。實際動手操作,請照著「示範分頁」的模擬終端機跑一次流程,再到自己電腦真正操作一遍。
本章結語——本章完成了金融網站從本機開發到正式上線的核心流程。Git 負責記錄版本,GitHub 負責保存遠端 Repository,Cloudflare Pages 則負責將靜態網站部署至網路——三者各有分工,共同構成可持續維護的網站發布流程。
讀者已學會:建立 Repository、撰寫 README 與 .gitignore、使用 Git 指令管理版本、將 GitHub 連接 Cloudflare Pages、建立公開網站、綁定自有網域、理解 DNS 與 HTTPS、排除常見部署錯誤、保護 Token 與 Secrets、使用 git revert 安全回復版本,以及建立正式版本 Tag。
下一章進入金融網站 UI、RWD、SEO 與流量分析。讀者將整理網站資訊架構、設定 meta tags 與 sitemap.xml,並整合 Google Search Console、GA4 與 Cloudflare Analytics,使網站不只能上線,也能被搜尋引擎找到、被使用者持續使用。
—部署流程模擬終端機
這不是真的終端機,因為瀏覽器沒辦法直接操作你電腦裡的 Git——但下面會照著課本「十、完整 Git 第一次上傳流程」的順序,一步一步顯示每個指令實際會輸出的內容,讓你在動手之前先建立完整的心智模型。按下方按鈕逐步執行,看著一份專案怎麼從本機資料夾,變成一個任何人都能打開的公開網站。
(按下方按鈕開始逐步執行)
三者分工,一次看懂
—觀念測驗
共 15 題選擇題,涵蓋本章所有核心觀念。每題作答後會立即顯示解析。
挑戰任務:情境診斷
這一章沒有可以在瀏覽器裡執行的程式碼,所以挑戰任務改成「情境診斷」——看一段部署設定、終端機錯誤訊息,或資安情境,判斷「接下來會發生什麼事、該怎麼處理」,選完立即看到詳解與正確做法。
任務一:部署錯誤診斷
對應教材「二十六、實務案例」— 首頁 404/圖片失效
下面是一個實際發生過的部署情境:
這樣的設定,最可能發生什麼問題?
任務二:Git 指令與錯誤訊息判讀
對應教材「二十七、常見 Git 錯誤與除錯」
終端機顯示了下面這段訊息:
這代表什麼意思,接下來該怎麼做?
任務三:資安與資料判斷
對應教材「二十六、實務案例(三)(四)」— Token 外洩/布林值陷阱
下面是一個真實會發生的資安或資料情境:
這樣做,會發生什麼問題?