workloads/wordpress-vm/wordpress-vm.ps1 (42 lines of code) (raw):
# Define variables
$resourceGroupName = "myResourceGroup"
$location = "eastus"
$vmName = "myVM"
$vmSize = "Standard_DS2_v2"
$adminUsername = "adminUser"
$adminPassword = "adminPassword"
# Create a new resource group
New-AzResourceGroup -Name $resourceGroupName -Location $location
# Create a new virtual network
$vnet = New-AzVirtualNetwork -ResourceGroupName $resourceGroupName -Location $location -Name "myVNet" -AddressPrefix "10.0.0.0/16"
# Create a new subnet
$subnet = Add-AzVirtualNetworkSubnetConfig -Name "mySubnet" -AddressPrefix "10.0.0.0/24" -VirtualNetwork $vnet
# Create a new public IP address
$publicIP = New-AzPublicIpAddress -ResourceGroupName $resourceGroupName -Location $location -Name "myPublicIP" -AllocationMethod Dynamic
# Create a new network security group
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $resourceGroupName -Location $location -Name "myNSG"
# Create a new virtual network interface
$nic = New-AzNetworkInterface -ResourceGroupName $resourceGroupName -Location $location -Name "myNIC" -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $publicIP.Id -NetworkSecurityGroupId $nsg.Id
# Create a new virtual machine
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize $vmSize
$vmConfig = Set-AzVMOperatingSystem -VM $vmConfig -Windows -ComputerName $vmName -Credential (Get-Credential -UserName $adminUsername -Password $adminPassword)
$vmConfig = Add-AzVMNetworkInterface -VM $vmConfig -Id $nic.Id
$vmConfig = Set-AzVMSourceImage -VM $vmConfig -PublisherName "MicrosoftWindowsServer" -Offer "WindowsServer" -Skus "2019-Datacenter" -Version "latest"
$vm = New-AzVM -ResourceGroupName $resourceGroupName -Location $location -VM $vmConfig
# Output the public IP address of the VM
$vm.PublicIpAddress
# Install WordPress
Invoke-Command -ComputerName $vm.PublicIpAddress -ScriptBlock {
# Download and install WordPress
Invoke-WebRequest -Uri "https://wordpress.org/latest.zip" -OutFile "C:\inetpub\wwwroot\wordpress.zip"
Expand-Archive -Path "C:\inetpub\wwwroot\wordpress.zip" -DestinationPath "C:\inetpub\wwwroot"
Rename-Item -Path "C:\inetpub\wwwroot\wordpress" -NewName "wordpress"
# Configure WordPress
$wpConfigPath = "C:\inetpub\wwwroot\wordpress\wp-config.php"
$wpConfig = Get-Content -Path $wpConfigPath
$wpConfig = $wpConfig -replace "database_name_here", "wordpress"
$wpConfig = $wpConfig -replace "username_here", "db_user"
$wpConfig = $wpConfig -replace "password_here", "db_password"
$wpConfig = $wpConfig -replace "localhost", "db_host"
$wpConfig | Set-Content -Path $wpConfigPath
}