Edi Wang

Microsoft MVP for Azure

Featured Posts

Modernizing My Azure Deployment Script with PowerShell and Bicep

I refactored Moonglade's Azure deployment from a single, all‑in‑one PowerShell script to a PowerShell + Bicep setup. PowerShell now handles orchestration and user input, while Bicep declaratively defines the App Service Plan, Web App, SQL Server, database, firewall rule, and storage account. This keeps the same one-click experience, but makes the infrastructure easier to maintain, review, and reuse.
Azure PowerShell Bicep

Migrating this Blog to Docker on Linux with Azure App Service

This blog runs on my open-source project Moonglade, a blogging platform built with ASP.NET Core and hosted on Azure. Recently, I migrated it from a Windows Server environment to Docker on Linux, still running on Azure App Service. It’s been running smoothly in production for about two months now. In this post, I’ll walk through that migration journey: what I changed, a few tips and tricks along the way, and some lessons learned that might help you if you’re considering a similar move.
.NET Azure App Service Docker Container

程序员的情绪价值:用 C# 构建实时 MIDI 播放器

在数字音乐的世界里,MIDI(Musical Instrument Digital Interface)就像是音乐的"基因密码"。作为直男程序员,我最近使用.NET 9.0 C# 写了一个命令行 MIDI 播放器,用来增加自己的情绪价值。本文将分析这个有趣的开源项目 Edi.MIDIPlayer,它不仅能播放MIDI音乐,还能实时显示每一个音符的"生命轨迹"。
.NET C#

PowerShell Script to Check Azure App Service SSL Certificate Expiration

When you have a lot of App Service instances running in your Azure subscription, managing their SSL certificate status could be a problem. Azure portal itself does have certain monitoring and advising feature to visualize the certificate status and warn you before a certificate expires. However, in some cases, we prefer this to be done in command line environment. That's why I put together this handy PowerShell script that uses Azure CLI to keep tabs on all your App Service SSL certificates.
Azure PowerShell App Service CLI

Automating Deployment of Open WebUI on Azure Container Apps with Bicep

In my previous blog post, I introduced how to deploy Open WebUI with Azure OpenAI on Azure Container Apps in Azure Portal manually. However, manual deployment usually makes people work 996. In this post, I will show you how to automate everything using Bicep. If you’re new to Bicep, think of it as a friendlier way to define Azure resources as code compared to raw ARM templates. I’ll walk you through my Bicep file, explaining how each block helps set up a scalable, persistent, and easy-to-manage Open Web UI deployment.
Azure AI Container Bicep

Deploy Open WebUI with Azure OpenAI on Azure Container Apps

A few years ago, I shared step-by-step guides on deploying NextChat (ChatGPT Next Web) and BigAGI to Azure using managed PaaS services such as App Service—eliminating the hassle of configuring and maintaining virtual machines. Now, a new UI called Open WebUI has been generating a lot of buzz for its user-friendly interface and open approach. In this post, I’ll walk you through how to easily deploy Open WebUI to Azure using Azure Container Apps. I’ll also show you how to connect it directly to your Azure OpenAI endpoint, all without the need for any additional proxy services like LiteLLM.
Azure AI Docker Container

How to Organize Azure Resource Group Efficiently

In Azure, Resource Groups are a key concept for managing resources. They provide a logical way to group related resources, making it easier to manage and control access. However, as your cloud environment git bigger, organizing Resource Groups becomes more difficult. This blog post explains common practices for using Azure Resource Groups. These tips will help you manage and organize your resources more effectively! Key features of Resource Group are: Group related resources together for easier management. Deleting a resource group also deletes all resources inside it. Assign roles and permissions at the resource group level (IAM).
Azure DevOps

How to Prevent Untrusted Apps from Reading Your Browser Password on Windows

Although Microsoft Edge, Chrome, and Firefox store encrypted passwords in the user profile location, these can be easily decrypted by another program without requiring user authentication or approval. Consequently, an untrusted program, not flagged by Microsoft Defender or other security software, can easily access your passwords. Let's check out the simplest method to prevent this.
Windows Security

How to Run Windows XP and Windows 2000 VM on Azure in 2024

Microsoft Azure does not officially provide Windows XP images for the creation of virtual machines. The earliest version of a client OS image available on Azure is Windows 7. Despite this, I have devised a method to operate legacy Windows operating systems, including Windows XP, on the current Azure compute platform. In this blog post, I will outline the steps involved in this process in detail.
Azure VM

How to Add a Public IPv6 Address to Azure VM

When configuring a new Azure Virtual Machine (VM), you'll notice that it isn't allocated a public IPv6 address automatically. By default, only an IPv4 address is assigned. In this guide, we'll walk you through the process of manually adding a public IPv6 address to your Azure VM, ensuring your setup is future-proof and ready to handle the latest internet protocol requirements. …
Azure Network