-
Notifications
You must be signed in to change notification settings - Fork 12
Manual Install Deploy Binaries
Manual installation - stage 2 of 3. Prev: 1. Azure resources | Overview | Next: 3. Web tracking & config
App Service accepts a single ZIP deployment through its SCM/Kudu endpoint over HTTPS. Build one package containing the website at the root and both continuous WebJobs under app_data/jobs/continuous.
Sign in to Azure CLI, select the target subscription, and run the following PowerShell from the directory containing Website.zip, AppInsightsImporter.zip, and Office365ActivityImporter.zip:
$staging = Join-Path $PWD "AppServiceDeployment"
$webJobs = Join-Path $staging "app_data\jobs\continuous"
$extractRoot = Join-Path $PWD "AppServiceDeploymentSource"
Remove-Item $staging -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item $extractRoot -Recurse -Force -ErrorAction SilentlyContinue
New-Item $webJobs -ItemType Directory -Force | Out-Null
New-Item $extractRoot -ItemType Directory -Force | Out-Null
function Get-ComponentRoot([string]$zipPath, [string]$name) {
$destination = Join-Path $extractRoot $name
Expand-Archive $zipPath -DestinationPath $destination -Force
$root = Get-Item $destination
while ($root.GetFiles().Count -eq 0 -and $root.GetDirectories().Count -eq 1) {
$root = $root.GetDirectories()[0]
}
return $root
}
$websiteRoot = Get-ComponentRoot .\Website.zip "Website"
Copy-Item "$($websiteRoot.FullName)\*" $staging -Recurse -Force
foreach ($webJobName in @("Office365ActivityImporter", "AppInsightsImporter")) {
$webJobRoot = Get-ComponentRoot ".\$webJobName.zip" $webJobName
$destination = Join-Path $webJobs $webJobName
New-Item $destination -ItemType Directory -Force | Out-Null
Copy-Item "$($webJobRoot.FullName)\*" $destination -Recurse -Force
}
$deploymentZip = Join-Path $PWD "AppServiceDeployment.zip"
Remove-Item $deploymentZip -Force -ErrorAction SilentlyContinue
Compress-Archive -Path "$staging\*" -DestinationPath $deploymentZip
az webapp deploy `
--resource-group "<resource-group>" `
--name "<app-name>" `
--src-path $deploymentZip `
--type zipBefore deployment, inspect the staging directory. Its important paths must be:
AppServiceDeployment\
<website files>
app_data\
jobs\
continuous\
Office365ActivityImporter\
<web-job files>
AppInsightsImporter\
<web-job files>
Some release ZIP tools add an extra parent directory. If that happens, move the contents up so the structure matches the example before creating AppServiceDeployment.zip.
The deployment uses HTTPS/443 and does not require FTP credentials or passive FTP ports. Verify both continuous WebJobs appear in the App Service WebJobs blade.
Verify the website worked by visiting the app-service URL, after configuring the app service below. See Verify for how to verify the app-service.
Finally, with everything prepared, we need to configure the app service with the same configuration used with the web-jobs before.
- Configure settings for web-jobs.
-
Open "configuration" section of app-service.
-
Under "general settings" Make sure "always on" is enabled.

-
-
Configure "environment variables" from the Configuration inventory.
-

Ignore any value not inside the red brackets (‘WEBSITE_NODE_DEFAULT_VERSION’ for example)
The app-service configuration is common for both web-jobs.
Note: if you are using the installer with VNet integration enabled, the installer also adds the
WEBSITE_VNET_ROUTE_ALL=1andWEBSITE_DNS_SERVER=168.63.129.16app settings. If you are configuring the app service manually behind a VNet with private endpoints, set these values yourself so the app service routes outbound traffic through the integration subnet and resolves the private DNS zones correctly.
- Home
- What data is collected
- The web portal
- Licence activity
- Copilot data & stats
- Architecture & costs
- App registrations setup
- Install with the installer
- Manual installation
- Private endpoints (optional)
- Certificate authentication (optional)
- Enable CSP for AITracker
- Verify the deployment
- Legacy SPO web setup