Windows Server
Deploy, connect to, and manage Windows Server 2019, 2022, and 2025 LTSC instances.
Windows Server
HostUp Cloud offers Windows Server 2019, 2022, and 2025 as pre-built LTSC (Long-Term Servicing Channel) templates with Desktop Experience (full GUI), VirtIO drivers, QEMU guest agent, and Cloudbase-Init pre-installed for automatic first-boot configuration.
Available Versions
| Version | Channel | EOL | Recommended For |
|---|---|---|---|
| Windows Server 2019 | LTSC | January 2029 | Legacy .NET apps, compatibility with older software |
| Windows Server 2022 | LTSC | October 2031 | General purpose — recommended default |
| Windows Server 2025 | LTSC | October 2034 | New deployments needing the latest features |
All three versions ship with Desktop Experience (full GUI). Server Core builds can be provided on request via support.
Minimum Requirements
Windows Server has stricter minimum requirements than Linux distributions. Microsoft's own published minimum for Server 2019+ is 32 GB disk and 2 GB RAM. Our Console enforces this — plans with less than 32 GB of disk are automatically hidden when a Windows image is selected.
| Resource | Minimum | Why |
|---|---|---|
| Disk | 32 GB | Windows install (~13 GB) + pagefile + update staging + headroom |
| RAM | 2 GB | Below this, updates and services thrash |
| vCPU | 1 | Functional, but 2+ recommended for responsiveness |
Running Windows Server on a 20 GB disk is not supported. The OS will fill its disk within weeks once Windows Update begins downloading cumulative updates.
Deploying a Windows Instance
- Log in to the Console and open your project.
- Click Create Instance.
- Select a Region.
- Under Image, pick Windows Server and the version you want.
- Choose a Plan — only 32 GB+ plans will be visible.
- Set a hostname (must be 2–15 characters, letters/numbers/hyphens; this becomes the Windows ComputerName).
- Optionally attach SSH keys — these are injected as PowerShell OpenSSH keys for the
Adminuser. - Click Create Instance.
The first boot takes longer than Linux (2–4 minutes) while Cloudbase-Init runs hostname setup, account creation, and volume expansion.
Connecting via RDP
Windows templates ship with Remote Desktop (RDP) enabled and a firewall rule allowing port 3389 in on all profiles.
From Windows
- Press
Win + R, typemstsc, press Enter. - Computer: your instance's public IPv4 address.
- User:
Admin - Click Connect and enter the password shown in the Console (Instances → your instance → Credentials).
From macOS
Install Microsoft Remote Desktop from the App Store, then:
- Click + → Add PC.
- PC name: your instance's public IPv4.
- User account: add the
Adminuser and password. - Save and double-click to connect.
From Linux
Use Remmina (GTK) or xfreerdp:
xfreerdp /v:<public-ip> /u:Admin /p:'<password>' /dynamic-resolution /cert:ignoreThe first RDP connection shows a certificate warning because the template uses a self-signed RDP certificate. This is expected. To replace it with a trusted certificate, install one via Remote Desktop Session Host Configuration after first login.
First-Boot Configuration (Cloudbase-Init)
On first boot, Cloudbase-Init reads the cloud-init metadata drive attached to your instance and performs:
| Task | Source |
|---|---|
| Set ComputerName to your chosen hostname | Instance metadata |
| Create the Admin local user in the Administrators group | Instance metadata |
| Set the Admin password | Generated per-instance, shown in Console |
| Expand C: to fill the full disk of your plan | Automatic |
Inject SSH public keys for the Admin user | SSH keys selected during create |
| Apply user-data scripts (PowerShell or cloud-config) | Cloud-Init field during create |
Cloudbase-Init runs once per generalized image. If you want it to re-run (for example after cloning an instance manually), run C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\Unattend.xml via sysprep.
Console (VNC)
If RDP is blocked by a firewall, or you've locked yourself out, use the web-based VNC console:
- Go to Instances → your instance.
- Click the Console button.
- You'll see the Windows logon screen directly in the browser.
VNC runs at the hypervisor level and bypasses Windows networking. Always keep a strong Admin password — the VNC connection itself is secured, but anyone with Console access to the instance can see the desktop.
Common Tasks
Change the Administrator password
Open an elevated PowerShell and run:
$newPw = Read-Host -AsSecureString "New password"
Set-LocalUser -Name Admin -Password $newPwAdd a new user
$pw = Read-Host -AsSecureString "Password for alice"
New-LocalUser -Name alice -Password $pw -FullName "Alice"
Add-LocalGroupMember -Group "Administrators" -Member alice
Add-LocalGroupMember -Group "Remote Desktop Users" -Member aliceOpen a port on the Windows Firewall
New-NetFirewallRule -DisplayName "Allow HTTP" -Direction Inbound `
-Protocol TCP -LocalPort 80 -Action AllowInstall IIS (web server)
Install-WindowsFeature -Name Web-Server -IncludeManagementToolsInstall OpenSSH Server (for SSH into Windows)
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
New-NetFirewallRule -DisplayName "SSH" -Direction Inbound `
-Protocol TCP -LocalPort 22 -Action AllowUpdating Windows
Cumulative updates (Windows Update → Check for updates) are not pre-applied to the template — you'll receive patches on your first boot. Plan for a 20–60 minute update cycle on a fresh instance.
# Trigger an update scan and install without reboot
Install-Module PSWindowsUpdate -Force
Get-WindowsUpdate -Install -AcceptAll -IgnoreRebootTroubleshooting
RDP connects but shows a black screen
The VNC console is most likely still attached and holding the display. Close the Console tab in your browser, then reconnect via RDP.
"This user account's password must be changed before signing in"
Windows requires a password change on first interactive logon when the template was sysprepped with ProtectYourPC=3. Log in once, set a new password, then RDP again.
Cloudbase-Init didn't run / hostname is wrong
Check the Cloudbase-Init log:
Get-Content "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\cloudbase-init.log" -Tail 100Typical causes: the config-drive was not attached at boot, or the instance was created from a manual clone instead of the Console. Re-running Cloudbase-Init requires booting from a re-sysprepped state.
Disk did not expand to full plan size
The ExtendVolumesPlugin expands C: on first boot. If the C: partition is still at 32 GB on a 60 GB plan:
# Check the current partition layout
Get-Partition -DiskNumber 0
# Resize C: to the maximum size
$max = (Get-PartitionSupportedSize -DriveLetter C).SizeMax
Resize-Partition -DriveLetter C -Size $maxWindows Update is stuck or very slow
On small instances (1 vCPU / 2 GB RAM), cumulative updates can take up to an hour. If it appears frozen for more than 2 hours:
# Reset Windows Update components
Stop-Service wuauserv, cryptSvc, bits, msiserver
Remove-Item "$env:WinDir\SoftwareDistribution" -Recurse -Force
Remove-Item "$env:WinDir\System32\catroot2" -Recurse -Force
Start-Service wuauserv, cryptSvc, bits, msiserverLicensing
Windows Server licensing is included in the hourly/monthly price of the instance. The template activates automatically via KMS once the instance has internet access. If activation fails:
slmgr /ato
slmgr /xpr # show activation statusIf activation still fails after a retry, open a support ticket.
Next Steps
- Review Images & Templates for the full image library.
- Harden RDP by restricting Networking firewall rules to your office IP.
- Configure Cloud-Init user-data to run PowerShell on first boot.
- Learn how to manage instance Snapshots & Backups.