Intelledox

Deployment Guide

Deployment of Infiniti is fully automated using ARM Templates (JSON definition of Azure Components to be deployed).

Here is a step by step tutorial that will guide you through this process.

  1. Login to https://portal.azure.com/
  2. Click New (1) on the left side menu and select Resource Group (2) and click Create (3).
  1. Provide a name for the Resource Group, select the subscription and the Azure data center (Resource group location) where this resource group is to be deployed and click Create.

For example: In the below screenshot:

Resource Group name: IntelledoxInfinitiDemo
Subscription: Visual Studio Enterprise
Resource Group location: Southeast Asia

  1. Click on the Resource Group and check whether the resource group created in Step-3 is deployed.
  1. Click New (1) and select Template deployment (2) and click Create (3).
  1. Click on ‘Build your own template in the editor’.
  1. Copy the content from the InfinitiPaaSAzureDeploy.json, the file is shown below and paste it in the editor (1). Once you have pasted the content of the file, you will see the different resources which this template will deploy in the left resource preview (2) and now click Save (3).
{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "administratorLogin": {
      "type": "string",
      "metadata": {
        "description": "The account name to use for the database server administrator."
      }
    },
    "administratorLoginPassword": {
      "type": "securestring",
      "metadata": {
        "description": "The password to use for the database server administrator."
      }
    },
    "edition": {
      "type": "string",
      "allowedValues": [
        "Basic",
        "Standard",
        "Premium"
      ],
      "defaultValue": "Basic",
      "metadata": {
        "description": "The type of database to create. The available options are: Basic, Standard, and Premium."
      }
    },
    "hostingPlanName": {
      "type": "string",
      "defaultValue": "DefaultAppServicePlan",
      "metadata": {
        "description": "The name of the App Service plan to use for hosting the web app."
      }
    },
    "requestedServiceObjectiveName": {
      "type": "string",
      "allowedValues": [
        "Basic",
        "S0",
        "S1",
        "S2",
        "S3",
        "P1",
        "P2",
        "P3"
      ],
      "defaultValue": "Basic",
      "metadata": {
        "description": "The name corresponding to the performance level for edition. The available options are: Basic, S0, S1, S2, S3, P1, P2, and P3."
      }
    },
    "serverLocation": {
      "type": "string",
      "metadata": {
        "description": "The location of the database server. For best performance, this location should be the same as the location of the web app."
      }
    },
    "dbName": {
      "type": "string",
      "metadata": {
        "description": "Name of new Infiniti database"
      }
    },
    "serverName": {
      "type": "string",
      "metadata": {
        "description": "Name of the new database server to create."
      }
    },
    "siteLocation": {
      "type": "string",
      "metadata": {
        "description": "The location to use for creating the web app and hosting plan."
      }
    },
    "siteName": {
      "type": "string",
      "metadata": {
        "description": "The name of the web app that you wish to create."
      }
    },
    "sku": {
      "type": "string",
      "allowedValues": [
        "Free",
        "Shared",
        "Basic",
        "Standard",
        "Premium"
      ],
      "defaultValue": "Shared",
      "metadata": {
        "description": "The pricing tier for the hosting plan."
      }
    },
    "workerSize": {
      "type": "string",
      "allowedValues": [
        "0",
        "1",
        "2"
      ],
      "defaultValue": "0",
      "metadata": {
        "description": "The instance size of the hosting plan (small, medium, or large)."
      }
    }
  },
  "variables": {
    "collation": "Latin1_General_CI_AS",
    "maxSizeBytes": "1073741824",
    "siteUrl": "site\\wwwroot\\"
  },
  "resources": [
    {
      "name": "[parameters('serverName')]",
      "type": "Microsoft.Sql/servers",
      "location": "[parameters('serverLocation')]",
      "apiVersion": "2014-04-01-preview",
      "properties": {
        "administratorLogin": "[parameters('administratorLogin')]",
        "administratorLoginPassword": "[parameters('administratorLoginPassword')]",
        "siteConfig":{
          "use32BitWorkerProcess": "false"
        }
      },
      "resources": [
        {
          "apiVersion": "2014-04-01-preview",
          "dependsOn": [
            "[concat('Microsoft.Sql/servers/', parameters('serverName'))]"
          ],
          "location": "[parameters('serverLocation')]",
          "name": "AllowAllWindowsAzureIps",
          "properties": {
            "endIpAddress": "0.0.0.0",
            "startIpAddress": "0.0.0.0"
          },
          "type": "firewallrules"
        },
        {
          "name": "[parameters('dbName')]",
          "type": "databases",
          "location": "[parameters('serverLocation')]",
          "apiVersion": "2014-04-01-preview",
          "dependsOn": [
            "[concat('Microsoft.Sql/servers/', parameters('serverName'),'/firewallRules/AllowAllWindowsAzureIps')]",
            "[concat('Microsoft.Sql/servers/', parameters('serverName'))]"
          ],
          "properties": {
            "edition": "[parameters('edition')]",
            "collation": "[variables('collation')]",
            "maxSizeBytes": "[variables('maxSizeBytes')]",
            "requestedServiceObjectiveName": "[parameters('requestedServiceObjectiveName')]"
          }
        }
      ]
    },
    {
      "apiVersion": "2014-06-01",
      "name": "[parameters('hostingPlanName')]",
      "type": "Microsoft.Web/serverfarms",
      "location": "[parameters('siteLocation')]",
      "properties": {
        "name": "[parameters('hostingPlanName')]",
        "sku": "[parameters('sku')]",
        "workerSize": "[parameters('workerSize')]",
        "numberOfWorkers": 1
      }
    },
    {
      "apiVersion": "2015-08-01",
      "name": "[parameters('siteName')]",
      "type": "Microsoft.Web/sites",
      "location": "[parameters('siteLocation')]",
      "dependsOn": [
        "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
      ],
      "tags": {
        "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "empty"
      },
      "properties": {
        "name": "[parameters('siteName')]",
        "serverFarmId": "[parameters('hostingPlanName')]"
      },
      "resources": [
        {
          "apiVersion": "2015-08-01",
          "type": "config",
          "name": "connectionstrings",
          "dependsOn": [
            "[concat('Microsoft.Web/sites/', parameters('siteName'))]"
          ],
          "properties": {
            "ConnectionString": {
              "value": "[concat('Data Source=tcp:', reference(concat('Microsoft.Sql/servers/', parameters('serverName'))).fullyQualifiedDomainName, ',1433;Initial Catalog=', parameters('dbName'), ';User Id=', parameters('administratorLogin'), '@', parameters('serverName'), ';Password=', parameters('administratorLoginPassword'), ';')]",
              "type": "SQLAzure"
            }
          }
        },
        {
          "apiVersion": "2015-08-01",
          "name": "web",
          "type": "config",
          "dependsOn": [
            "[concat('Microsoft.Web/sites/', parameters('siteName'))]"
          ],
          "properties": {
            "virtualApplications": [
              {
                "virtualPath": "/Produce",
                "physicalPath": "[concat(variables('siteUrl'), 'Produce')]",
                "preloadEnabled": false,
                "virtualDirectories": null
              },
              {
                "virtualPath": "/Manage",
                "physicalPath": "[concat(variables('siteUrl'), 'Manage')]",
                "preloadEnabled": false,
                "virtualDirectories": null
              },
              {
                "virtualPath": "/",
                "physicalPath": "[concat(variables('siteUrl'))]",
                "preloadEnabled": false,
                "virtualDirectories": null
              }
            ]
          }
        }
      ]
    }
  ]
}
  1. Select the desired Azure subscription, and select the resource group created in Step-3 by selecting “use existing”. This will default the Microsoft azure data centre location. For efficient performance, all the resources should be deployed in the same data centre. Provide the value for different parameters required for this deployment. Below is an example of the parameters passed for this deployment.
    • Administrator Login: sqladmin
    • Administrator Login Password: YourPassword123 (Provide password for the database login)
    • Edition: Basic
    • Hosting Plan Name: IntelledoxInfinitiDemoPlan (Can be any name)
    • Requested Service Objective Name: Basic
    • Server Location: southeast asia (Can be any Azure Date Centre)
    • Db Name: ix_privatedb_intelledox_infiniti_demo (Can be any name)
    • Server Name: ix-privateserver-intelledox-infiniti-demo (Can be any name)
    • Site Location: southeast asia (Can be any Azure Date Centre)
    • Site Name: yourSiteName (Name of the website)
    • Sku: Shared
    • Worker Size: 0

