W D Azure App Service

Statiq can be configured to deploy to Azure App Service.

The first step is to set up a new Web App which can be found under App Services in the Azure portal. Once you have the web app set up and configured, you'll need to get the deployment credentials.

The following settings are used to configure deployment to Azure App Service:

  • AzureAppServiceSiteName: The name of the site in Azure App Service.
  • AzureAppServiceUsername: The Azure App Service username to use for deployment.
  • AzureAppServicePassword: The Azure App Service password to use for deployment.

It's customary to set one or more of these settings as an environment variable in continuous integration environments (particularly secrets like the password). In these scenarios you can either set an environment variable with the name of the setting or set the setting to an alternate environment variable (which itself will be added as a setting) using a computed value or configuration delegate.

Using a computed value in appsettings.json:

{
    "AzureAppServiceSiteName": "MySiteName",
    "AzureAppServiceUsername": "MyUsername",
    "AzureAppServicePassword": "=> PASSWORD_VAR"
}

The bootstrapper also has an extension method for configuring deployment:

return await Bootstrapper
    .Factory
    .CreateWeb(args)
    .DeployToAzureAppService(
        "MySiteName",
        "MyUsername",
        Config.FromSetting<string>("PASSWORD_VAR")
    )
    // ...
    .RunAsync();

You'll probably want support for extensionless URLs like most other static site hosts. Azure App Service and IIS don't support this by default, but you can configure it using the following web.config file:

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="html">
          <match url="(.*)" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="{R:1}.html" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Place this file in your input folder and it will get copied to the output folder and deployed. A more detailed examination of web.config files for static sites can be found at this blog post.