<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>https://www.acmex.cc/index.php?action=history&amp;feed=atom&amp;title=%E7%B7%AF%E8%82%B2_2026-0528</id>
	<title>緯育 2026-0528 - 修訂歷史</title>
	<link rel="self" type="application/atom+xml" href="https://www.acmex.cc/index.php?action=history&amp;feed=atom&amp;title=%E7%B7%AF%E8%82%B2_2026-0528"/>
	<link rel="alternate" type="text/html" href="https://www.acmex.cc/index.php?title=%E7%B7%AF%E8%82%B2_2026-0528&amp;action=history"/>
	<updated>2026-06-15T00:44:43Z</updated>
	<subtitle>本 Wiki 上此頁面的修訂歷史</subtitle>
	<generator>MediaWiki 1.36.4</generator>
	<entry>
		<id>https://www.acmex.cc/index.php?title=%E7%B7%AF%E8%82%B2_2026-0528&amp;diff=7372&amp;oldid=prev</id>
		<title>Kuyohong 於 2026年5月28日 (四) 11:11</title>
		<link rel="alternate" type="text/html" href="https://www.acmex.cc/index.php?title=%E7%B7%AF%E8%82%B2_2026-0528&amp;diff=7372&amp;oldid=prev"/>
		<updated>2026-05-28T11:11:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hant-TW&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上個修訂&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;於 2026年5月28日 (四) 11:11 的修訂&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;行 1：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;行 1：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;本次講座系列主要探討了軟體開發與部署的演進，從傳統手動部署的挑戰，到引入 CI/CD（持續整合/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;持續部署）、版本控制（Git）、容器化（Docker）與雲端技術（AWS）後的現代自動化流程。講師透過實作與理論結合的方式，帶領學員完成從程式碼開發、版本控制、容器封裝、雲端部署與權限管理的完整閉環。&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;本次講座系列主要探討了軟體開發與部署的演進，從傳統手動部署的挑戰，到引入 CI/CD（持續整合/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;持續部署）、版本控制（Git）、容器化（Docker）與雲端技術（AWS）後的現代自動化流程。講師透過實作與理論結合的方式，帶領學員完成從程式碼開發、版本控制、容器封裝、雲端部署與權限管理的完整迴圈。&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;系列課程首先介紹了傳統手動部署的痛點，如版本混亂、難以回溯及擴展性差，並引入 CI/CD 與 Jenkins 自動化打包流程以解決這些問題。接著，課程深入講解 Git 的核心概念與實務操作，包括分支管理、Pull Request、合併與認證方式（HTTPS Token）。&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;系列課程首先介紹了傳統手動部署的痛點，如版本混亂、難以回溯及擴展性差，並引入 CI/CD 與 Jenkins 自動化打包流程以解決這些問題。接著，課程深入講解 Git 的核心概念與實務操作，包括分支管理、Pull Request、合併與認證方式（HTTPS Token）。&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;隨著課程推進，重點轉向容器化與雲端遷移。講師指導學員撰寫 Dockerfile，將應用程式封裝成 Docker 映像檔（Image），並推送到 Docker Hub。最後，將容器化的應用程式部署到 AWS EC2 實例上，並深入探討雲端環境下的權限管理，強調應使用 IAM 角色（Role）而非寫死金鑰（Access Key）來確保 EC2 與 S3 等服務間的安全通訊。整個過程旨在建立一個標準化、自動化且安全的開發與部署流程，並培養學員的流程思維與雲端架構觀念。&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;隨著課程推進，重點轉向容器化與雲端遷移。講師指導學員撰寫 Dockerfile，將應用程式封裝成 Docker 映像檔（Image），並推送到 Docker Hub。最後，將容器化的應用程式部署到 AWS EC2 實例上，並深入探討雲端環境下的權限管理，強調應使用 IAM 角色（Role）而非寫死金鑰（Access Key）來確保 EC2 與 S3 等服務間的安全通訊。整個過程旨在建立一個標準化、自動化且安全的開發與部署流程，並培養學員的流程思維與雲端架構觀念。&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kuyohong</name></author>
	</entry>
	<entry>
		<id>https://www.acmex.cc/index.php?title=%E7%B7%AF%E8%82%B2_2026-0528&amp;diff=7371&amp;oldid=prev</id>
		<title>Kuyohong 於 2026年5月28日 (四) 10:53</title>
		<link rel="alternate" type="text/html" href="https://www.acmex.cc/index.php?title=%E7%B7%AF%E8%82%B2_2026-0528&amp;diff=7371&amp;oldid=prev"/>
		<updated>2026-05-28T10:53:27Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hant-TW&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上個修訂&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;於 2026年5月28日 (四) 10:53 的修訂&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l72&quot;&gt;行 72：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;行 72：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 設定 EC2 的安全群組（防火牆），開放相應端口，即可從外部訪問並測試服務。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 設定 EC2 的安全群組（防火牆），開放相應端口，即可從外部訪問並測試服務。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   8. 版本控制迴圈：遠端測試通過後，回到 GitHub 發起 Pull Request，完成程式碼審核與合併，結束一個開發週期。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   8. 版本控制迴圈：遠端測試通過後，回到 GitHub 發起 Pull Request，完成程式碼審核與合併，結束一個開發週期。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[檔案:2026-0528-01.png|800px]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kuyohong</name></author>
	</entry>
	<entry>
		<id>https://www.acmex.cc/index.php?title=%E7%B7%AF%E8%82%B2_2026-0528&amp;diff=7369&amp;oldid=prev</id>
		<title>Kuyohong：​建立內容為「本次講座系列主要探討了軟體開發與部署的演進，從傳統手動部署的挑戰，到引入 CI/CD（持續整合/持續部署）、版本控制…」的新頁面</title>
		<link rel="alternate" type="text/html" href="https://www.acmex.cc/index.php?title=%E7%B7%AF%E8%82%B2_2026-0528&amp;diff=7369&amp;oldid=prev"/>
		<updated>2026-05-28T10:52:04Z</updated>

		<summary type="html">&lt;p&gt;建立內容為「本次講座系列主要探討了軟體開發與部署的演進，從傳統手動部署的挑戰，到引入 CI/CD（持續整合/持續部署）、版本控制…」的新頁面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新頁面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;本次講座系列主要探討了軟體開發與部署的演進，從傳統手動部署的挑戰，到引入 CI/CD（持續整合/持續部署）、版本控制（Git）、容器化（Docker）與雲端技術（AWS）後的現代自動化流程。講師透過實作與理論結合的方式，帶領學員完成從程式碼開發、版本控制、容器封裝、雲端部署與權限管理的完整閉環。&lt;br /&gt;
