Updated the deployment documentation (#2)

This commit is contained in:
Isaiah Williams 2018-09-25 12:00:33 -05:00 коммит произвёл GitHub
Родитель ca70f5fa3f
Коммит d5dd4d46e1
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
4 изменённых файлов: 306 добавлений и 62 удалений

Просмотреть файл

@ -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
Просмотреть файл

@ -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="" />
```

203
azuredeploy.json Normal file
Просмотреть файл

@ -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])]"
}
}
}

51
azuredeploy.param.json Normal file
Просмотреть файл

@ -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
}
}