--- GA: G-W3D79QQKQ3 tags: Thinking --- # 執行計畫的思考脈絡 ## 前言 :::info 本文連結僅為示意,沒有反應是正常的 ::: - 旨在分享軟體工程師在工作上的思考脈絡,我會盡力將情境描述正確。 - 期望能提供一個思考脈絡,啟發工作夥伴。 - 小團隊初期需要驗證想法的可能性時,有些會採用 MVP 的方式進行軟體設計開發,在成本考量之下,可能會建立一台虛擬主機(Virtual Machine, VM)將所有服務都塞進去。 - 以開發方式來說,至少會分為兩個環境:開發環境與正式環境。有些團隊會再加上 `pre 正式環境` stage 環境。 - 本文情境是基於三個環境: - 開發環境: dev - pre 正式環境: stage - 正式環境: prod ### 情境 - 當業務需求及團隊成長到一個程度,一台 VM 無法負擔團隊所需,需要將 stage 及 prod 的資料庫與服務都獨立於該 VM,原 VM 緊作為 dev 使用。 - 團隊在初期使用 GCP 建立 GCE 作為 VM,裡頭有 dev, stage, prod 的資料庫及服務。 - 現在期望把 stage 與 prod 分別獨立成新的 VM,故 GCP 中,會從一台 GCE 變成三台 GCE。 ## 思考脈絡 「將 dev server 上、非 dev 等級的任何服務,移出主機」之計畫,共有五個步驟: 1. 規劃 - 制定出本五個步驟 - 撰寫 [Plans](#Plans) 、 [TO-DOs (sorted)](#TO-DOs-sorted) 區塊 - 撰寫以下內容 - 要額外調整的 CI 相關事宜: [Trello Card 名稱](Trello Card 網址) - 事後要移除的程式碼: [#remove unnecessory code - this HackMD](#remove-unnecessory-code) 2. 分階段驗證 - 共有階段 - For staging: `stage` - For staging: `db-stage` - For production: `prod` - For production: `db-prod` - 每個階段共有三大步驟 - GCP: 設定 GCP 工作 - prepare: 前置作業工作 - online: 上線工作 - 我們會希望將 `online: 上線工作` 步驟儘可能地簡化,並努力降低執行時間,甚至希望能夠做到 zero downtime 3. 整合驗證 - 重複執行 `2. 分階段驗證` ,並持續調整 `1. 規劃` 、`2. 分階段驗證` 步驟內容 - 決定將不同階段拆解為獨立 HackMD 文件,並在標題增加預計執行時間長度 4. 整理出執行順序 - 調整 [TO-DOs (sorted)](#TO-DOs-sorted) 區塊內容 - 保持每個階段文件的內容一致性 5. 依照 [TO-DOs (sorted)](#TO-DOs-sorted) 區塊執行 ### 文件結構 - Wrok flow for staging and production - 思考脈絡 - TO-DOs (sorted) - Plans - plan: create GCEs - plan: CI flow - For staging: stage - GCP: (5 mins) create GCE - GCP: (2 mins) static IP - GCP: (ignore) Firewall - prepare: (10 mins) init GCE - prepare: (3 mins) GCE can access GitLab - prepare: (5 mins) install Nginx - prepare: (5 mins) install Node.js and NPM - prepare: (30 mins) install stage.fio.one - online: (5+ mins) update DNS, server-config - online: (10 mins) install SSL Certificates and with cronjob - For staging: db-stage - For production: prod - remove unnecessory code in repositiry