Back to Deployment Guides

Azure Deployment Guide

Learn how to deploy your Next.js applications to Microsoft Azure using App Service and Git deployment.

1

Set Up Azure Account

Create a Microsoft Azure account if you don't have one already. New users get $200 in free credits to spend on Azure services.

Visit azure.microsoft.com/
2

Install Azure CLI

Install the Azure Command Line Interface (CLI) to interact with Azure services from your command line.

# For macOS (using Homebrew)
brew install azure-cli

# For Windows (using installer)
# Download from https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-windows

# For Debian/Ubuntu
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
3

Log in to Azure

Log in to your Azure account. This will open a browser window where you can authenticate with your Microsoft account.

az login
4

Create a Resource Group

Create a resource group to organize all the resources for your application. Replace 'myResourceGroup' with your preferred name and 'eastus' with your preferred region.

az group create --name myResourceGroup --location eastus
5

Create an App Service Plan

Create an App Service Plan, which defines the compute resources for your web app. This example uses the B1 (Basic) tier with Linux.

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku B1 --is-linux
6

Create a Web App

Create a Web App using Node.js 16 LTS. Replace 'myNextJsApp' with your preferred app name. This name must be globally unique as it will be part of your app's URL.

az webapp create --name myNextJsApp --resource-group myResourceGroup --plan myAppServicePlan --runtime "NODE|16-lts"
7

Configure App Settings

Configure application settings for your web app, including the Node.js version and build settings.

az webapp config appsettings set --name myNextJsApp --resource-group myResourceGroup --settings WEBSITE_NODE_DEFAULT_VERSION=16-lts SCM_DO_BUILD_DURING_DEPLOYMENT=true
8

Update package.json

Update your package.json file to specify the Node.js version requirement. This ensures Azure uses the correct Node.js version.

{
  "name": "my-nextjs-app",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  },
  "engines": {
    "node": ">=16.0.0"
  }
}
9

Create a Deployment Script

Create deployment configuration files to customize the deployment process. The .deployment file tells Azure to use the custom deployment script, and deploy.sh contains the deployment commands.

# .deployment
[config]
SCM_DO_BUILD_DURING_DEPLOYMENT=true

# deploy.sh
#!/bin/bash

# Navigate to the project directory
cd "$DEPLOYMENT_SOURCE"

# Install dependencies
npm install

# Build the Next.js application
npm run build

# Copy the build output to the deployment directory
cp -r .next "$DEPLOYMENT_TARGET"
cp -r node_modules "$DEPLOYMENT_TARGET"
cp -r public "$DEPLOYMENT_TARGET"
cp package.json "$DEPLOYMENT_TARGET"

echo "Deployment completed successfully!"
10

Configure GitHub Actions (Optional)

You can set up continuous deployment using GitHub Actions. Create a workflow file in your repository:

# .github/workflows/azure-deploy.yml
name: Deploy to Azure

on:
  push:
    branches: [ main ]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    
    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '16'
        cache: 'npm'
    
    - name: Install dependencies
      run: npm ci
    
    - name: Build
      run: npm run build
    
    - name: Deploy to Azure
      uses: azure/webapps-deploy@v2
      with:
        app-name: 'myNextJsApp'
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        package: .
11

Deploy Your Application

Deploy your application to Azure using Git deployment. This will push your code to Azure, which will then build and deploy your application.

# Initialize a Git repository if you haven't already
git init
git add .
git commit -m "Initial commit"

# Add Azure as a remote repository
az webapp deployment source config-local-git --name myNextJsApp --resource-group myResourceGroup

# Get the Git remote URL
az webapp deployment list-publishing-credentials --name myNextJsApp --resource-group myResourceGroup --query scmUri --output tsv

# Add the remote and push your code
git remote add azure <GIT_REMOTE_URL>
git push azure main
12

Set Up Custom Domain (Optional)

To use a custom domain with your Azure Web App, you need to verify domain ownership and configure DNS settings.

# Add a custom domain to your web app
az webapp config hostname add --webapp-name myNextJsApp --resource-group myResourceGroup --hostname www.yourdomain.com

# Add SSL binding (requires an SSL certificate)
az webapp config ssl bind --certificate-thumbprint <CERTIFICATE_THUMBPRINT> --ssl-type SNI --name myNextJsApp --resource-group myResourceGroup
13

Enable Logging (Optional)

Enable logging for your web app to help with debugging and monitoring.

az webapp log config --name myNextJsApp --resource-group myResourceGroup --application-logging filesystem --detailed-error-messages true --failed-request-tracing true --web-server-logging filesystem
14

Set Up Monitoring with Application Insights (Optional)

Set up Application Insights to monitor your application's performance and usage. This provides valuable insights into how your application is being used and helps identify issues.

# Create Application Insights resource
az monitor app-insights component create --app myAppInsights --location eastus --resource-group myResourceGroup --application-type web

# Get the instrumentation key
az monitor app-insights component show --app myAppInsights --resource-group myResourceGroup --query instrumentationKey --output tsv

# Add the instrumentation key to your web app settings
az webapp config appsettings set --name myNextJsApp --resource-group myResourceGroup --settings APPINSIGHTS_INSTRUMENTATIONKEY=<INSTRUMENTATION_KEY>
15

Scale Your Application (Optional)

Scale your application up (more powerful hardware) or out (more instances) as needed to handle increased traffic or improve performance.

# Scale up (change pricing tier)
az appservice plan update --name myAppServicePlan --resource-group myResourceGroup --sku S1

# Scale out (change instance count)
az appservice plan update --name myAppServicePlan --resource-group myResourceGroup --number-of-workers 2

Additional Resources

Azure Documentation

Official Microsoft Azure documentation with comprehensive guides and API references.

Visit Documentation

App Service Documentation

Detailed documentation for Azure App Service, Microsoft's platform for hosting web applications.

Visit Documentation

Next.js Deployment

Official Next.js documentation on deploying to various platforms, including Microsoft Azure.

Visit Documentation

Need Help with Azure Deployment?

If you need assistance deploying your application to Microsoft Azure or have questions about implementation, I'm here to help.