Remotion LabRemotion Lab
伺服器端渲染Azure Container Apps

Azure Container Apps

在 Azure Container Apps 上部署 Remotion 渲染服務的完整逐步指南,含 GPU 加速、自動縮放與 Azure CLI 部署範例。

Azure Container Apps

注意:本指南由社群貢獻,尚未經過 Remotion 團隊完整測試。

本指南說明如何在 Azure Container Apps 上部署 Remotion 渲染服務,包含 GPU 加速配置、自動縮放設定與基本渲染佇列。

前置需求

在開始前,請確認以下項目已準備就緒:

  • 已具備 Docker 支援的 Remotion 專案(可用 npm create video 建立)
  • Azure 帳號及有效訂閱
  • 已安裝 Azure CLI 並完成驗證(az login
  • 已安裝 Docker 並完成驗證(docker login
  • Docker Hub 帳號用於託管容器映像
  • (選用)已申請在 Azure Container Apps 上使用 GPU 的權限,在此申請

步驟一:選擇或準備專案

本指南以 remotion-azure 作為示範專案,此專案已配置 GPU 加速,基於 Remotion 渲染伺服器模板

git clone https://github.com/alexfernandez803/remotion-azure
cd remotion-azure
npm install

若使用自己的專案,請確認 Dockerfile 已正確設定。

步驟二:建置並標記 Docker 映像

在專案根目錄執行以下指令,建置映像並指定標籤:

docker build -t your-dockerhub-username/remotion-docker-gpu:1.0.0 .

若需要支援多平台(例如在 Apple Silicon Mac 上建置供 Azure 的 amd64 映像):

docker buildx build \
  --platform linux/amd64 \
  -t your-dockerhub-username/remotion-docker-gpu:1.0.0 \
  --push \
  .

步驟三:推送映像至 Docker Hub

docker push your-dockerhub-username/remotion-docker-gpu:1.0.0

步驟四:設定環境變數

為後續 Azure CLI 指令設定環境變數,方便重複使用:

設定環境變數
CONTAINER_IMAGE="docker.io/your-dockerhub-username/remotion-docker-gpu:1.0.0"
RESOURCE_GROUP="remotion-rg"
ENVIRONMENT_NAME="remotion-env"
LOCATION="swedencentral"
CONTAINER_APP_NAME="remotion-renderer"
WORKLOAD_PROFILE_NAME="NC8as-T4"
WORKLOAD_PROFILE_TYPE="Consumption-GPU-NC8as-T4"

變數說明:

變數說明
CONTAINER_IMAGEDocker Hub 上的完整映像路徑
RESOURCE_GROUPAzure 資源群組名稱(可自訂)
ENVIRONMENT_NAMEContainer Apps 環境名稱(可自訂)
LOCATIONAzure 區域,GPU 支援區域有限,swedencentral 為可用選項之一
WORKLOAD_PROFILE_NAMEGPU 工作負載設定檔名稱,依 Azure 文件設定
WORKLOAD_PROFILE_TYPEGPU 類型,NC8as-T4 代表 NVIDIA T4 GPU

步驟五:建立資源群組

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION \
  --query "properties.provisioningState"

成功時輸出:"Succeeded"

步驟六:為監控功能註冊 Insights

az provider register \
  --namespace Microsoft.OperationalInsights \
  --wait

步驟七:建立 Container Apps 環境

az containerapp env create \
  --name $ENVIRONMENT_NAME \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --query "properties.provisioningState"

此步驟需要數分鐘。成功時輸出:"Succeeded"

步驟八:為環境新增 GPU 工作負載設定檔

az containerapp env workload-profile add \
  --name $ENVIRONMENT_NAME \
  --resource-group $RESOURCE_GROUP \
  --workload-profile-name $WORKLOAD_PROFILE_NAME \
  --workload-profile-type $WORKLOAD_PROFILE_TYPE

步驟九:部署容器應用程式

az containerapp create \
  --name $CONTAINER_APP_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $ENVIRONMENT_NAME \
  --image $CONTAINER_IMAGE \
  --target-port 3000 \
  --ingress external \
  --cpu 8.0 \
  --memory 56.0Gi \
  --workload-profile-name $WORKLOAD_PROFILE_NAME \
  --query properties.configuration.ingress.fqdn

部署完成後,Azure CLI 會輸出應用程式的公開 URL:

部署輸出範例
"remotion-renderer.grayocean-24741fc9.swedencentral.azurecontainerapps.io"

注意--target-port 3000 對應 Node.js 伺服器的監聽埠。--cpu 8.0--memory 56.0Gi 為 NC8as-T4 GPU 工作負載設定檔的對應規格。

步驟十:設定自動縮放(選用)

Azure Container Apps 支援基於 HTTP 請求數量的自動縮放:

az containerapp update \
  --name $CONTAINER_APP_NAME \
  --resource-group $RESOURCE_GROUP \
  --scale-rule-name http-scaling \
  --scale-rule-type http \
  --scale-rule-metadata concurrentRequests=5 \
  --min-replicas 0 \
  --max-replicas 10

此設定讓系統在閒置時縮減至零(節省費用),並在需求增加時自動擴充至最多 10 個執行個體。

步驟十一:觸發渲染

向部署服務的 /renders 端點發送 POST 請求。將 YOUR_SERVICE_URL 替換為步驟九的輸出 URL:

curl -X POST https://YOUR_SERVICE_URL/renders \
  -H "Content-Type: application/json" \
  -d '{
    "compositionId": "MyVideo",
    "inputProps": {
      "titleText": "Hello from Azure"
    }
  }'

成功回應包含 jobId

觸發渲染回應
{
  "jobId": "955338f6-2607-48bd-bedb-6d4c98f7b4dc"
}

步驟十二:查詢渲染狀態

curl https://YOUR_SERVICE_URL/renders/955338f6-2607-48bd-bedb-6d4c98f7b4dc
渲染完成回應
{
  "status": "completed",
  "videoUrl": "/renders/955338f6-2607-48bd-bedb-6d4c98f7b4dc.mp4",
  "data": { "titleText": "Hello from Azure" }
}

YOUR_SERVICE_URLvideoUrl 組合即可得到完整的下載連結。

步驟十三:(選用)清理資源

若不再需要此服務,刪除整個資源群組以停止計費:

az group delete --name $RESOURCE_GROUP --yes --no-wait

警告:此指令會刪除資源群組內的所有資源,包括容器應用程式、監控資料等,且無法復原

費用與效能注意事項

費用警告:GPU 執行個體(如 NC8as-T4)費用顯著高於一般 CPU 執行個體。本指南不包含費用管理功能。請參閱 Azure Container Apps 定價估算使用費用,並設定 Azure 預算警示以控制支出。

效能說明:GPU 加速已在示範專案的 remotion.config.ts 中啟用,但尚未完整驗證實際 GPU 使用情況。部分渲染場景可能仍以 CPU 模式執行。

相關資源