前言
這幾天,我們讓程式碼經過各種檢查:Lint、測試、安全掃描、容器漏洞… 每一層都守得很緊。
但說實話,程式到目前為止還只是「待在 pipeline 裡的考卷」,一直沒真正跑起來。
今天,我們要跨出下一步──讓程式能在伺服器自動部署。
這就是 CD (Continuous Deployment),從單純的檢查(CI)走向「自動上線」。
CI 是模擬考,CD 才是正式上場比賽。
1. CI vs CD 的差別
很多人常把 CI/CD 混在一起講,但其實它們解決的問題不同:
-
CI (Continuous Integration):自動測試、靜態分析、Lint… 目的是確認程式碼合併後不會壞掉。
-
CD (Continuous Deployment / Delivery):把測過的程式碼自動部署到環境(測試環境或正式環境),讓它真的跑起來。
直觀來說:
- CI 是在檢查裝備:武器磨好、盔甲修好。
- CD 則是帶著裝備出城,真的走上戰場。
CI 確保「你能活著出門」,CD 確保「你能在外面打得贏」。
2. 為什麼要自動部署?
有人會說:「反正我用 scp 傳檔、ssh 登進去跑指令,不也能部署?」
沒錯,但這樣等於靠「人」來維持流程,風險和麻煩不少:
-
避免人為錯誤
- 忘了拉最新 commit、上錯分支、重啟漏了參數…
- 只要一個小失誤,就可能把整個服務弄掛。
-
縮短交付時間
- 程式碼通過測試後,自動部署讓它立即跑起來。
- 不需要再等一個工程師手動操作,效率差很多。
-
安全性提升
- CD 接在 CI 後面,代表只有通過測試與安全檢查的程式碼能進伺服器。
- 等於守門人幫你把「不健康的版本」直接攔下來。
比喻來說,自動部署就像有一條輸送帶:
檢查合格的產品會自動送到貨架上,而不是靠員工一箱箱搬。
這樣才快、準、而且安全。
3. VPS 自動部署的核心概念(今天先理解,不急著實作)
當你選擇自己管 VPS,代表你不只要學會「怎麼部署」,還要知道「為什麼這樣部署」。
今天我們先用概念梳理,把明天的實作變成照劇本演。
(1) CI 與 CD 的分工
簡單一句:CI 確保程式健康,CD 確保它活在世界上。
(2) 部署的四大動作
再複雜的工具,本質都在做同一件事:
-
連線伺服器(靠 SSH Key,不用帳密,更別用 root)。
-
更新程式碼(通常是 git pull 或 scp 傳檔)。
-
安裝依賴(pip install、npm install、或 docker pull)。
-
重啟服務(systemctl restart 或 docker-compose up -d)。
把這四步想成流程積木:只要組起來,就能變成自己的 CD pipeline。
(3) DevSecOps 的安全提醒
-
Secrets 管理:金鑰一定要放 GitHub Secrets,不要寫進 repo。
-
最小權限:VPS 上最好建一個專門的 deploy 帳號,不要圖快用 root。
-
分支保護:Workflow 加上條件,確保只在 main/master 分支觸發部署。
這些細節決定了,你的自動部署是「幫你省事」,還是「幫駭客省事」。
(4) 部署策略的層次
-
基礎版:更新程式碼 + 重啟 → 直觀,但會有短暫 downtime。
-
進階版:Docker 化 → 部署速度快、環境一致。
-
高階版:藍綠部署或滾動更新 → 幾乎零停機,適合流量大、不可中斷的應用。
我們現在只需要基礎版,足夠跑起應用;但知道後面有更高層次,就能理解為什麼大公司要花力氣做複雜 pipeline。
4. 結論
到這裡,我們已經看清楚自動部署的樣子:
-
CI 確保程式健康,CD 讓程式真正跑起來。
- 部署的本質不過四件事:連線、更新、安裝、重啟。
- 而安全細節──Secrets、最小權限、分支保護──是讓整個流程站得住腳的關鍵。
「手動部署就像每天親自挑水,辛苦又容易翻桶;自動部署是接好水管,開關一扳,水就源源不絕。」
今天先不用打開終端機,光是把這些概念拆開理解,就能避免明天實作時變成「跟著打字卻不懂為什麼」。