在使用Azure ARM模式部署wordpress,将php网站压缩成zip的形式在DefaultTemplate模板中已扩展的形式实现安装
遇到的问题总结:
1、开始在sites节点中,resource节点下的配置如下:
servicePackageLink是我wp的网站压缩包地址
{
"apiVersion": "2015-08-01",
"name": "web",
"type": "config",
"dependsOn": [
"[concat('Microsoft.Web/sites/', parameters('siteName'))]"
],
"properties": {
"phpVersion": "5.5"
}
},
{
"apiVersion": "2015-08-01",
"type": "config",
"name": "connectionstrings",
"dependsOn": [
"[concat('Microsoft.Web/sites/', parameters('siteName'))]",
"[concat('Microsoft.MySql/servers/', parameters('mysqlServerName'))]"
],
"properties": {
"DefaultConnection": {
"value": "[variables('dbConnectionString')]",
"type": "MySql"
}
}
},
{
"apiVersion": "2015-08-01",
"name": "MSDeploy",
"type": "extensions",
"properties": {
"packageUri": "[variables('servicePackageLink')]",
"dbType": "None",
"connectionString": "[variables('dbConnectionString')]"
},
"dependsOn": [
"[concat('Microsoft.Web/sites/', parameters('siteName'))]"
]
}
采用powershell部署时,报以下错误:
Deployment was interrupted and the process running it was terminated unexpectedly, if an ARM template is used, the likely cause is a race condition. To solve the race condition, make all resources that could potentially restart the site
(app settings or site config changes for example) have a dependency on MSDeploy resource. For more info please read the information here: http://go.microsoft.com/fwlink/?LinkId=808141
根据错误信息查看,问题提示 网站部署操作被切断,推断是 MSDeploy 节点的依赖条件限制上出了问题,于是根据提示连接查看了文章,而且做了相应更改:
在config节点中中的dependsOn中添加了限制
Deployment template validation failed: 'The resource '/subscriptions/xxxxxxxxxxx/resourceGroups/WPTestResourceGroup/providers/Microsoft.Web/Sites/wptestwb/config/connectionstrings' at line '129' and column '
14' doesn't depend on parent resource '/subscriptions/xxxxxxx/resourceGroups/WPTestResourceGroup/providers/Microsoft.Web/Sites/wptestwb'. Please add dependency explicitly using the 'dependsOn' syntax. Please see https://aka.ms/arm-template/#resources for usage details.'.
于是只能采用其他方式来解决,既然 '/Extensions/MSDeploy' 放到 config中不能成功,那就在 extensions 加条件来限制试一下,于是给 extensions 节点添加依赖条件-> (等数据库连接创建完成以后在开始将网站部署到website中)
发现还是报错:
Deployment was interrupted and the process running it was terminated unexpectedly, if an ARM template is used, the likely cause is a race condition. To solve the race condition, make all resources that could potentially restart the site (app settings or site config changes for example) have a de
pendency on MSDeploy resource. For more info please read the information here: http://go.microsoft.com/fwlink/?LinkId=808141
经过查询资料看,将/ config/connectionstrings 改成 /config/web 居然成功了,
原因应该是,网站扩展包需要依赖的条件是在网站部署完成以及配置完成后才能开始从远程下载网站包,网站在配置后需要重启,重启时就会切断所有操作,这也说明了开始时会报 操作被终止 的错误,所以要将网站部署包依赖于网站配置完成后进行
最后将DefaultTemplate贴上来:
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"siteName": {
"type": "string",
"metadata": {
"description": "Wordpress 网站名称."
}
},
"hostingPlanName": {
"type": "string",
"metadata": {
"description": "Wordpress 后台web应用服务器名称."
}
},
"sku": {
"type": "string",
"allowedValues": [
"F1",
"S1"
],
"defaultValue": "F1",
"metadata": {
"description": "web应用服务器类型,F1为免费版,S1为标准版. 价格详情请访问: https://www.azure.cn/pricing/details/app-service/"
}
},
"mysqlServerName": {
"type": "string",
"metadata": {
"description": "MySql 服务器的名字. 最大长度为64个字母数字字符. 请通过 @mysqlServerName.mysqldb.chinacloudapi.cn访问MySql数据库. 管理配置MySql数据库请访问 https://manage.windowsazure.cn"
}
},
"mysqlServerSku": {
"type": "string",
"defaultValue": "MS2",
"allowedValues": [
"MS1",
"MS2",
"MS3",
"MS4",
"MS5",
"MS6"
],
"metadata": {
"description": "MySql 服务器的性能版本,价格详情请访问 https://www.azure.cn/pricing/details/mysql/"
}
},
"mysqlServerVersion": {
"type": "string",
"allowedValues": [
"5.6",
"5.7",
"5.5"
],
"defaultValue": "5.6",
"metadata": {
"description": "MySQL服务器版本. "
}
},
"mysqlUserName": {
"type": "string",
"metadata": {
"description": "MySql 服务器登录名。登录名格式为 ‘MySQL服务器名%登录名’,长度小于16个字符。用户名和密码规范请参考: http://dev.mysql.com/doc/refman/5.6/en/user-names.html"
}
},
"mysqlPassword": {
"type": "securestring",
"metadata": {
"description": "MySql 服务器登录密码。长度必须大于8个字符,小于64个字符。用户名和密码规范请参考: http://dev.mysql.com/doc/refman/5.6/en/user-names.html"
}
},
"mysqldatabaseName": {
"type": "string",
"metadata": {
"description": "数据库名字。必须小于64个字符,其它命名规范请参考: http://dev.mysql.com/doc/refman/5.6/en/identifiers.html"
}
},
"artifactsLocation": {
"type": "string",
"metadata": {
"description": "The location where dependency package is stored."
}
}
},
"variables": {
"servicePackageLink": "[concat(parameters('artifactsLocation'), 'wordpress-azure.zip')]",
"dbConnectionString": "[concat('Data Source=', parameters('mysqlServerName'), '.mysqldb.chinacloudapi.cn', ';Database=', parameters('mysqldatabaseName'), ';User Id=', parameters('mysqlUserName'), '@', parameters('mysqlServerName'), ';Password=', parameters('mysqlPassword'))]"
},
"resources": [
{
"apiVersion": "2015-08-01",
"name": "[parameters('hostingPlanName')]",
"type": "Microsoft.Web/serverFarms",
"location": "[resourceGroup().location]",
"properties": {
},
"sku": {
"name": "[parameters('sku')]",
"capacity": 1
}
},
{
"apiVersion": "2015-08-01",
"name": "[parameters('siteName')]",
"type": "Microsoft.Web/Sites",
"kind": "app",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Web/serverFarms/', parameters('hostingPlanName'))]"
],
"properties": {
"name": "[parameters('siteName')]",
"serverFarmId": "[parameters('hostingPlanName')]"
},
"resources": [
{
"apiVersion": "2015-08-01",
"name": "web",
"type": "config",
"dependsOn": [
"[concat('Microsoft.Web/sites/', parameters('siteName'))]"
],
"properties": {
"phpVersion": "5.5"
}
},
{
"apiVersion": "2015-08-01",
"type": "config",
"name": "connectionstrings",
"dependsOn": [
"[concat('Microsoft.Web/sites/', parameters('siteName'))]",
"[concat('Microsoft.MySql/servers/', parameters('mysqlServerName'))]"
],
"properties": {
"DefaultConnection": {
"value": "[variables('dbConnectionString')]",
"type": "MySql"
}
}
},
{
"apiVersion": "2015-08-01",
"name": "MSDeploy",
"type": "extensions",
"properties": {
"packageUri": "[variables('servicePackageLink')]",
"dbType": "None"
},
"dependsOn": [
"[concat('Microsoft.Web/sites/', parameters('siteName'))]",
"[concat('Microsoft.Web/Sites/', parameters('siteName'), '/config/web')]"
]
}
]
},
{
"type": "Microsoft.MySql/servers",
"name": "[parameters('mysqlServerName')]",
"apiVersion": "2015-09-01",
"location": "[resourceGroup().location]",
"tags": {
"displayName": "[parameters('mysqlServerName')]"
},
"sku": { "name": "[parameters('mysqlServerSku')]" },
"properties": {
"version": "[parameters('mysqlServerVersion')]",
"AllowAzureServices": true
},
"resources": [
{
"name": "[parameters('mysqlUserName')]",
"type": "users",
"apiVersion": "2015-09-01",
"dependsOn": [
"[concat('Microsoft.MySql/servers/', parameters('mysqlServerName'))]"
],
"properties": {
"password": "[parameters('mysqlPassword')]"
}
},
{
"name": "[parameters('mysqldatabaseName')]",
"type": "databases",
"tags": {
"displayName": "[parameters('mysqldatabaseName')]"
},
"apiVersion": "2015-09-01",
"dependsOn": [
"[concat('Microsoft.MySql/servers/', parameters('mysqlServerName'))]"
],
"properties": {},
"resources": [
{
"name": "[parameters('mysqlUserName')]",
"type": "privileges",
"apiVersion": "2015-09-01",
"dependsOn": [
"[concat('Microsoft.MySql/servers/', parameters('mysqlServerName'), '/users/', parameters('mysqlUserName'))]",
"[concat('Microsoft.MySql/servers/', parameters('mysqlServerName'), '/databases/', parameters('mysqldatabaseName'))]"
],
"properties": {
"level": "ReadWrite"
}
}
]
}
]
}
]
}