Skip to content

CodePush Server on Azure App Service

部署獨立的 React Native CodePush Server 至 Azure App Service,提供行動應用 OTA(Over-The-Air)熱更新服務。

概述

CodePush 是 Microsoft 提供的行動應用 OTA 更新服務,讓 React Native / Cordova 應用能繞過 App Store 審核流程直接推送 JavaScript bundle 更新。官方的 Microsoft AppCenter 已於 2025 年關閉,開源版本(microsoft/code-push-server)允許自行架設獨立的 CodePush Server。

本文記錄將 code-push-server 的 API 服務部署至 Azure App Service 的完整流程:使用 Bicep 建立基礎設施、以 az webapp up 部署 Node.js 應用,並透過 Azure AD App Registration 啟用 OAuth 驗證。

核心內容

部署架構

整體部署分為三個層次:

  1. 基礎設施(Bicep):建立 App Service Plan(S1 SKU)與 Web App 資源,由官方 repo 提供的 codepush-infrastructure.bicep 處理。
  2. 應用部署(az webapp up):從原始碼目錄直接部署 Node.js API 至 App Service,自動偵測 runtime 版本。
  3. 驗證整合(Azure AD):透過 App Registration 設定 OAuth 回呼 URL 與環境變數,啟用 Azure AD 登入。

關鍵環境變數

CodePush Server 透過以下環境變數整合 Azure AD 驗證:

環境變數說明
MICROSOFT_CLIENT_IDAzure AD App 的 Application (client) ID
MICROSOFT_CLIENT_SECRETApp Registration 產生的 Client Secret
MICROSOFT_TENANT_IDAzure AD Tenant ID(Directory ID)

重要: 環境變數設定完成後必須重啟服務才會生效。部署時 AUTH 應先留空,確認服務正常後再補上 AD 設定。

CLI 工具與 App 管理

code-push-server 提供 code-push-standalone CLI 工具管理應用程式。首次使用須 register 指向自架 Server,建立 App 時需分別為 Android 和 iOS 建立獨立的 App 實體。

每個 App 建立後會產生 Deployment Key,React Native 應用程式在設定時須使用此 Key 連接自架 Server 而非 AppCenter。

關鍵要點

  • App Service Plan 使用 S1 Standard SKU,支援自訂網域與 SSL
  • az webapp up 從原始碼目錄直接部署,會自動偵測 Node.js runtime 版本
  • Redirect URL 格式固定為 https://<app-name>.azurewebsites.net/auth/callback/azure-ad
  • Android 與 iOS 需分別建立 App 實體(各有獨立的 Deployment Key)
  • CLI 工具 code-push-standalone 是 AppCenter CLI 的 self-hosted 版本

實際應用

部署完成後,透過 code-push-standalone app add 建立 App,取得 Deployment Key,再在 React Native 專案中設定 CodePush.getUpdateMetadata()CodePushOptions 指向自架 Server URL。推送更新時使用 code-push-standalone release-react 指令。

部署設定參考

以下為實際部署時使用的完整設定,供日後查詢與複製使用。

環境參數

項目
SubscriptionWiwynn-AJ6000
Resource Groupwy-BizAut-dev-rsg
Locationsoutheastasia
App Namecodepush-coreinfra
App Service Plancodepush-asp-coreinfra
App Service Plan SKUS1 (Standard)
OSLinux
Runtimenode|20-LTS
CodePush Server URLhttps://codepush-coreinfra.azurewebsites.net
Azure AD Redirect URLhttps://codepush-coreinfra.azurewebsites.net/auth/callback/azure-ad
已註冊 AppWiwynn-App-AndroidWiwynn-App-IOS

操作指令

1. 取得原始碼

bash
git clone https://github.com/microsoft/code-push-server.git

2. 定義部署參數

powershell
$subscriptionId = "Wiwynn-AJ6000"
$rgName         = "wy-BizAut-dev-rsg"
$location       = "southeastasia"
$projectSuffix  = "coreinfra"
$appName        = "codepush-$projectSuffix"
$aspName        = "codepush-asp-$projectSuffix"

3. 部署基礎設施(Bicep)

powershell
az account set --subscription $subscriptionId
cd code-push-server\api

az deployment group create `
  --resource-group $rgName `
  --template-file .\codepush-infrastructure.bicep `
  --parameters project_suffix=$projectSuffix az_location=$location

4. 部署 Web App

powershell
az webapp up `
  --name    $appName `
  --resource-group $rgName `
  --plan    $aspName `
  --sku     S1

5. 安裝 CLI 並註冊 App

bash
cd .\cli\
npm install
npm run build
npm install -g code-push-standalone

code-push-standalone register https://codepush-coreinfra.azurewebsites.net

code-push-standalone app add Wiwynn-App-Android
code-push-standalone app add Wiwynn-App-IOS

相關概念

來源