Check I agree to the terms and conditions stated above and click Purchase.

App Service and Database pricing tiers can always be modified anytime based on the requirements.

  1. Check the status of the deployment in the notification.
  1. When the deployment is successful, you will see the Deployment succeeded message in the notification.
  1. Navigate to Resource group which you have created. You should see the following four resources: a SQL server, a SQL database, an App Service plan, and an App Service.
  1. Creating the Infiniti App Files to deploy in the App Service in Azure
    12.1. Download the required Infiniti upgrade file from the Infiniti support portal (http://support.intelledox.com/common/downloads.asp). For example: the file format for Infiniti version 10.0.12 is InfinitiUpgrade10.0.12)

If you don’t have the username/password for this site, please contact Intelledox.

12.2. Create a folder. In our tutorial, we have created a folder V10.0.12. This folder can have any name. Create a subfolder Manage inside this folder V10.0.12.

12.3. Execute the Infiniti Upgrade file (in our case: InfinitiUpgrade10.0.12.0.exe file) against the folder. In our example browse to the parent folder is V10.0.12 we have created in Step-12.2.

12.4. Once the upgrade is completed, two new folders Produce and IntelledoxScheduler will be created and all the required Infiniti application files will be copied into these three folders: Manage, Produce, and IntelledoxScheduler.

12.5. Open the web.config file inside Manage folder and search for connectionString in the file. Below section will be highlighted.

Modify the lines containing name=“ConnectionString” and name=“DboConnectionString” as below.

<add name="DboConnectionString" connectionString="ix" providerName="ix" />
<add name="ConnectionString" connectionString="ix" providerName="ix" />

12.6. Open the web.config file inside Produce folder and search for connectionString and modify the line containing name=“ConnectionString”.

<add name="ConnectionString" connectionString="ix" providerName="ix" />

The final code for the <connectingString> tag should look like the following:

Connection String

Add a new Data Connection and name it "DboConnectionString" and provide a credentials with dbo permissions. This will be used by Infiniti to run upgrade scripts.

  1. Deploying the App Files to the App Service in Azure
    Now you have the App Files ready, you need to deploy them to the App Service in Azure. There are different ways to do that: manually copy the files to the App Service, using Dropbox or OneDrive, Visual Studio Team Services, etc. More options are shown in below figure.

In this guide, we will illustrate deployment by manually copying the files, and through Dropbox as deployment source.

13.1. Method 1: Deployment of App Files by using Dropbox as the datasource for the App Service. (Similar steps are applicable to OneDrive).
13.1.1. Choose the source as Dropbox, provide your Dropbox username and password for authorization. The folder name in Choose Folder will automatically get populate and will have the same name as your App Service name. Click OK.

13.1.2. Once the deployment source is successfully configured. You will see the Successfully set up deployment source in the notification.

13.1.3. A folder Apps would be automatically created by Azure in your Dropbox. Along with this, a subfolder Azure would also be created. This will be the folder for any deployment in Azure through Dropbox. These folders Apps and Azure would be created when you configure Dropbox as the deployment options for the first time in the Azure portal.

Whenever you configure Dropbox as the deployment options for an App Service, Azure will automatically create a folder with the name as the name of the App Service inside this Apps/Azure folder. In our tutorial, the folder created by Azure inside Dropbox is intelledoxinfinitidemo which is the same name as our App Service.

13.1.4. Copy the Manage, Produce, and IntelledoxScheduler created in Step-12 by running the InfinitiUpgrade.exe file and contains Infiniti application files to this folder (intelledoxinfinitidemo).

13.1.5. Once these folders are Sync with Dropbox, click on the Sync option in the Deployment options (4) of the App Service. Click Yes (5) to confirm the synchronisation request.

13.1.6. The synchronisation of files will start from Dropbox to App Service file system in Azure.

13.1.7. Once the file synchronisation is completed., you will see a tick and the number of files synchronised. With this, we have all the Infiniti app files required to run Infiniti in Azure App Service.

13.2 Method 2: Deployment of Infiniti App Files by manually copying the files to the Apps Service in Azure.
13.2.1. Go to App Services (1), and click on the App Service you have created (2). Click on Advanced Tools option (3) and click Go (4).

13.2.2. A new browser tab will open. Click on Debug console (1) and click CMD (2).

13.2.3. The Azure App Service file system will open. Click on site.

13.2.4. Navigate to site/wwwroot folder.

13.2.5. Create a zip with Produce and Manage folder (created in Step-12 by running the InfinitiUpgrade.exe file and contains Infiniti application files). In our tutorial, we have created the zip with name V10.0.12.zip. The zip can have any name.

13.2.6. Now drag and drop this V10.012.zip to the file system of the App Service inside the site/wwwroot folder.

13.2.7. Check the status of the file copy.

13.2.8. Once the entire zip file is copied, unzip the V10.012.zip by executing the unzip command in the console.
unzip <filename>

13.2.9. This will start the unzip process and will create two folders Manage and Produce and inflate them with the required Infiniti application files.

  1. Executing the Infiniti database scripts.
    14.1. Go to App Service (1) and search for Data connections (2) and click on SQL Database (3).

14.2. Copy the password from the Connection String. You would require this password to connect to the SQL database and to execute the Infiniti database script.

14.3. Click on SQL databases (1). Click on the database you have created and click on Overview (2). Now click on Tools (3) and click on Query editor (preview) (4). This will open the SQL editor where the DB queries can be executed.

14.4. Click on login and select the Authentication type = SQL server authentication, login (username) will be get populated automatically populated, enter the password which you have copied from the Data connection of the App Service. Click OK and you will be logged in into the database.

14.5. Go to Manage/_Database folder and copy the content of the file CreateDB.sql and paste the content in this query editor.

14.6. Execute the query by clicking on the Run. The query executing can be tracked by Query running in the editor.

14.7. Once the query is successfully executed you will see the output in the Messages tab of the query editor. There should not be any errors.

  1. Accessing Manage and Produce
    15.1. Go to App Service overview blade to get yourSiteName.

15.2. Navigate to Manage by using the following link:
https://<yourSiteName>.azurewebsites.net/Manage and log in by using the below default credentials.
Username: admin
Password: admin

Always access Manage first after any Infiniti installation or upgrade

15.3. Navigate to Produce by using the following link:
https://<yourSiteName>.azurewebsites.net/Produce

Deployment Guide


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.