重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
azd-deployment by sickn33/antigravity-awesome-skills
npx skills add https://github.com/sickn33/antigravity-awesome-skills --skill azd-deployment使用远程构建、托管身份和幂等基础设施,将容器化的前端 + 后端应用程序部署到 Azure 容器应用。
# 初始化和部署
azd auth login
azd init # 创建 azure.yaml 和 .azure/ 文件夹
azd env new <env-name> # 创建环境(dev, staging, prod)
azd up # 预配基础设施 + 构建 + 部署
project/
├── azure.yaml # azd 服务定义 + 钩子
├── infra/
│ ├── main.bicep # 根基础设施模块
│ ├── main.parameters.json # 从环境变量注入参数
│ └── modules/
│ ├── container-apps-environment.bicep
│ └── container-app.bicep
├── .azure/
│ ├── config.json # 默认环境指针
│ └── <env-name>/
│ ├── .env # 环境特定值(azd 管理)
│ └── config.json # 环境元数据
└── src/
├── frontend/Dockerfile
└── backend/Dockerfile
name: azd-deployment
services:
backend:
project: ./src/backend
language: python
host: containerapp
docker:
path: ./Dockerfile
remoteBuild: true
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
name: azd-deployment
metadata:
template: my-project@1.0.0
infra:
provider: bicep
path: ./infra
azure:
location: eastus2
services:
frontend:
project: ./src/frontend
language: ts
host: containerapp
docker:
path: ./Dockerfile
context: .
remoteBuild: true
backend:
project: ./src/backend
language: python
host: containerapp
docker:
path: ./Dockerfile
context: .
remoteBuild: true
hooks:
preprovision:
shell: sh
run: |
echo "在预配之前..."
postprovision:
shell: sh
run: |
echo "预配之后 - 设置 RBAC 等。"
postdeploy:
shell: sh
run: |
echo "前端: ${SERVICE_FRONTEND_URI}"
echo "后端: ${SERVICE_BACKEND_URI}"
| 选项 | 描述 |
|---|---|
remoteBuild: true | 在 Azure 容器注册表中构建镜像(推荐) |
context: . | Docker 构建上下文相对于项目路径 |
host: containerapp | 部署到 Azure 容器应用 |
infra.provider: bicep | 使用 Bicep 进行基础设施部署 |
.env - 仅用于本地开发.azure/<env>/.env - azd 管理,从 Bicep 输出自动填充main.parameters.json - 将环境变量映射到 Bicep 参数// infra/main.parameters.json
{
"parameters": {
"environmentName": { "value": "${AZURE_ENV_NAME}" },
"location": { "value": "${AZURE_LOCATION=eastus2}" },
"azureOpenAiEndpoint": { "value": "${AZURE_OPENAI_ENDPOINT}" }
}
}
语法: ${VAR_NAME} 或 ${VAR_NAME=default_value}
# 为当前环境设置
azd env set AZURE_OPENAI_ENDPOINT "https://my-openai.openai.azure.com"
azd env set AZURE_SEARCH_ENDPOINT "https://my-search.search.windows.net"
# 在初始化期间设置
azd env new prod
azd env set AZURE_OPENAI_ENDPOINT "..."
// 在 main.bicep 中 - 输出自动填充到 .azure/<env>/.env
output SERVICE_FRONTEND_URI string = frontend.outputs.uri
output SERVICE_BACKEND_URI string = backend.outputs.uri
output BACKEND_PRINCIPAL_ID string = backend.outputs.principalId
通过门户添加的自定义域名在重新部署时可能会丢失。使用钩子保留:
hooks:
preprovision:
shell: sh
run: |
# 在预配前保存自定义域名
if az containerapp show --name "$FRONTEND_NAME" -g "$RG" &>/dev/null; then
az containerapp show --name "$FRONTEND_NAME" -g "$RG" \
--query "properties.configuration.ingress.customDomains" \
-o json > /tmp/domains.json
fi
postprovision:
shell: sh
run: |
# 验证/恢复自定义域名
if [ -f /tmp/domains.json ]; then
echo "保存的域名: $(cat /tmp/domains.json)"
fi
// 引用现有 ACR(不重新创建)
resource containerRegistry 'Microsoft.ContainerRegistry/registries@2023-07-01' existing = {
name: containerRegistryName
}
// 将 customDomains 设置为 null 以保留通过门户添加的域名
customDomains: empty(customDomainsParam) ? null : customDomainsParam
同一环境中容器应用之间的内部 HTTP 路由:
// 前端环境变量中的后端引用
env: [
{
name: 'BACKEND_URL'
value: 'http://ca-backend-${resourceToken}' // 内部 DNS
}
]
前端 nginx 代理到内部 URL:
location /api {
proxy_pass $BACKEND_URL;
}
resource containerApp 'Microsoft.App/containerApps@2024-03-01' = {
identity: {
type: 'SystemAssigned'
}
}
output principalId string = containerApp.identity.principalId
hooks:
postprovision:
shell: sh
run: |
PRINCIPAL_ID="${BACKEND_PRINCIPAL_ID}"
# Azure OpenAI 访问权限
az role assignment create \
--assignee-object-id "$PRINCIPAL_ID" \
--assignee-principal-type ServicePrincipal \
--role "Cognitive Services OpenAI User" \
--scope "$OPENAI_RESOURCE_ID" 2>/dev/null || true
# Azure AI Search 访问权限
az role assignment create \
--assignee-object-id "$PRINCIPAL_ID" \
--role "Search Index Data Reader" \
--scope "$SEARCH_RESOURCE_ID" 2>/dev/null || true
# 环境管理
azd env list # 列出环境
azd env select <name> # 切换环境
azd env get-values # 显示所有环境变量
azd env set KEY value # 设置变量
# 部署
azd up # 完整预配 + 部署
azd provision # 仅基础设施
azd deploy # 仅代码部署
azd deploy --service backend # 部署单个服务
# 调试
azd show # 显示项目状态
az containerapp logs show -n <app> -g <rg> --follow # 流式传输日志
remoteBuild: true - 在 M1/ARM Mac 上部署到 AMD64 时,本地构建会失败azd env set 设置密钥 - 不要在 main.parameters.json 中设置默认值azd-service-name) - azd 查找容器应用所必需|| true - 防止 RBAC "已存在" 错误导致部署失败此技能适用于执行概述中描述的工作流程或操作。
每周安装次数
64
代码仓库
GitHub 星标数
28.5K
首次出现
2026年2月15日
安全审计
安装于
codex63
opencode63
gemini-cli61
kimi-cli61
amp60
github-copilot60
Deploy containerized frontend + backend applications to Azure Container Apps with remote builds, managed identity, and idempotent infrastructure.
# Initialize and deploy
azd auth login
azd init # Creates azure.yaml and .azure/ folder
azd env new <env-name> # Create environment (dev, staging, prod)
azd up # Provision infra + build + deploy
project/
├── azure.yaml # azd service definitions + hooks
├── infra/
│ ├── main.bicep # Root infrastructure module
│ ├── main.parameters.json # Parameter injection from env vars
│ └── modules/
│ ├── container-apps-environment.bicep
│ └── container-app.bicep
├── .azure/
│ ├── config.json # Default environment pointer
│ └── <env-name>/
│ ├── .env # Environment-specific values (azd-managed)
│ └── config.json # Environment metadata
└── src/
├── frontend/Dockerfile
└── backend/Dockerfile
name: azd-deployment
services:
backend:
project: ./src/backend
language: python
host: containerapp
docker:
path: ./Dockerfile
remoteBuild: true
name: azd-deployment
metadata:
template: my-project@1.0.0
infra:
provider: bicep
path: ./infra
azure:
location: eastus2
services:
frontend:
project: ./src/frontend
language: ts
host: containerapp
docker:
path: ./Dockerfile
context: .
remoteBuild: true
backend:
project: ./src/backend
language: python
host: containerapp
docker:
path: ./Dockerfile
context: .
remoteBuild: true
hooks:
preprovision:
shell: sh
run: |
echo "Before provisioning..."
postprovision:
shell: sh
run: |
echo "After provisioning - set up RBAC, etc."
postdeploy:
shell: sh
run: |
echo "Frontend: ${SERVICE_FRONTEND_URI}"
echo "Backend: ${SERVICE_BACKEND_URI}"
| Option | Description |
|---|---|
remoteBuild: true | Build images in Azure Container Registry (recommended) |
context: . | Docker build context relative to project path |
host: containerapp | Deploy to Azure Container Apps |
infra.provider: bicep | Use Bicep for infrastructure |
.env - For local development only.azure/<env>/.env - azd-managed, auto-populated from Bicep outputsmain.parameters.json - Maps env vars to Bicep parameters// infra/main.parameters.json
{
"parameters": {
"environmentName": { "value": "${AZURE_ENV_NAME}" },
"location": { "value": "${AZURE_LOCATION=eastus2}" },
"azureOpenAiEndpoint": { "value": "${AZURE_OPENAI_ENDPOINT}" }
}
}
Syntax: ${VAR_NAME} or ${VAR_NAME=default_value}
# Set for current environment
azd env set AZURE_OPENAI_ENDPOINT "https://my-openai.openai.azure.com"
azd env set AZURE_SEARCH_ENDPOINT "https://my-search.search.windows.net"
# Set during init
azd env new prod
azd env set AZURE_OPENAI_ENDPOINT "..."
// In main.bicep - outputs auto-populate .azure/<env>/.env
output SERVICE_FRONTEND_URI string = frontend.outputs.uri
output SERVICE_BACKEND_URI string = backend.outputs.uri
output BACKEND_PRINCIPAL_ID string = backend.outputs.principalId
Custom domains added via Portal can be lost on redeploy. Preserve with hooks:
hooks:
preprovision:
shell: sh
run: |
# Save custom domains before provision
if az containerapp show --name "$FRONTEND_NAME" -g "$RG" &>/dev/null; then
az containerapp show --name "$FRONTEND_NAME" -g "$RG" \
--query "properties.configuration.ingress.customDomains" \
-o json > /tmp/domains.json
fi
postprovision:
shell: sh
run: |
# Verify/restore custom domains
if [ -f /tmp/domains.json ]; then
echo "Saved domains: $(cat /tmp/domains.json)"
fi
// Reference existing ACR (don't recreate)
resource containerRegistry 'Microsoft.ContainerRegistry/registries@2023-07-01' existing = {
name: containerRegistryName
}
// Set customDomains to null to preserve Portal-added domains
customDomains: empty(customDomainsParam) ? null : customDomainsParam
Internal HTTP routing between Container Apps in same environment:
// Backend reference in frontend env vars
env: [
{
name: 'BACKEND_URL'
value: 'http://ca-backend-${resourceToken}' // Internal DNS
}
]
Frontend nginx proxies to internal URL:
location /api {
proxy_pass $BACKEND_URL;
}
resource containerApp 'Microsoft.App/containerApps@2024-03-01' = {
identity: {
type: 'SystemAssigned'
}
}
output principalId string = containerApp.identity.principalId
hooks:
postprovision:
shell: sh
run: |
PRINCIPAL_ID="${BACKEND_PRINCIPAL_ID}"
# Azure OpenAI access
az role assignment create \
--assignee-object-id "$PRINCIPAL_ID" \
--assignee-principal-type ServicePrincipal \
--role "Cognitive Services OpenAI User" \
--scope "$OPENAI_RESOURCE_ID" 2>/dev/null || true
# Azure AI Search access
az role assignment create \
--assignee-object-id "$PRINCIPAL_ID" \
--role "Search Index Data Reader" \
--scope "$SEARCH_RESOURCE_ID" 2>/dev/null || true
# Environment management
azd env list # List environments
azd env select <name> # Switch environment
azd env get-values # Show all env vars
azd env set KEY value # Set variable
# Deployment
azd up # Full provision + deploy
azd provision # Infrastructure only
azd deploy # Code deployment only
azd deploy --service backend # Deploy single service
# Debugging
azd show # Show project status
az containerapp logs show -n <app> -g <rg> --follow # Stream logs
remoteBuild: true - Local builds fail on M1/ARM Macs deploying to AMD64azd env set for secrets - Not main.parameters.json defaultsazd-service-name) - Required for azd to find Container Apps|| true in hooks - Prevent RBAC "already exists" errors from failing deployThis skill is applicable to execute the workflow or actions described in the overview.
Weekly Installs
64
Repository
GitHub Stars
28.5K
First Seen
Feb 15, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
codex63
opencode63
gemini-cli61
kimi-cli61
amp60
github-copilot60
ue-cli:通过命令行控制Unreal Engine Editor的远程控制工具
18 周安装
Humanizer 中文学术版:学术论文去AI痕迹,润色论文提升学术表达质量
29 周安装
SSH Skill v3.2 - 高性能SSH操作工具,支持长连接、跳板机、批量并发与服务器直传
27 周安装
Godot 4 性能优化指南:多线程、对象池、渲染批处理与物理查询优化
72 周安装
Salesforce B2C Business Manager 扩展开发指南:自定义管理界面菜单、表单与对话框
71 周安装
yfinance MCP 服务器 - 获取 Yahoo Finance 实时和历史金融数据 | 股票价格、期权、财报、新闻
75 周安装