As of 10.1 Telligent Community can be run as an Azure WebApp using an Azure SQL database, Azure Service Bus, Azure Storage account and Azure Web Jobs. This guide will assist in helping you understand the technologies being used and where they need to be deployed in Azure, however there is an expectation that your organization has an understanding of how Azure works, its components and infrastructure, and utilization of the Azure portal.
[toc]
Limitations
Currently, Azure is only a supported solution for a new community running version 10.1 or later. There is currently no supported migration path from an on-premise installation of Telligent Community to an Azure based installation unless you are currently running version 10.3 or higher and only if you currently use the default local filesystem for file storage.
You will still need to have at least a single windows virtual machine(VM) to install and run search (SOLR). This machine should only be accessible by the website and job service, not publicly.
Planning
It is important to plan out your architecture before building it as it requires a functional knowledge of Azure and how to configure all aspects of Azure topology. This guide will go through the components needed for Telligent Community to run in Azure, but to ensure a secure, stable and efficient infrastructure you will need to understand parts of Azure that are beyond the scope of this article.
The biggest consideration is that Telligent Community requires a mix of App Services and at least 1 virtual machine. The App Services need to be able to communicate with the VM while still being available over the internet publicly, however the VM itself must not be accessible.
Required Components
Azure Web Application (WebApp)
This is where the actual Telligent Community web components will be deployed. Create a new WebApp in Azure App Services and in its application settings ensure the following:
- .NET Framework is set to version 4.7 (or higher)
- Web Sockets are ON
- Always On is set to ON
- ARR Affinity is set to ON
Other options can be left in their default state. Once set up be sure to STOP the WebApp itself.
Job Server
The job server runs as a continuous Azure Web Job that you configure as part of the WebApp itself or it can run as its own WebApp . To set up the job server as a web job, access the WebApp responsible for running the jobs, select WebJobs and add a new one. Or you can do this on its own separate WebApp but the steps are the same.
- It should be configured as continuous.
- The required command file is Telligent.Jobs.AzureWebJobs.cmd and it can be found in your Telligent Community installation package in the JobServer folder.
Be sure the Web Job remains in a stopped state.
SQL Database
The database portion of the community utilizes an Azure SQL database. Your community requires a dedicated SQL database(it should not be shared with any other applications) but can share a SQL Server. Never make alterations to the database schema even if a third party tool or Azure itself makes recommendations. When configuring a SQL database be sure to:
- Automatic Tuning options for FORCE PLAN, CREATE INDEX, and DROP INDEX are set to OFF for their desired state. Do not use INHERIT to ensure these settings are not accidentally applied to the server.
Service Bus
You can create a new service bus on in Azure or utilize an existing one, however whichever you choose that service bus must support topics. This means as of the publication of this document you must use a standard pricing tier or higher. Basic does not support topics.
You should create a community specific shared access key on the bus. Avoid using the default. This way, especially in a shared bus, an access key can be revoked without impacting other services. When creating a new shared access policy/key it needs the following permissions:
- Manage
- Listen
- Send
Storage Account
The Centralized File Storage(CFS) portion of of your community is housed in a Azure storage account you will need to create. This storage account needs to be dedicated to your community and not utilized for any other application or other storage purpose. Telligent Community manages the contents of the storage account and therefore unless directed by support you should never manually manipulate the contents of the storage account or configure it outside of the recommended settings outlined below:
- Configure the storage account as "Blob Storage", not general purpose
- Production storage accounts should always be on a "Hot" tier.
Migrating Your Files to Azure
If you are currently running version 10.3 or higher and you already have an existing community that uses the default local file system for file storage you can migrate files to Azure.
CDN
It is highly recommend you place your storage account behind a CDN. CDNs offer expanded capabilities and features such as compression that blob storage directly does not. You can create a new CDN end point directly from the storage account itself. Be sure to note the endpoint url for later use.
NOTE: At the time of publication, the Standard Akamai CDN was not compatible with Telligent Community. Please select one of the alternative solutions such as standard Verizon.
Search
As noted previously, search currently does not utilize any Azure specific services or features. It must be installed on a windows virtual machine powerful enough to handle the search traffic and enough disk space to store the search index. This server should never be accessible over the internet publicly. It does however have to be accessible to the WebApp and Jobs.
Because search is run on a virtual machine, its installation is no different than installing it on a windows machine on-premise and those instructions should be consulted.
Deployment
Preparation
It is assumed at this point you have you created the infrastructure as defined above and have all the components in place. If not please review the required components again and setup as necessary.
Configure Connection Strings
If you are used to on-premise installations you are familiar with having to setup connection strings in the connectionstrings.config file. In an Azure deployment all the connection strings are stored as part of the WebApp and configured in the portal. Access the WebApp's Application settings and locate the connection strings section. You need to add and configure the keys below.
***DO NOT SET the Slot setting for any key. It should remain unchecked
Name | Value | Category |
SiteSqlServer | The connection string value of the SQL Database. You can obtain this from the connection strings area of the SQL database itself. Be sure to substitute the correct name and password. | SQL Database |
AzureServiceBus | The connection string to the service bus you configured. It can be copied from the access keys area of the service bus instance. | Service Bus |
AzureServiceBusTopic | A user defined string that will be used as the topic in the service bus. A good value to use is the name of your community. | Custom |
AzureFilestorageContainer | The connection string of the storage account created for CFS. It can be copied from the access keys area of the storage account instance. | Custom |
SearchContentUrl | The url that points to the search index. It should be http://[solrvm]:8983/solr/telligent-content/ where [solrvm] should be replaced with the IP or DNS name or your search virtual machine | Custom |
SearchConversationsUrl | The url that points to the search index for conversations. It should be http://[solrvm]:8983/solr/telligent-conversations/ where [solrvm] should be replaced with the IP or DNS name or your search virtual machine | Custom |
IMPORTANT: If you are running the web job as part of of the main WebApp, then you needn't set up separate connection strings. However if you chose to run the web jobs in their own dedicated WebApp , you will need to also set these connection strings up on that WebApp .
Prepare Web and Job Files For Deployment
- Locate your Telligent Community Installation Package and be sure the .zip file is unblocked. Extract the zip file.
- Locate the Azure deployment zip file you obtain from Telligent Support. Ensure it is unblocked after download and extract it.
- In the Azure package, copy the contents of Web Folder to the Telligent Community package's web folder. When prompted by Windows if you want to merge the bin folder as one already exists, select yes.
- In he Azure package, copy the contents of JobServer Folder to the Telligent Community package's JobServer folder.
- Edit the communityserver_override.config file in the Telligent Community web package and un-comment the 2 override nodes for the filestoragegroup.
- If you are using a CDN for your storage account, edit the fileStoreGroup node with the name of "Azure" by adding the attribute cdnUrl and a value equal to the url of your cdn like below:
<Override xpath="/CommunityServer/CentralizedFileStorage" mode="add" where="end"> <fileStoreGroup name="Azure" default="true" type="Telligent.Evolution.Azure.Filestorage.AzureBlobFilestorageProvider, Telligent.Evolution.Azure.Filestorage" cdnUrl="https://yourcdn.azureedge.net" /> </Override>
- If you are using a CDN for your storage account, edit the fileStoreGroup node with the name of "Azure" by adding the attribute cdnUrl and a value equal to the url of your cdn like below:
- Repeat step 5 for the communityserver_override.config file in the Telligent Community package's Job Server folder, or if this is the only override you can simply copy the web version into the JobServer folder.
Installation
Database
Previously you had already created a new dedicated database, setting up your community database is no different than an on-premise installation. Connect to the database using the tool of your choice that will allow you to execute SQL scripts and do the following:
- In the Telligent Community Installation package execute Install.sql.
- Once the install script has finished with no errors, set up your community by executing the following:
EXECUTE[dbo].[cs_system_CreateCommunity] @ApplicationName = N'telligent', @AdminEmail = N'notset@localhost.com', @AdminUserName = N'temporary-admin', @AdminPassword = N'[PUT A TEMPORARY PASSWORD HERE]', @PasswordFormat = 0, @CreateSamples = 0
NOTE: As with an on-premise installation, the temporary-admin account should be removed after you have created an alternate administrative account via the community itself for security purposes.
Job Server
Using a deployment method of your choice such as FTP, deploy the contents of the Telligent Community package's JobServer folder [site/wwwroot/App_Data/jobs/continuous/[Web job Name]] to the WebApp's job folder. You will be prompted to override the command file as you uploaded it to create the job, this ok or you can skip it.
Web Site
Similar to job server, using a deployment method of your choice such as FTP, deploy the contents of the Telligent Community package's Web folder [site/wwwroot] to the WebApp's site folder.
Search
As mentioned previously, because you are installing search on a windows VM, its installation is the same as on-premise installations. See the search installation section of How Do I Install Telligent Community?. Remember your VM will need to have a Java JRE installed (8+).
IMPORTANT: Search cannot be publicly accessible. You will need to configure your environment in such a way as to allow communication from the WebApp to the search VM on its virtual network while ensuring that any public traffic is being blocked to the VM itself.
Upgrading
You must bring your community down completely to upgrade. You cannot rely on slot deployments or upgrading single nodes at a time. The database and ALL web files must be updated for your community to function. Failure to do this could result in instability, data corruption or failure of your installation. Run backups of all components for safety.
- Repeat the section Prepare Web and Job Files for Deployment to get the new package ready. Instead of re-manipulating the community_server.config file, you can simply back up the existing one and use it instead.
- STOP the Web job for the job server. DO NOT Rely on shutting down the web app to shut it down.
- STOP the WebApp
- Using FTP or another deployment option, clear the contents of the [site/wwwroot/App_Data/jobs/continuous/[Web job Name]]
- Using FTP or another deployment option, clear the contents of the [site/wwwroot] folder leaving the App_Data folder in tact.
- Connect to your database using a tool of your choice and execute the Upgrade.sql file.
- Re-Install the job the same was as you did in the Job Server section of the Installation.
- Re-Install the web files the same was as you did in the Web Files section of the Installation.
- Restart the WebApp and Web Job