Lesson 1: Installing M.App Enterprise
In this tutorial you'll find some detailed information about the installation of M.App Enterprise. It contains four categories for each and every single application, which comes within platform.
Application
The installation progress is pretty straight forward. There are some things to consider of:
- A warehouse user must be created beforehand installing M.App Enterprise
- Most of the time it is sufficient to create a local user account on the server, where the application should be installed
- Or you can also use a user from the active directory
- WebDAV mustn't be used if you want to install M.App Enterprise on the same server
- Master DB --> the metadata schema for Management user, Tenants and Charges
- Create an empty one before installing M.App Enterprise
Responsibilities of the Management user
This user is the "super" admin if this is a fitting name. They controls all tenants with the corresponding initial studio administrator account and is responsible for the charge uploads of all M.App Enterprise environments.
Tenants
Tenants can be different customers for example. They are all managed with the same M.App Enterprise application, but the metadata schemas can be located on different server even in different database provider.
For example: M.App Enterprise is installed on Server 1 with one management user and for different purposes or customers or whatever Tenant 1 in Oracle on Server 2, Tenant 2 in SQLServer on Server 3 and Tenant 3 in PostGIS also on Server 3 are created. Please ensure that everytime a new tenant is created, an empty database has to be created beforehand. The Studio Administrator of Tenant 1 is accessing his studio with the URL: https://SERVER2/Studio/?tenant=Tenant1 and so on.
All metadata schemas are separated from each other and only the management user is seeing and can edit the different connections. By creating a tenant the management user has to create the first studio administrator account as well. This studio administrator has full access to the user and role management for all the apps he ever has created.
Database requirements
Depending on the database provider, there are some requirements, which must be fulfilled by the user, who created the database.
- PostgreSQL: Case - sensitive database. So all tables AND columns must be lowercase.
- SQL Server: Case - insensitive database. Can be checked by the following SQL statement:
- Server:
SELECT SERVERPROPERTY('COLLATION')
- Database:
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
- Column:
SELECT table_name, column_name, collation_name from INFORMATION_SCHEMA.COLUMNS where table_name = @table_name
- Server:
Environment
Defines the name of the environment for which the charge should be used. So if you are using different systems, you can charge different environments with a different amount of hours. For example you have a Development and a Production environment, than you can use for example 2000h (one charge file) for the Dev environment and for example 6000h (another charge file) for the Production environment.
Charges
Upload of the charge file. Charge files (license) are available for download through the Hexagon Safety, Infrastructure & Geospatial Licensing Portal. A valid charge file is required to license and use the M.App Enterprise application. The optional components of Geoprocessing Server and Luciad Fusion Studio are licensed through this tiered charge file and do not require separate charge file upload.
TileService
We recommend to install the application of M.App Enterprise and the Tile Service on two separate server. The installation process is also straight forward.
There are two things to consider of:
- You have to use the same warehouse user you have created in the application itself
- If the application and the tile service is running on the same server you can leave the text field Domain empty or type in
.
- You have to use the same master database for the Tile Service and the application.
- If the application and the tile service is running on the same server you can leave the text field Domain empty or type in
Geoprocessing server
Starting from M.App Enterprise 2018 the Geoprocessing Server is delivered as an additional standalone component. It is mandatory to install it on a separate server (it could be the same server you install TileService on, but you have to consider carefully the loading of this server in production environments).
One of the last steps of the M.App Enterprise wizard includes the configuration of the Geoprocessing Server endpoint. Please put this URL in the form (with no slash at the end):
https://[GEOPROCESSINGSERVER]
The main thing to consider is the access to the Warehouse folder from this additional server.
More details can be found in the following tutorial:
PLACEHOLDER_GHOST_URL
LuciadFusion server
With the release of M.App Enterprise 2019 LuciadFusion is delivered as an additional standalone component. It is highly recommended to install LuciadFusion on a separate server. You can download the dedicated installer from an additional URL provided within the M.App Enterprise download page.
The last step in the M.App Enterprise setup is the configuration of the Fusion Server endpoint. Please put this URL in the form (with no slash at the end):
https://[FUSIONSERVER]
For more information about installing LuciadFusion, please have a look at the following tutorial:
Silent installation
M.App Enterprise installer is simply an MSI package installer type. It is therefore possible to pass configuration parameters to it like with any other software installation.
Command line sample
"M.App Enterprise.exe" /L*V install-quiet.log /qb APPDIR="C:\Program Files\Hexagon\M.App Enterprise" GEOPROCESSINGAPIURL="https://gp-server"" DOMAIN_NAME="" USER_NAME="Administrator" USER_PASSWORD="Qwerty123" CERTIFICATE="4AC535E11CCFF4C0B658DEE5A437C1FB00A6AD64" MAILHOST="smtp.mail-provider.com" MAILENABLESSL="True" MAILPORT="587" MAILUSERNAME="bogus-user@gmail.com" MAILPASSWORD="boguspassword" CONNECTIONSTRING="Data Source=localhost\SQLEXPRESS;Initial Catalog=MAPPMASTER;User ID=user;Password=password" PROVIDERNAME="SqlServer" FUSIONSERVERURL="https://luciad-fusion-server"" WAREHOUSELOCATION="\\machine-or-IP\MAE_Warehouse\"
The sample above uses /qb
switch which enables minimal GUI. The full list of options can be read here
Parameters list
Following is the list of parameters that you should provide to MAE installer to mimic the GUI input.
APPDIR
="C:\Program Files\Hexagon\M.App Enterprise"GEOPROCESSINGAPIURL
="https://gp-server""DOMAIN_NAME
=""USER_NAME
="Administrator"USER_PASSWORD
="Qwerty123"CERTIFICATE
="4AC535E11CCFF4C0B658DEE5A437C1FB00A6AD64"MAILHOST
="smtp.mailserver.com"MAILENABLESSL
="True"MAILPORT
="587"MAILUSERNAME
="bogus-user@mailserver.com"MAILPASSWORD
="bogus-password"PROVIDERNAME
="SqlServer"CONNECTIONSTRING
="Data Source=localhost\SQLEXPRESS;Initial Catalog=MAPPMASTER;User ID=user;Password=password"FUSIONSERVERURL
="https://luciad-fusion-server""WAREHOUSELOCATION
="\machine-or-IP\MAE_Warehouse"
Comments
CERTIFICATE parameter expects certificate thumbprint ID.
You can generate a new self-signed certificate, or use existing certificate using a PowerShell script. Sample script could look like this:$Cert = New-SelfSignedCertificate -DnsName localhost -CertStoreLocation cert:\LocalMachine\My $Thumbprint = $Cert.ThumbprintPROVIDERNAME
valid values are:
- SQLServer
- PostgreSql
- Oracle
You must use standard connection string per each provider which is typically used with .NET applications. This connection string is written into the main web.config file during the installation.
Application Pools
After the installation finishes, it is necessary to adjust the Application Pools because the silent installer will not create proper Log-On identities. This can be solved by the following PowerShell script:
Import-Module WebAdministration
$AppPools = Get-ChildItem -Path IIS:\AppPools | where { $_.Name -match "M.App" }
foreach ($Pool in $AppPools)
{
$Pool.processModel.userName = "Domain\UserName"
# With no domain use:
# $Pool.processModel.userName = "LocalUserName"
$Pool.processModel.password = "Password"
$Pool.processModel.identityType = 3 $Pool | Set-Item
}
Other observations
- You might need to work with UAC restriction, for a default Windows settings, the installation requests explicit user authorization to run the installer.
- There might be some installation warnings or error, such as DB upgrade fail a tenant which has its database down => It is recommended to read the generated install-quiet.log file for any warnings or errors.