系列課程首先介紹了傳統手動部署的痛點，如版本混亂、難以回溯及擴展性差，並引入 CI/CD 與 Jenkins 自動化打包流程以解決這些問題。接著，課程深入講解 Git 的核心概念與實務操作，包括分支管理、Pull Request、合併與認證方式（HTTPS Token）。&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
隨著課程推進，重點轉向容器化與雲端遷移。講師指導學員撰寫 Dockerfile，將應用程式封裝成 Docker 映像檔（Image），並推送到 Docker Hub。最後，將容器化的應用程式部署到 AWS EC2 實例上，並深入探討雲端環境下的權限管理，強調應使用 IAM 角色（Role）而非寫死金鑰（Access Key）來確保 EC2 與 S3 等服務間的安全通訊。整個過程旨在建立一個標準化、自動化且安全的開發與部署流程，並培養學員的流程思維與雲端架構觀念。&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 軟體部署的演進與挑戰 ===&lt;br /&gt;
* 傳統手動部署流程與挑戰&lt;br /&gt;
** 流程：開發者手動打包程式碼，透過網路磁碟機或訊息通知維運人員，再由維運人員手動登入實體伺服器進行部署。&lt;br /&gt;
** 挑戰：&lt;br /&gt;
*** 版本控制脫鉤：打包與上線流程分離，易因人為失誤導致生產環境問題。&lt;br /&gt;
*** 擴展性不足：地端實體伺服器硬體擴充不易，缺乏彈性。&lt;br /&gt;
*** 回溯困難：版本出錯時，需人工找出舊版檔案重新部署，過程耗時且風險高。&lt;br /&gt;
* CI/CD 與雲端技術的導入&lt;br /&gt;
** 初步自動化 (CI)：透過 Jenkins 等工具，監控 Git 倉庫，一旦主分支有更新，便自動拉取、打包並部署程式碼，減少人為介入。&lt;br /&gt;
** 雲端架構：將後端伺服器從實體機遷移至雲端 EC2 實例，利用 CloudWatch 進行監控、IAM 進行權限管理、RDS 管理資料庫、Route 53 處理 DNS。雲端提供隨需擴展的彈性。&lt;br /&gt;
** 容器化 (Docker)：為了解決本地與雲端環境不一致的問題，引入 Docker 將應用程式及其環境封裝成 Image，實現「一次建置，到處運行」。&lt;br /&gt;
** 容器管理：可使用 EKS (Elastic Kubernetes Service) 等服務對容器進行管理。&lt;br /&gt;
=== DevOps 角色與 CI/CD 核心概念 ===&lt;br /&gt;
* DevOps 角色與職責&lt;br /&gt;
** Software Engineer (軟體工程師)：主要負責開發商業邏輯與功能。&lt;br /&gt;
** DevOps Engineer (DevOps工程師)：負責系統上線後的持續監控與維運，確保基礎設施穩定。&lt;br /&gt;
** System Architecture (SAA, 系統架構師)：負責規劃整體系統架構。&lt;br /&gt;
** Site Reliability Engineer (SRE, 網站可靠性工程師)：負責確保雲端平台本身的品質與可靠性。&lt;br /&gt;
* DevOps 流程&lt;br /&gt;
** 一個將開發（Dev）與維運（Ops）整合的自動化循環流程：規劃 -&amp;amp;gt; 編寫 -&amp;amp;gt; 建置 -&amp;amp;gt; 測試 -&amp;amp;gt; 發布 -&amp;amp;gt; 部署 -&amp;amp;gt; 維運 -&amp;amp;gt; 監控 -&amp;amp;gt; 回到規劃。&lt;br /&gt;
* CI (Continuous Integration, 持續整合)&lt;br /&gt;
** 核心精神是頻繁將小的程式碼變更合併到主分支，並確保主分支永遠是「可上線的版本」。每次合併前都需通過自動化測試。&lt;br /&gt;
* CD (Continuous Delivery/Deployment, 持續交付/部署)&lt;br /&gt;
** CI 流程的延伸，當 CI 階段成功後，自動化後續的部署工作。&lt;br /&gt;
=== Git 版本控制實務 ===&lt;br /&gt;
* 核心概念&lt;br /&gt;
** Repository (儲存庫)：專案資料夾，存放所有程式碼與版本紀錄。&lt;br /&gt;
** Commit (提交)：每一個版本的紀錄點（本地操作）。&lt;br /&gt;
** Branch (分支)：為開發新功能而開立的平行工作區，避免污染主線（main）。&lt;br /&gt;
** Push / Pull：將本地變更推送到遠端 / 將遠端最新變更拉回本地。&lt;br /&gt;
** Pull Request (PR)：開發者完成功能後，發起請求讓同事或主管審核程式碼，通過後才合併回主線。&lt;br /&gt;
* 實作流程&lt;br /&gt;
  1. git clone：從遠端（如 GitHub）複製專案到本地。&lt;br /&gt;
  2. git checkout -b &amp;lt;new-branch&amp;gt;：建立並切換到新的開發分支。&lt;br /&gt;
  3. 修改程式碼後，使用 git add . 將變更加入暫存區。&lt;br /&gt;
  4. git commit -m &amp;quot;訊息&amp;quot;：建立一個新的版本紀錄。&lt;br /&gt;
  5. git push origin &amp;lt;new-branch&amp;gt;：將新分支推送到遠端。&lt;br /&gt;
  6. 在 GitHub 上發起 Pull Request 進行程式碼審核。&lt;br /&gt;
  7. 審核通過後，執行 Merge 將程式碼合併回 main 分支。&lt;br /&gt;
  8. 合併後，應刪除已無用的開發分支。&lt;br /&gt;
