Updated the deployment documentation (#2)
This commit is contained in:
Родитель
ca70f5fa3f
Коммит
d5dd4d46e1
|
@ -5,6 +5,9 @@ VisualStudioVersion = 15.0.28010.2036
|
|||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{345764CB-D256-42E4-9D32-1101588F542D}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.editorconfig = .editorconfig
|
||||
azuredeploy.json = azuredeploy.json
|
||||
azuredeploy.param.json = azuredeploy.param.json
|
||||
CODE_OF_CONDUCT.md = CODE_OF_CONDUCT.md
|
||||
CONTRIBUTING.md = CONTRIBUTING.md
|
||||
LICENSE = LICENSE
|
||||
|
|
111
README.md
111
README.md
|
@ -1,27 +1,23 @@
|
|||
# Partner Web Storefront
|
||||
# Partner Center Storefront
|
||||
|
||||
![Build status](https://dev.azure.com/partnercenter/storefront/_apis/build/status/storefront-github-master-CI)
|
||||
![Build status](https://dev.azure.com/partnercenter/storefront/_apis/build/status/storefront-github-CI)
|
||||
|
||||
## Overview
|
||||
|
||||
<p>
|
||||
A web application that acts as a store front for Microsoft partners and enables them to sell Microsoft offers to their customers.
|
||||
The application gives partners the following features:
|
||||
<ol>
|
||||
<li>Configure the Microsoft offers they would like to sell to their customers. Partners can set the price and append extra details.</li>
|
||||
<li>Configure the portal branding to reflect their company branding. This includes setting the company name, header icons, etc...</li>
|
||||
<li>Payment. Partners can configure their PayPal pro account which will receive payments from customers.</li>
|
||||
</ol>
|
||||
|
||||
1. Configure the Microsoft offers they would like to sell to their customers. Partners can set the price and append extra details.
|
||||
2. Configure the portal branding to reflect their company branding. This includes setting the company name, header icons, etc...
|
||||
3. Payment. Partners can configure their PayPal pro account which will receive payments from customers.
|
||||
|
||||
The store front application currently supports the following languages (French, Spanish, German and Japanese) along with English which serves as the fallback language.
|
||||
The store front uses the partner's default locale to configure the Locale (Currencies, Date formats, Localized offers in the repository) using the Partner Profile from partner center.
|
||||
|
||||
Customers can <ol>
|
||||
<li>Use the portal to view the offers available, purchase the quantities they need and make a payment from the storefront.</li>
|
||||
<li>Log back in and view their subscriptions, purchase extra seats or renew about to expire subscriptions.</li>
|
||||
<li>View all the subscriptions (whether they have purchased via the Store front or have been managed for them from Partner Center) in the My Account page after they login. </li>
|
||||
</ol>
|
||||
</p>
|
||||
Customers can
|
||||
1. Use the portal to view the offers available, purchase the quantities they need and make a payment from the storefront.
|
||||
2. Log back in and view their subscriptions, purchase extra seats or renew about to expire subscriptions.
|
||||
3. View all the subscriptions (whether they have purchased via the Store front or have been managed for them from Partner Center) in the My Account page after they login.
|
||||
|
||||
## Deployment
|
||||
|
||||
|
@ -29,70 +25,61 @@ The portal can be deployed from within Partner Center at: <a href="https://partn
|
|||
There is also a deployment project included in the solution through which, deployment can be started with the specified inputs.
|
||||
|
||||
[![Deploy to Azure](http://azuredeploy.net/deploybutton.png)](https://azuredeploy.net/)
|
||||
[![Visualize](http://armviz.io/visualizebutton.png)](http://armviz.io/#/?load=https%3A%2F%2Fraw.githubusercontent.com%2FPartnerCenterSamples%2FReseller-Web-Application%2Fmaster%2Fazuredeploy.json)
|
||||
[![Visualize](http://armviz.io/visualizebutton.png)](http://armviz.io/#/?load=https%3A%2F%2Fraw.githubusercontent.com%2FMicrosoft%2FPartner-Center-Storefront%2Fmaster%2Fazuredeploy.json)
|
||||
|
||||
## Build & Deploy on your own
|
||||
|
||||
If you are interested to fork and custom build/deploy the store front. We recommend reading [this blog post](https://blogs.msdn.microsoft.com/iwilliams/2016/12/17/reseller-storefront/) by [Isaiah Williams](https://github.com/isaiahwilliams)
|
||||
|
||||
Clone the source code and perform the following steps:
|
||||
<ol>
|
||||
<li>
|
||||
Go to Partner Center, Account Settings, App Management and onboard a new Web App. Copy the application ID, application secret
|
||||
|
||||
1. Go to Partner Center, Account Settings, App Management and onboard a new Web App. Copy the application ID, application secret
|
||||
and the partner tenant ID into the following settings in Web.Config:
|
||||
|
||||
```xml
|
||||
<!-- Enter your partner center onboarded AAD application ID here -->
|
||||
<add key="partnerCenter.applicationId" value="" />
|
||||
|
||||
<!-- Enter your partner center onboarded AAD application secret here -->
|
||||
<add key="partnerCenter.applicationSecret" value="" />
|
||||
|
||||
<!-- Enter your partner center AAD tenant ID here -->
|
||||
<add key="partnerCenter.AadTenantId" value="" />
|
||||
```
|
||||
</li>
|
||||
<li>
|
||||
Create a Web application in your Azure AD tenant. The portal will assume the identity of this application. Change the
|
||||
```xml
|
||||
<!-- Enter your partner center onboarded AAD application ID here -->
|
||||
<add key="partnerCenter.applicationId" value="" />
|
||||
|
||||
<!-- Enter your partner center onboarded AAD application secret here -->
|
||||
<add key="partnerCenter.applicationSecret" value="" />
|
||||
|
||||
<!-- Enter your partner center AAD tenant ID here -->
|
||||
<add key="partnerCenter.AadTenantId" value="" />
|
||||
```
|
||||
|
||||
2. Create a Web application in your Azure AD tenant. The portal will assume the identity of this application. Change the
|
||||
following settings in Web.Config to your AD application information:
|
||||
|
||||
```xml
|
||||
<!-- The AAD client ID of the application running the web portal -->
|
||||
<add key="webPortal.clientId" value="" />
|
||||
```xml
|
||||
<!-- The AAD client ID of the application running the web portal -->
|
||||
<add key="webPortal.clientId" value="" />
|
||||
|
||||
<!-- The AAD client secret of the application running the web portal -->
|
||||
<add key="webPortal.clientSecret" value="" />
|
||||
<!-- The AAD client secret of the application running the web portal -->
|
||||
<add key="webPortal.clientSecret" value="" />
|
||||
|
||||
<!-- The AAD tenant ID of the application running the web portal -->
|
||||
<add key="webPortal.AadTenantId" value="" />
|
||||
<!-- The AAD tenant ID of the application running the web portal -->
|
||||
<add key="webPortal.AadTenantId" value="" />
|
||||
|
||||
<!-- The AAD client ID of the application running the web portal -->
|
||||
<add key="webPortal.clientId" value="" />
|
||||
<!-- The AAD client ID of the application running the web portal -->
|
||||
<add key="webPortal.clientId" value="" />
|
||||
|
||||
<!-- The AAD client secret of the application running the web portal -->
|
||||
<add key="webPortal.clientSecret" value="" />
|
||||
<!-- The AAD client secret of the application running the web portal -->
|
||||
<add key="webPortal.clientSecret" value="" />
|
||||
|
||||
<!-- The AAD tenant ID of the application running the web portal -->
|
||||
<add key="webPortal.AadTenantId" value="" />
|
||||
```
|
||||
</li>
|
||||
<li>
|
||||
<!-- The AAD tenant ID of the application running the web portal -->
|
||||
<add key="webPortal.AadTenantId" value="" />
|
||||
```
|
||||
|
||||
Provision an Azure storage account which will store the portal's assets and information. Copy its connection string to:
|
||||
3. Provision an Azure storage account which will store the portal's assets and information. Copy its connection string to:
|
||||
|
||||
```xml
|
||||
<!-- The Azure storage connection string which will host the web portal's settings and customers repository. -->
|
||||
<add key="webPortal.azureStorageConnectionString" value="" />
|
||||
```
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
```xml
|
||||
<!-- The Azure storage connection string which will host the web portal's settings and customers repository. -->
|
||||
<add key="webPortal.azureStorageConnectionString" value="" />
|
||||
```
|
||||
|
||||
Optionally, specify a REDIS cache connection string to improve performance.
|
||||
4. Optionally, specify a REDIS cache connection string to improve performance.
|
||||
|
||||
```xml
|
||||
<!-- The Azure Redis cache connection string. Empty value will disable caching. -->
|
||||
<add key="webPortal.cacheConnectionString" value="" />
|
||||
```
|
||||
</li>
|
||||
</ol>
|
||||
```xml
|
||||
<!-- The Azure Redis cache connection string. Empty value will disable caching. -->
|
||||
<add key="webPortal.cacheConnectionString" value="" />
|
||||
```
|
|
@ -0,0 +1,203 @@
|
|||
{
|
||||
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"siteName": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"webPortalClientId": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"webPortalClientSecret": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"webPortalAadTenantId": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"partnerCenterApplicationId": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"partnerCenterApplicationSecret": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"partnerCenterAadTenantId": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"hostingPlanName": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"skuName": {
|
||||
"type": "string",
|
||||
"defaultValue": "F1",
|
||||
"allowedValues": [
|
||||
"F1",
|
||||
"D1",
|
||||
"B1",
|
||||
"B2",
|
||||
"B3",
|
||||
"S1",
|
||||
"S2",
|
||||
"S3",
|
||||
"P1",
|
||||
"P2",
|
||||
"P3",
|
||||
"P4"
|
||||
],
|
||||
"metadata": {
|
||||
"description": "Describes plan's pricing tier and instance size. Check details at https://azure.microsoft.com/en-us/pricing/details/app-service/"
|
||||
}
|
||||
},
|
||||
"skuCapacity": {
|
||||
"type": "int",
|
||||
"defaultValue": 1,
|
||||
"minValue": 1,
|
||||
"metadata": {
|
||||
"description": "Describes plan's instance count"
|
||||
}
|
||||
},
|
||||
"repoUrl": {
|
||||
"type": "string"
|
||||
},
|
||||
"branch": {
|
||||
"type": "string"
|
||||
},
|
||||
"aadAuthorityEndpoint": {
|
||||
"type": "string",
|
||||
"defaultValue": "https://login.microsoftonline.com/"
|
||||
},
|
||||
"graphEndpoint": {
|
||||
"type": "string",
|
||||
"defaultValue": "https://graph.windows.net"
|
||||
},
|
||||
"azureStorageConnectionEndpointSuffix": {
|
||||
"type": "string",
|
||||
"defaultValue": "core.windows.net"
|
||||
},
|
||||
"partnercenterApiEndpoint": {
|
||||
"type": "string",
|
||||
"defaultValue": "https://api.partnercenter.microsoft.com"
|
||||
},
|
||||
"CustomerPortalStorageAccountType": {
|
||||
"type": "string",
|
||||
"defaultValue": "Standard_LRS",
|
||||
"allowedValues": [
|
||||
"Standard_LRS",
|
||||
"Standard_ZRS",
|
||||
"Standard_GRS",
|
||||
"Standard_RAGRS",
|
||||
"Premium_LRS"
|
||||
]
|
||||
}
|
||||
},
|
||||
"variables": {
|
||||
"CustomerPortalStorageAccountName": "[concat('storage', uniqueString(resourceGroup().id))]"
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"apiVersion": "2015-08-01",
|
||||
"name": "[parameters('hostingPlanName')]",
|
||||
"type": "Microsoft.Web/serverfarms",
|
||||
"location": "[resourceGroup().location]",
|
||||
"tags": {
|
||||
"displayName": "HostingPlan"
|
||||
},
|
||||
"sku": {
|
||||
"name": "[parameters('skuName')]",
|
||||
"capacity": "[parameters('skuCapacity')]"
|
||||
},
|
||||
"properties": {
|
||||
"name": "[parameters('hostingPlanName')]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apiVersion": "2015-08-01",
|
||||
"name": "[parameters('siteName')]",
|
||||
"type": "Microsoft.Web/sites",
|
||||
"location": "[resourceGroup().location]",
|
||||
"tags": {
|
||||
"[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource",
|
||||
"displayName": "Website"
|
||||
},
|
||||
"dependsOn": [
|
||||
"[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
|
||||
],
|
||||
"properties": {
|
||||
"name": "[parameters('siteName')]",
|
||||
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"name": "web",
|
||||
"type": "sourcecontrols",
|
||||
"location": "[resourceGroup().location]",
|
||||
"apiVersion": "2015-08-01",
|
||||
"dependsOn": [
|
||||
"[concat('Microsoft.Web/sites/', parameters('siteName'))]",
|
||||
"[concat('Microsoft.Web/Sites/', parameters('siteName'), '/config/appsettings')]"
|
||||
],
|
||||
"tags": {
|
||||
"displayName": "CustomerPortal"
|
||||
},
|
||||
"properties": {
|
||||
"RepoUrl": "[parameters('repoUrl')]",
|
||||
"branch": "[parameters('branch')]",
|
||||
"IsManualIntegration": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "appsettings",
|
||||
"type": "config",
|
||||
"apiVersion": "2015-08-01",
|
||||
"dependsOn": [
|
||||
"[concat('Microsoft.Web/sites/', parameters('siteName'))]"
|
||||
],
|
||||
"tags": {
|
||||
"displayName": "ApplicationSettings"
|
||||
},
|
||||
"properties": {
|
||||
"aadEndpoint": "[parameters('aadAuthorityEndpoint')]",
|
||||
"aadGraphEndpoint": "[parameters('graphEndpoint')]",
|
||||
"webPortal.clientId": "[parameters('webPortalClientId')]",
|
||||
"webPortal.clientSecret": "[parameters('webPortalClientSecret')]",
|
||||
"webPortal.AadTenantId": "[parameters('webPortalAadTenantId')]",
|
||||
"partnerCenter.apiEndPoint": "[parameters('partnercenterApiEndpoint')]",
|
||||
"partnerCenter.applicationId": "[parameters('partnerCenterApplicationId')]",
|
||||
"partnerCenter.applicationSecret": "[parameters('partnerCenterApplicationSecret')]",
|
||||
"partnerCenter.AadTenantId": "[parameters('partnerCenterAadTenantId')]",
|
||||
"webPortal.azureStorageConnectionString": "[Concat('DefaultEndpointsProtocol=https;AccountName=',variables('CustomerPortalStorageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('CustomerPortalStorageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value)]",
|
||||
"webPortal.azureStorageConnectionEndpointSuffix": "[parameters('azureStorageConnectionEndpointSuffix')]",
|
||||
"webPortal.cacheConnectionString": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "[variables('CustomerPortalStorageAccountName')]",
|
||||
"type": "Microsoft.Storage/storageAccounts",
|
||||
"location": "[resourceGroup().location]",
|
||||
"apiVersion": "2015-06-15",
|
||||
"dependsOn": [ ],
|
||||
"tags": {
|
||||
"displayName": "CustomerPortalStorageAccount"
|
||||
},
|
||||
"properties": {
|
||||
"accountType": "[parameters('CustomerPortalStorageAccountType')]"
|
||||
}
|
||||
}
|
||||
],
|
||||
"outputs": {
|
||||
"WebsiteUrl": {
|
||||
"type": "string",
|
||||
"value": "[concat('https://',reference(resourceId('Microsoft.Web/sites', parameters('siteName'))).hostNames[0])]"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"azureStorageConnectionEndpointSuffix": {
|
||||
"value": "core.windows.net"
|
||||
},
|
||||
"hostingPlanName": {
|
||||
"value": "Free"
|
||||
},
|
||||
"partnerCenterApplicationId": {
|
||||
"value": ""
|
||||
},
|
||||
"partnerCenterApplicationSecret": {
|
||||
"value": ""
|
||||
},
|
||||
"partnerCenterAadTenantId": {
|
||||
"value": ""
|
||||
},
|
||||
"webPortalClientId": {
|
||||
"value": ""
|
||||
},
|
||||
"webPortalClientSecret": {
|
||||
"value": ""
|
||||
},
|
||||
"webPortalAadTenantId": {
|
||||
"value": ""
|
||||
},
|
||||
"siteName": {
|
||||
"value": ""
|
||||
},
|
||||
"repoUrl": {
|
||||
"value": "https://github.com/Microsoft/Partner-Center-Storefront"
|
||||
},
|
||||
"branch": {
|
||||
"value": "master"
|
||||
},
|
||||
"aadAuthorityEndpoint": {
|
||||
"value": "https://login.microsoftonline.com/"
|
||||
},
|
||||
"graphEndpoint": {
|
||||
"value": "https://graph.windows.net"
|
||||
},
|
||||
"partnerCenterApiEndPoint": {
|
||||
"value": "https://api.partnercenter.microsoft.com"
|
||||
},
|
||||
"skuName": {
|
||||
"value": "F1"
|
||||
},
|
||||
"skuCapacity": {
|
||||
"value": 1
|
||||
}
|
||||
}
|
||||
|
Загрузка…
Ссылка в новой задаче