Appearance
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 驗證。
核心內容
部署架構
整體部署分為三個層次:
- 基礎設施(Bicep):建立 App Service Plan(S1 SKU)與 Web App 資源,由官方 repo 提供的
codepush-infrastructure.bicep處理。 - 應用部署(az webapp up):從原始碼目錄直接部署 Node.js API 至 App Service,自動偵測 runtime 版本。
- 驗證整合(Azure AD):透過 App Registration 設定 OAuth 回呼 URL 與環境變數,啟用 Azure AD 登入。
關鍵環境變數
CodePush Server 透過以下環境變數整合 Azure AD 驗證:
| 環境變數 | 說明 |
|---|---|
MICROSOFT_CLIENT_ID | Azure AD App 的 Application (client) ID |
MICROSOFT_CLIENT_SECRET | App Registration 產生的 Client Secret |
MICROSOFT_TENANT_ID | Azure 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 指令。
部署設定參考
以下為實際部署時使用的完整設定,供日後查詢與複製使用。
環境參數
| 項目 | 值 |
|---|---|
| Subscription | Wiwynn-AJ6000 |
| Resource Group | wy-BizAut-dev-rsg |
| Location | southeastasia |
| App Name | codepush-coreinfra |
| App Service Plan | codepush-asp-coreinfra |
| App Service Plan SKU | S1 (Standard) |
| OS | Linux |
| Runtime | node|20-LTS |
| CodePush Server URL | https://codepush-coreinfra.azurewebsites.net |
| Azure AD Redirect URL | https://codepush-coreinfra.azurewebsites.net/auth/callback/azure-ad |
| 已註冊 App | Wiwynn-App-Android、Wiwynn-App-IOS |
操作指令
1. 取得原始碼
bash
git clone https://github.com/microsoft/code-push-server.git2. 定義部署參數
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=$location4. 部署 Web App
powershell
az webapp up `
--name $appName `
--resource-group $rgName `
--plan $aspName `
--sku S15. 安裝 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相關概念
- Azure App Registration — M365 MCP Server SOP — Azure AD App Registration 設定 SOP,與本文的 AD 驗證整合步驟相同
- Azure DevOps Pipeline CI/CD 設定指南 — 可搭配 Pipeline 自動化 CodePush 更新推送