* 認證方式&lt;br /&gt;
** GitHub 已廢除使用帳號密碼進行 HTTPS 推送的方式。&lt;br /&gt;
** 現在需使用 個人存取權杖 (Personal Access Token) 作為密碼進行認證。Token 僅在生成時顯示一次，需立即複製保存。&lt;br /&gt;
=== 容器化 (Docker) 與雲端部署 (AWS) ===&lt;br /&gt;
* 開發與部署完整流程 (第三次部署)&lt;br /&gt;
  1. 需求與權限申請：當需要開發新功能（如上傳檔案至 S3），開發人員需向雲端管理員申請對應服務（S3）的操作權限。&lt;br /&gt;
  2. 本地環境設定：&lt;br /&gt;
* 管理員為開發人員或其群組授予 IAM Policy (如 AmazonS3FullAccess)。&lt;br /&gt;
* 管理員為開發人員生成存取金鑰 (Access Key ID &amp;amp; Secret Access Key)。&lt;br /&gt;
* 開發人員在本地安裝 AWS CLI，並使用 aws configure 配置金鑰，使本地環境具備操作 AWS 資源的能力。&lt;br /&gt;
  3. 本地開發與測試：&lt;br /&gt;
* 開發人員撰寫串接 AWS 服務（如 S3）的應用程式程式碼。&lt;br /&gt;
* 安全實踐：嚴禁將金鑰寫死在程式碼中。&lt;br /&gt;
  4. 容器化封裝：&lt;br /&gt;
