iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0
Modern Web

手刻部落格,從設計到部署的實戰攻略系列 第 28

部署(一):部落格架在何處?建置和部署服務的選擇

  • 分享至 

  • xImage
  •  

當我們部落格的功能已經差不多完善,下一步就是把整座部落格丟到一個公開的空間。

為了要讓每次上線新文章的過程更加簡單,降低我們寫作的阻力,將整個建置 + 部署的流程簡化和自動化則是非常重要的事。

這一講就來聊聊這樣的流程,以及市面上這麼多服務,該怎麼選擇?

建置部署流程

在我們使用 Astro 或任何 SSG 開發時,大多有兩種模式,一種是方便開發的 HMR(Hot Module Replacement),隨改隨看;另一種則是 Production Build,將程式碼建置出最終在網頁上可以請求的型態。

建置則是在部落格上線前的必要動作,而將建置產生出的 HTML, JS, CSS 等檔案餵給一個網頁伺服器存下來,則是上線的最後一哩路。

如果要簡單做,我們在 Local 開發到一個階段後,直接用寫好的 Script npm run build 來產出靜態檔案,再 npm run deploy 將這些靜態檔案上傳到指定的伺服器空間即可。

建置、部署流程示意

*建置、部署流程示意

想做的更自動化一些,套入 CI/CD(持續整合,持續部署)流程的話,可以綁定 Git 平台的 Webhook,當某個 Branch 有 Merge 事件時(例如新文章 Merge 進 Master branch),則自動通知建置伺服器跑 npm run build 加上 npm run deploy

如此一來,我們只要專注在文章的產生,或是部落格本身的開發即可。

選擇 Web Hosting 服務

現在市面上已經有很多把 CI/CD 的流程包好的服務了,只要註冊 Git 平台的 Webhook,剩下建置、部署的細節都幫你包好,我們只要撰寫簡單的 Config 檔即可。

最常見的例如 GitHub Pages + GitHub Action,並且連 Git Repository 都包含在內,一條龍的產線;另外 Cloudflare、Netlify 和 Vercel 也都蠻多人使用,我自己覺得最穩定的 AWS 也有出 Amplify 這個服務。

要怎麼挑選這些服務呢?我們可以建置、部署、託管的流程中,細分其中的不同服務,可以挑選同一家的,也可以搭配組合起來,端看我們的需求和偏好。

建置、部署

GitHub Actions 由於是 GitHub 提供的服務,如果我們的程式碼是公開的(Public Repository),就可以免費使用;如果是私有的,也有每月免費的 2,000 分鐘建置額度,超過再額外付費。

而其他平台的每月免費額度,Cloudflare 提供 500 Builds、Netlify 有 300 分鐘建置時間、Amazon Amplify 有 1,000 分鐘建置時間。

Vercel 則用 CI/CD 所需的硬體資源來量化,如某種規格的 CPU 有 4 小時額度、RAM 有 360 GB-小時能用。

這類的 CI/CD 服務,都已經將整個流程簡化到我們只要自己寫 YAML 這類檔案來定義流程就好,例如 GitHub Actions 的官方範例:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: build
        run: |
          echo 'building'

  publish:
    needs: [build]
    runs-on: ubuntu-latest
    environment: production
    steps:
      - name: publish
        run: |
          echo 'publishing'

簡單指定建置的環境,執行哪些指令;部署、Publish 時的依賴(需要先 Build)、環境、步驟,即可完成 CD(持續部署)的流程。

網站託管

我們自己開發用的電腦也能建置加部署,因此 CI/CD 的流程只能說是加分項,最核心的還是把 Build 完的檔案放在哪裡託管。託管的服務目標當然就是更穩定、而且在讀者分佈的範圍都能有較低的 Latency,因而需要考慮 CDN(Content Delivery Network,內容傳遞網路)。

其他因素包含流量費和儲存費,但在中小型的部落格,如果文章數量百篇以內,除非突然有些文章變成熱點,不然每個月真的要被收費也很難超過幾十元新台幣。

CDN

那麼先來看看 CDN,其本質就是將網站的內容丟到數個不同的終端伺服器中,而且這些終端伺服器會用類似 Redis 的服務將內容存放到快取(Cache,包含 RAM,也可能將不常用的檔案放入 SSD)中,來提高被讀取的速度。只有當讀取失敗的時候才會從終端 Cache 向我們儲存資料的 Storage 重新拿取。

這些終端的網站在什麼地方,就是讀者瀏覽時載入速度的最重要因素了,畢竟封包傳送的距離越遠,經過的節點通常就越多而速度越慢,甚至還要跨過海底電纜。

亞洲 CDN 示意圖

*亞洲 CDN 示意圖

身處台灣的話,較大的 CDN 平台可能會在台北、高雄等地設有伺服器,但也可能沒有,那麼最近的地點就有可能到了香港、新加坡、東京等地了。

根據查閱到的資料,在台灣有 CDN 的服務包含 Cloudflare、AWS CloudFront,而 Vercel 在香港、東京及新加坡有據點,Netlify 雖沒有相關資訊,但亞洲區也應該是這幾點;至於 GitHub Pages 本身則透過 Fastly 提供的服務來覆蓋,也沒有明確是否在台灣有據點,但是許多人會在 GitHub Pages 後直接掛上 Cloudflare 的服務就是。

託管費用

最後就說到費用的考量了,如果是中小型的部落格,由於都是以靜態網站的形式呈現,基本上都花不了多少錢,因此能夠怎麼樣最省維護的心力可能才是最重要的考量,但還是可以簡單聊聊價格作為決策的參考。

以每月流量的免費額度來說,GitHub Pages 和 Vercel 都可達 100 GB、AWS Amplify 則只有 15 GB,至於 Netlify 目前的計費改成用 Credits 來算,之前也是 100 GB 流量;而最划算應該是 Cloudflare 了,免費方案就不限流量。

再來是儲存的費用,GitHub Pages 有 1 GB 的限制、Vercel 和 Cloudflare 對於靜態資料則不另外收費(但有單個檔案大小的限制);Amplify 則是每月 5 GB,Netlify 舊制為 10 GB,目前的方案一樣看 Credits 的使用。

綜合起來,就流量、儲存、CDN 對台灣讀者的友善程度來看,Cloudflare 應該是最划算的。但考慮到我有串接 AWS 相關服務,如 Lambda、DynamoDB 等等,在流量和儲存量不高的情況下,選擇 AWS 一條龍對我來講整合性最高。

參考資料

  1. Cloudflare Pages
  2. Cloudflare Workers
  3. AWS Amplify pricing
  4. Netlify - Pricing
  5. GitHub - Pricing
  6. Vercel - Pricing
  7. Wiki - Content delivery network

上一篇
站內搜尋(三):搜尋流程,MiniSearch + Jieba
下一篇
部署(二):域名 Domain Name 該怎麼選?
系列文
手刻部落格,從設計到部署的實戰攻略29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言