Admin API 2.x - IIS Installation (PowerShell)
Before You Install
This section provides general information to review before installing the Ed-Fi ODS / API Admin API for v2.2.2.
Compatibility & Supported ODS / API Versions
This version of the Admin API has been tested and can be installed for use with the Ed-Fi ODS / API v7.1. See the Ed-Fi Technology Version Index for more details.
Installation Instructions
Prerequisites
A running instance of the ODS / API v7.1 platform must be configured and running before installing Admin API.
Admin API only supports running one instance of the application at a time in an ODS / API ecosystem. Future versions may allow for scaling and load balancing.
Admin API does not support in-place upgrades from prior versions. Please install a fresh copy of Admin API to upgrade from prior versions.
The following are required to install the Admin API with IIS:
- Enable IIS (before installing .NET Hosting Bundle).
- Install .NET 8 Hosting Bundle v8.0.21 or higher. After installing the .NET Hosting Bundle, it may be necessary to restart the computer for the changes to take effect.
Installation Steps
Each step is outlined in detail below for the PowerShell deployment. Ensure that you have permission to execute PowerShell scripts. For more information, see about_Execution_Policies.
Installation files
The following is a Nuget package containing the Admin API v2.2.2 binaries and installer scripts for deployment to IIS.
Step 1. Rename and Unzip Admin API Source Files
Download and rename the linked Nuget Package (.npkg) to .zip

Unzip the contents.

There will be two folders. AdminApi folder will have binaries. Installer folder contains PowerShell scripts required for installation.
Step 2. Configure Installation
Open the "install.ps1" file in a text editor. You will need to edit this file with your configuration details. If a value is not present for any of the parameters, it will use its default value.
Editing Items 2(a, b) below are mandatory for installation to complete.
- Configure
$dbConnectionInfo. These values are used to construct the connection strings.-
Server. The name of the database server. For a local server, we can use "(local)" for SQL and "localhost" for PostgreSQL. -
Engine.Admin App supports SQL and PostgreSQL database engines. So setting up theEnginewill decide which database engine to be used. Valid values are "SQLServer" and "PostgreSQL". -
UseIntegratedSecurity.Will either be "$true" or "$false".- If you plan to use Windows authentication, this value will be "$true"
- If you plan to use SQL Server/ PostgreSQL server authentication, this
value will be "$false" and the Username and
Passwordmust be provided.
-
Username. Optional. The username to connect to the database. IfUseIntegratedSecurityis set to $true, this entry is not needed -
Password. Optional. The password to connect to the database. IfUseIntegratedSecurityis set to $true, this entry is not needed -
Port.Optional. Used to specify the database server port, presuming the server is configured to use the specific port.
-
- Configure
$authenticationSettings. These values are mandatory for authentication process.
a. SigningKey: must be a Base64-encoded string
b. Authority and IssuerUrl: should be the same URL as your application
c. AllowRegistration: to true allows unrestricted registration of new Admin API clients.
3. Configure $p. This is the variable used to send all the information to
the installation process.
-
ToolsPath. Path for storing installation tools, e.g., nuget.exe. Defaults to "C:/temp/tools"PackageVersion. Optional. If not set, will retrieve the latest full release package.
Database engine specific connection information ($dbConnectionInfo):
SQL Server
$dbConnectionInfo = @{
Server = "(local)"
Engine = "SqlServer"
UseIntegratedSecurity = $false
Username = "exampleAdmin"
Password = "examplePassword"
}
PostgreSQL Server
$dbConnectionInfo = @{
Server = "localhost"
Engine = "PostgreSQL"
UseIntegratedSecurity = $false
Username = "postgres"
Password = "examplePassword"
}
Single-Tenant
$authenticationSettings = @{
Authority = "[https://localhost/adminapi](https://localhost/adminapi)"
IssuerUrl = ""[https://localhost/adminapi](https://localhost/adminapi)"
SigningKey = "Base64-encoded string"
AllowRegistration = $false
}
$packageSource = Split-Path $PSScriptRoot -Parent
$adminApiSource = "$packageSource/AdminApi"
$p = @{
ToolsPath = "C:/temp/tools"
DbConnectionInfo = $dbConnectionInfo
PackageVersion = '2.2.2.0'
PackageSource = $adminApiSource
AuthenticationSettings = $authenticationSettings
}
Multi-Tenant
$authenticationSettings = @{
Authority = "[https://localhost/adminapi](https://localhost/adminapi)"
IssuerUrl = ""[https://localhost/adminapi](https://localhost/adminapi)"
SigningKey = "Base64-encoded string"
AllowRegistration = $false
}
$packageSource = Split-Path $PSScriptRoot -Parent
$adminApiSource = "$packageSource/AdminApi"
$p = @{
IsMultiTenant = $true
ToolsPath = "C:/temp/tools"
DbConnectionInfo = $dbConnectionInfo
PackageVersion = '2.2.2.0'
PackageSource = $adminApiSource
AuthenticationSettings = $authenticationSettings
Tenants = @{
Tenant1 = @{
AdminDatabaseName = "EdFi_Admin_Tenant1"
SecurityDatabaseName = "EdFi_Security_Tenant1"
}
Tenant2 = @{
AdminDatabaseName = "EdFi_Admin_Tenant2"
SecurityDatabaseName = "EdFi_Security_Tenant2"
}
}
}