* 在專案中撰寫 Dockerfile。&lt;br /&gt;
* 使用 docker build 將應用程式封裝成 Docker Image。&lt;br /&gt;
* 使用 docker run 在本地啟動容器，並透過端口映射 (Port Mapping) 進行功能驗證。&lt;br /&gt;
  5. 推送至映像檔倉庫：將驗證通過的 Docker Image 推送到 Docker Hub。&lt;br /&gt;
  6. 雲端部署與權限問題：&lt;br /&gt;
* 在 AWS 上啟動一台 EC2 實例（如 Amazon Linux 2023）。&lt;br /&gt;
* EC2 實例預設沒有權限存取其他 AWS 服務。直接在 EC2 內配置金鑰是不安全且錯誤的做法。&lt;br /&gt;
* 正確做法：建立一個 IAM 角色 (Role)，選擇其服務對象為 EC2，並為該角色附加所需權限的 Policy（如 S3 存取權）。&lt;br /&gt;
* 將此 IAM 角色指派給目標 EC2 實例。&lt;br /&gt;
  7. 遠端測試與驗證：&lt;br /&gt;
* 在 EC2 上安裝 Docker。&lt;br /&gt;
* 從 Docker Hub 拉取 Image 並啟動容器。&lt;br /&gt;
* EC2 上的應用程式會自動繼承實例的 IAM 角色權限，從而能夠安全地存取 S3 等服務。&lt;br /&gt;
* 設定 EC2 的安全群組（防火牆），開放相應端口，即可從外部訪問並測試服務。&lt;br /&gt;
  8. 版本控制迴圈：遠端測試通過後，回到 GitHub 發起 Pull Request，完成程式碼審核與合併，結束一個開發週期。&lt;/div&gt;</summary>
		<author><name>Kuyohong</name></author>
	</entry>
</feed>