Azure Deployment

Azure Deployment Guide

Deploy SelfHostedDB on Microsoft Azure

This guide covers deploying SelfHostedDB on Azure using Container Instances, App Service, or AKS.


Option 1: Azure Container Instances (ACI)

Best for: Quick deployments, simple setups

Steps

  1. Create Resource Group

    az group create --name selfhosteddb-rg --location eastus
  2. Deploy Container

    az container create \
      --resource-group selfhosteddb-rg \
      --name selfhosteddb \
      --image your-registry/selfhosteddb:latest \
      --dns-name-label selfhosteddb-unique-name \
      --ports 3001 \
      --environment-variables \
        NODE_ENV=production \
        PORT=3001 \
      --secure-environment-variables \
        DATABASE_URL='postgres://...' \
        AUTH_USER='admin' \
        AUTH_PASS='your-password'
  3. Access Application

    • URL: http://selfhosteddb-unique-name.eastus.azurecontainer.io:3001
    • For HTTPS, use Azure Application Gateway or Front Door

Database Options

  • Azure Database for PostgreSQL: Use connection string from Azure Portal
  • Self-hosted: Deploy PostgreSQL container in same resource group

Option 2: Azure App Service (Linux Containers)

Best for: Managed deployments, automatic scaling

Steps

  1. Create App Service Plan

    az appservice plan create \
      --name selfhosteddb-plan \
      --resource-group selfhosteddb-rg \
      --sku B1 \
      --is-linux
  2. Create Web App

    az webapp create \
      --resource-group selfhosteddb-rg \
      --plan selfhosteddb-plan \
      --name selfhosteddb-app \
      --deployment-container-image-name your-registry/selfhosteddb:latest
  3. Configure Environment Variables

    az webapp config appsettings set \
      --resource-group selfhosteddb-rg \
      --name selfhosteddb-app \
      --settings \
        NODE_ENV=production \
        PORT=3001 \
        DATABASE_URL='postgres://...' \
        AUTH_USER='admin' \
        AUTH_PASS='your-password'
  4. Enable HTTPS

    • Azure App Service provides free SSL certificates
    • Configure custom domain in App Service settings

Best Practices

  • Use Azure Key Vault for secrets (reference in App Settings)
  • Enable Application Insights for monitoring
  • Configure auto-scaling rules
  • Set up deployment slots for blue-green deployments

Option 3: Azure Kubernetes Service (AKS)

Best for: Enterprise deployments, complex orchestration

Steps

  1. Create AKS Cluster

    az aks create \
      --resource-group selfhosteddb-rg \
      --name selfhosteddb-aks \
      --node-count 2 \
      --enable-addons monitoring
  2. Deploy Using Kubernetes Manifests

    • Use same YAML as AWS EKS (see Production Guide)
    • Store secrets in Azure Key Vault and reference via CSI driver

Secrets Management

# Store secrets in Azure Key Vault
az keyvault secret set --vault-name selfhosteddb-vault --name database-url --value 'postgres://...'
az keyvault secret set --vault-name selfhosteddb-vault --name auth-user --value 'admin'
az keyvault secret set --vault-name selfhosteddb-vault --name auth-pass --value 'your-password'

Monitoring

Application Insights

  • Performance Monitoring: Track response times, throughput
  • Error Tracking: Automatic error detection and alerting
  • Custom Metrics: Add custom application metrics

Log Analytics

  • Container Logs: View logs from all containers
  • Query Logs: Use KQL (Kusto Query Language) for advanced queries
  • Alerts: Set up alerts based on log queries

Security Best Practices

  • Use Azure Key Vault for all secrets
  • Enable Managed Identity for service-to-service authentication
  • Use Private Endpoints for database connections
  • Enable Azure DDoS Protection
  • Configure Network Security Groups

Related Documentation


Last Updated: 2025-01-27