Project

General

Profile

Azure VPS setup notes » History » Version 51

Jon Goldberg, 10/03/2025 07:32 PM

1 12 Jon Goldberg
{{last_updated_at}} by {{last_updated_by}}
2
3 14 Jon Goldberg
# Microsoft Azure - Setup
4 6 Jon Goldberg
5 14 Jon Goldberg
## For the Client
6 6 Jon Goldberg
7 22 Jon Goldberg
Hi there!  If I've directed you to this page, the part that concerns you are the first three sections only.  It's a bit convoluted, so feel free to ask me if you run into trouble! -Jon
8 14 Jon Goldberg
9 1 Jon Goldberg
[**NOTE**: Most of Microsoft's pages break with an ad blocker enabled.]
10 6 Jon Goldberg
11
### Get a Sponsorship
12
* [Go to the Nonprofit Microsoft Getting Started page](https://nonprofit.microsoft.com/en-us/getting-started).  Fill out the paperwork to be approved as a 501c3.  Approval can take 1 day or 3-4 weeks - I've seen both multiple times.
13
* Once approved, go to https://www.microsoft.com/en-us/nonprofits/azure to claim credits (or go directly to [Claiming Your Credits](https://nonprofit.microsoft.com/en-us/offers/azure).
14 41 Jon Goldberg
* You'll know you're successful because you'll see a sponsorship listed on the [Sponsorship Page](https://www.microsoftazuresponsorships.com/Balance).
15 6 Jon Goldberg
16
### Create a Subscription
17
18 1 Jon Goldberg
* Check that you have credits in your sponsored account: https://www.microsoftazuresponsorships.com/Balance
19
* Visit the [Azure Portal](https://portal.azure.com).  
20
* Click the **Subscriptions** icon.
21
* Click the **Add** button.
22
* Add a subscription of type "Microsoft Azure Sponsorship" from the Azure portal. You will likely need to select **Show other subscription types** to see it.
23
 * **Note**: Even sponsored subscriptions require a credit card, make sure you have one available.
24
25 22 Jon Goldberg
### Grant access to other users
26
Microsoft is now enforcing two-factor authentication, so you need to create a separate user for me as your web vendor.
27 51 Jon Goldberg
28
**October 2025**
29
Starting in October, you must do the additional steps. If not, please start at the "Start Here" section.
30
* Using the search bar at the top, search for **Microsoft Entra ID**.
31
* Click **Manage**, then **Users** in the left-hand menu.
32
* On the toolbar near the top of the page, select **New User » Invite External User**.
33
* Add my email (jon@megaphonetech.com) and display name.
34
* Click **Review and Invite** at the bottom left of the page.
35
36 22 Jon Goldberg
[Source](https://docs.microsoft.com/en-us/azure/cost-management-billing/manage/add-change-subscription-administrator) for instructions
37 51 Jon Goldberg
[START HERE if it's not October yet]
38 26 Jon Goldberg
* Open the new subscription by clicking on it from the **Subscriptions** page.
39 22 Jon Goldberg
* Click **Access Control (IAM)** in the left navigation bar.
40 43 Jon Goldberg
* At the top, press **Add » Add role assignment**.
41
* On the *Role* tab, go to the **Privileged administrator roles** subtab. 
42
* Click **Owner** and press **Next**.
43 25 Jon Goldberg
* On the *Members* tab, set *Assign Access* to **User, group, or service principal**, and click **Select Members**.
44 50 Jon Goldberg
* In the *Search by name or email address* box, put the email of the new user and press **Select**. Press **Next**.
45
* On the *Conditions* tab, select **Allow user to assign all roles except privileged administrator roles Owner, UAA, RBAC (Recommended)**.
46 40 Jon Goldberg
* Click **Review and Assign**, then click **Review and Assign** again.
47 22 Jon Goldberg
At this point, they'll receive an email to either log in with an existing Microsoft account or to create a new one.
48
49 42 Jon Goldberg
### On Renewals
50 49 Jon Goldberg
You will need to renew every year.  Instructions for this are incomplete - but you should go to your [Azure portal](https://portal.azure.com) and click the **Subscriptions** button (see screenshot 1 below).  Find the subscription ID (screenshot 2) - it's a string of numbers and letters.  Then go to https://www.microsoftazuresponsorships.com/Balance and assign your new credits to the existing subscription.
51 42 Jon Goldberg
52 1 Jon Goldberg
If you did not do this in time, you should be able to open a support ticket with Microsoft to request a refund.
53 49 Jon Goldberg
54
**Screenshot 1**
55
![Azure portal toolbar, "Subscriptions" is circled](Selection_2157.png)
56
**Screenshot 2**
57
![Azure portal Subscriptions screen, a red arrow points to the Subscription ID](Selection_2158.png)
58 42 Jon Goldberg
59 16 Jon Goldberg
## Technical Configuration
60
To set up a free account, you must:
61
* Get a Sponsorship (see above)
62
* Create a Subscription linked to the Sponsorship (see above)
63
* (Strongly recommended) Grant access to the subscription to other users.
64
* Create a Resource Group linked to the Subscription
65
* Create a Virtual Machine (and associated resources) linked to the Resource Group
66 14 Jon Goldberg
67
### Create a resource group
68 47 Jon Goldberg
* Select "Resource Groups" from the main Azure portal (left sidebar).
69 28 Jon Goldberg
* Select **Create** and give it a name.
70 1 Jon Goldberg
* Your subscription should be pre-selected since you only have the one.
71 23 Jon Goldberg
* Click **Review and Create**, then **Create**.
72 6 Jon Goldberg
73 1 Jon Goldberg
### Create a virtual machine
74 14 Jon Goldberg
* Click on your new resource group in the Azure Portal.
75 30 Jon Goldberg
* Click **Create**.
76 47 Jon Goldberg
* Search for the name of the image you want (e.g. `Debian 12 "Bookworm"`).
77 23 Jon Goldberg
 * If you picked an image that shows an hourly cost, it's probably the wrong one.
78 31 Jon Goldberg
* See the screenshots below for configuration of the "Basics" and "Disk" tabs.  The other tabs I keep with the defaults.  My standard VPS type is now `D2as_v5`.
79
 * "D2" is general-purpose VM, we always select this.  "a" is AMD-series, "d" is temp disk included (we don't need this), "s" supports premium SSD disks.
80 9 Jon Goldberg
* I've attached a downloaded template for this VM, which as of now I haven't used yet, not sure how it works.
81
82
![Create a VM - Basics Tab](https://hq.megaphonetech.com/attachments/download/1771/Selection_999(010).png)
83
84 15 Jon Goldberg
![Create a VM - Disks Tab](Selection_1016.png)
85 6 Jon Goldberg
86 14 Jon Goldberg
### Post-provisioning configuration
87 10 Jon Goldberg
88 37 Jon Goldberg
#### Get serial console working
89 1 Jon Goldberg
Serial console is necessary for single-user mode, and troubleshooting if SSH fails.
90
* Go to **Boot Diagnostics** in the VM's left nav.
91
* Click **Settings** at the top.
92 44 Jon Goldberg
* Select **Enable with managed storage account**.
93
* Save.
94 1 Jon Goldberg
95 37 Jon Goldberg
Now Serial Console will work.
96
97 38 Jon Goldberg
#### Partition and format the attached disk
98
Your VM will have an "OS disk" of 30GB it ships with.  Your attached disk is unformatted.  Partition and format the new disk (via SSH):
99
* Use `fdisk -l` to determine the attached disk and change the first command below accordingly.
100 37 Jon Goldberg
101
```shell
102
DISK=/dev/sdb
103 48 Jon Goldberg
# install parted, lsof and rsync
104
sudo apt install parted lsof rsync
105 37 Jon Goldberg
sudo parted --script -a optimal $DISK mklabel gpt -- mkpart primary ext4 '0%' '100%'
106 1 Jon Goldberg
sudo mkfs -t ext4 ${DISK}1
107 38 Jon Goldberg
```
108
109
#### Mount the attached disk
110
From within *Serial Console*:
111
```shell
112
DISK=/dev/sdb
113 37 Jon Goldberg
# Go to single-user mode
114
init 1
115 1 Jon Goldberg
# Ensure that no files are open in /var.
116
# This should come back empty. (Note that recently it hasn't been but seems to work anyway).
117 37 Jon Goldberg
lsof | grep /var
118
# pkill anything that's running, e.g. `pkill hv_kvp_daemon`.  It's OK if `systemd-journal` has files open.
119 1 Jon Goldberg
120 37 Jon Goldberg
mount ${DISK}1 /mnt
121 1 Jon Goldberg
rsync -va /var/* /mnt
122 37 Jon Goldberg
mv /var /var.old
123
umount /mnt
124
mkdir /var
125
mount ${DISK}1 /var
126
127
# Get the UUID of the drive for fstab
128 39 Jon Goldberg
# Look for the partition you just created
129
blkid
130 1 Jon Goldberg
131 37 Jon Goldberg
vi /etc/fstab
132 46 Jon Goldberg
```
133
134
Add the following line to `/etc/fstab`, subbing in *your* UUID:
135
```
136 1 Jon Goldberg
UUID=13523269-c397-46a4-93b5-cb9f108489da       /var     ext4    defaults    0 1
137 46 Jon Goldberg
```
138 38 Jon Goldberg
You can reboot now to see that everything looks good.  Note that due to a bug in `cloud-init`, there's a 2-minute delay on every reboot in Debian 11 (fixed in Debian 12, will presumably be backported at some point).
139 6 Jon Goldberg
140 8 Jon Goldberg
#### Modify Firewall Rules
141
* Click on your new virtual machine in the Azure portal.
142 14 Jon Goldberg
* Click **Networking** in the side navigation.
143 6 Jon Goldberg
* You should see your firewall settings.  They should look like the screenshot below, except they'll be missing the two items circled.
144
* Add the "allow_ping" and "Port_5665" rules to the *Inbound Port Rules* as shown in the screenshot.
145
146
![Firewall Rules](https://hq.megaphonetech.com/attachments/download/1772/Selection_999(012).png)
147
148
#### Add a swapfile
149
[Complete instructions are here](https://support.microsoft.com/en-us/help/4010058/how-to-add-a-swap-file-in-linux-azure-virtual-machines) but in short, add this to `/etc/waagent.conf` for an 8GB swapfile:
150
151
```
152 27 Jon Goldberg
    ResourceDisk.Format=y
153
    ResourceDisk.EnableSwap=y
154
    ResourceDisk.SwapSizeMB=8192
155
```
156 1 Jon Goldberg
157
Then run `service walinuxagent restart`.
158
159
## Post-deployment management
160
### Adding a new disk
161
Add a disk by going to the virtual machine and clicking "Disk", not by "Add Resource".  Then used the `parted` and `mkfs` commands from above.  Don't forget to modify `/etc/fstab`!