Set up a Minecraft server
Coming from another cloud?
▸AWS·EC2 Instances
EC2 Instances
- Uses EC2 RunInstances API instead of Nova servers.create.
- Requires predefined instance type selection.
- Supports per-second On-Demand billing and Spot/Reserved options.
- Includes hibernation state not standard in OpenStack.
▸Azure·Virtual Machines
Virtual Machines
- Uses Azure Resource Manager (ARM) REST API at /providers/Microsoft.Compute/virtualMachines instead of OpenStack Nova API at /v2.1/servers.
- Tightly integrated with Azure services like Azure Active Directory for authentication, unlike OpenStack's Keystone.
- VM creation requires specifying size from predefined series with hardware-specific features (e.g., AMD/Intel/ARM), not custom flavor configs.
- Billed per second with complex pricing tiers based on series/reservation options, vs OpenStack's typically hourly or usage-based.
▸DigitalOcean·Droplets
Droplets
- API surface is DigitalOcean’s proprietary REST/CLI/Terraform tooling rather than OpenStack Nova/Neutron/Glance APIs (Droplets are managed via DigitalOcean UI/CLI/API/Terraform).
- Billing is usage-based with per-second billing (60-second minimum and monthly cap) rather than the typical per-hour, quota-based charge model users often see in OpenStack-based clouds.
- Droplets include a bundled outbound transfer allowance with each plan (starting at 500 GiB/month) rather than a separate bandwidth quota/metering model users often encounter in OpenStack deployments.
- Droplets are described as Linux-based VMs on virtualized hardware with local SSD storage, whereas OpenStack deployments commonly expose distinct block storage (Cinder) and image services (Glance) and may not bundle bandwidth/monitoring/firewalls into the instance offering.
▸Google Cloud·VM instances
VM instances
- Uses REST API 'instances.insert' instead of Nova 'servers.create' with different auth via service accounts vs Keystone.
- Supports bare metal instances (no hypervisor), not in standard OpenStack Nova.
- Network interfaces tied to VPC subnets; differs from Neutron ports/floating IPs.
▸Hetzner·Cloud Servers
Cloud Servers
- Servers provisioned individually via Hetzner API (hcloud), not OpenStack Nova flavors; fixed instance types like CX11 (1 vCPU, 2GB RAM, 20GB NVMe).
- No flavor customization; choose from predefined shared/dedicated vCPU series.
- Billing hourly with monthly cap per server (e.g., €3.29/mo cap for CX11), charged even when powered off until deleted, unlike typical OpenStack stop-to-pause billing.
- Custom REST API at api.hetzner.cloud/v1/servers instead of OpenStack Nova /v2.1/servers (different auth, payloads, response formats).
Set up a Minecraft server
Stand up a Minecraft Bedrock dedicated server on a Quake AI instance. You configure security groups for SSH and game ports, install the server binary, and run it as a systemd service reachable from the internet.
Monthly cost estimate
Pricing calculator ↗Sized as a custom package on shared vCPU.
Monthly total for the required template above. Use the configurator below to add optional pieces and see the total update.
What each resource is for
s1a.medium
s1a.medium · 4 shared vCPU, 4 GiB RAM, 0.5 Gbps
Compute shown per role at custom-package rates ($29/dedicated vCPU, $7.25/shared vCPU, $1/GiB RAM). The headline above is the billed total: the cheaper of a named plan and the custom package, plus add-ons.
Included in baseline
s1a.medium
4 shared vCPU, 4 GiB RAM, 0.5 Gbps
Compute + RAM rate basis
4 vCPU + 4 GiB RAM at $29/dedicated vCPU, $7.25/shared vCPU, $1/GiB RAM (regular). Totals apply the flat −$5/mo package promotion.
Package promotional discount
Flat −$5.00/mo on the custom package (same promotion as named plans).
Included at no charge
These line items are zero on Quake AI. Many other providers meter them separately.
Data transfer (inbound and outbound)
Unlimited data transfer on every plan; Quake AI does not meter per-GB egress.
AWS, GCP, and Azure meter outbound transfer per GB. DigitalOcean and Hetzner include an allowance on compute plans, then charge overage.
Learn morePrivate networking
Private networks, subnets, Neutron routers, and security groups are included with the plan.
VPC objects are usually free to create elsewhere, but NAT gateways bill hourly plus per-GB processed. Quake AI uses router SNAT with no separate NAT line item.
Control-plane API requests
OpenStack API calls for provisioning and management are included.
Some managed services on other clouds meter API calls or charge for premium control-plane features.
Pricing data last validated: . For current rates, check quake.ai/pricing.
Prerequisites#
- A Quake AI account with an active project
- An SSH key pair uploaded to your project (How to add an SSH key)
- An SSH client on your local machine
Windows users can use PuTTY or set up a Linux CLI environment.
Step 1: Create a security group#
Create a set of rules for a virtual firewall (called a security group) for data into and out of your network.
- From the Cloud console, select Networks > Security Groups.
- Select Create Security Group. In this example, you'll create a security group named
SSHMinecraft.

Step 2. Add rules to the security group#
Create and add the rules that allow data ingress and egress for the firewall.
From the Security Groups screen, you'll create rules to enable:
- SSH access to the VM instance
- access to ports on the VM instance for the Minecraft server
Step 2.1 Add SSH access#

- Select Create Rule from the
SSHMinecraftsecurity group. - Fill in the following fields:
- Protocol:
SSH - Direction:
Ingress - Ether Type:
IPv4 - Source:
All Traffic
Step 2.2 Add 1st Minecraft port#

- Select Create Rule from the
SSHMinecraftsecurity group. - Fill in the following fields:
- Protocol:
Custom UDP Rule - Direction:
Ingress - Ether Type:
IPv4 - Port Type:
Custom - Port:
19132 - Source:
All Traffic
Step 2.3 Add 2nd Minecraft port#

- Select Create Rule from the
SSHMinecraftsecurity group. - Fill in the following fields:
- Protocol:
Custom UDP Rule - Direction:
Ingress - Ether Type:
IPv4 - Port Type:
Custom - Port:
19133 - Source:
All Traffic
Step 3. Create VM instance#
Create a virtual machine (VM) instance.
- Select Compute > Instances > Create Instance.
- In the Base Config tab, fill in the following fields:
- Name:
my-server - Availability Zone: select the zone closest to your location
- Name:
- For Specification, select the Shared Resources tab, then select
s1a.microfor the flavor. This is the smallest flavor available and a good pick to get started. If you decide you need to increase the performance of the VM, you can always change it later.

- Select
Ubuntu 24.04for the operating system. Select Next: Network Config.

- Select
PublicEphemeralfrom the Public Networks tab. This option attaches your VM instance to a network that is accessible to the internet.

- Select the security group you previously created (
SSHMinecraft) to attach to the VM instance. - Select Next: System Config. For login type, select Keypair. For Keypair (the SSH keypair you'll use to access the VM instance), you can either add an existing SSH key or create a new one by selecting Create Keypair. See creating and using SSH keypairs for generating or importing keys before launch.

- Select Next: Confirm Config to review your VM instance creation. Select Confirm.

- Wait a few seconds until your VM instance changes to the
Activestate, and you see an IP address in the Fixed IP column. Note this IP: it is the address of your server in Minecraft and the address you SSH to for setup.

Step 4. Download the Minecraft server#
The Bedrock dedicated server ships as a .zip archive. This guide uses version 1.21.73.01. To find the current release, visit the Bedrock server download page and choose the Ubuntu server option. Downloading the server means you accept the Minecraft End User License Agreement.
You'll fetch the archive directly on the VM instance in Step 5, which avoids the browser download button. If you prefer to download through the browser, select Agree on the download page, then select Download to save the .zip archive to your local machine and transfer it in Step 5.
Step 5. Set up the Minecraft server on the VM instance#
- Connect to the VM instance over SSH, then download the server archive. Replace
YOUR_SERVER_IPwith the VM instance IP address from the Fixed IP column on the Instances page.
ssh ubuntu@YOUR_SERVER_IPSet the version, then fetch the archive with curl. The default wget user agent returns 403 Forbidden, so pass a browser user agent:
MINECRAFT_VERSION=1.21.73.01
curl --http1.1 -A 'Mozilla/5.0' -o ~/bedrock-server-${MINECRAFT_VERSION}.zip \
"https://www.minecraft.net/bedrockdedicatedserver/bin-linux/bedrock-server-${MINECRAFT_VERSION}.zip"If you downloaded the archive through the browser in Step 4, copy it from your local machine instead, then continue:
scp bedrock-server-1.21.73.01.zip ubuntu@YOUR_SERVER_IP:~/- Install
unzip, extract the server into/opt/minecraft, and create the service account that runs it:
sudo apt -y update
sudo apt -y upgrade
sudo apt -y install unzip
sudo mkdir -p /opt/minecraft
sudo useradd minecraft
sudo unzip ~/bedrock-server-*.zip -d /opt/minecraft
sudo chown -R minecraft:minecraft /opt/minecraft- Create the systemd service. Run the following command to write the unit definition to
/etc/systemd/system/minecraft.service:
sudo tee /etc/systemd/system/minecraft.service > /dev/null <<'EOF'
[Unit]
Description=MineCraft server
After=network.target
[Service]
ExecStart=/opt/minecraft/bedrock_server
Restart=always
User=minecraft
Environment=LD_LIBRARY_PATH=/opt/minecraft
WorkingDirectory=/opt/minecraft
[Install]
WantedBy=multi-user.target
EOF- Reload systemd, then enable and start the service:
sudo systemctl daemon-reload
sudo systemctl enable minecraft
sudo systemctl start minecraft- Check the status of your server by running the following in the terminal.
sudo systemctl status minecraft
You'll see a message such as the one below, showing that the server is active.
ubuntu@my-server:~$ sudo systemctl status minecraft
● minecraft.service - MineCraft server
Loaded: loaded (/etc/systemd/system/minecraft.service; enabled; preset: enabled)
Active: active (running) since Tue 2025-04-15 16:52:35 UTC; 3s ago
Main PID: 2599 (bedrock_server)
Tasks: 14 (limit: 1111)
Memory: 146.1M (peak: 146.4M)
CPU: 1.323s
CGroup: /system.slice/minecraft.service
└─2599 /opt/minecraft/bedrock_server
Apr 15 16:52:37 my-server bedrock_server[2599]: [2025-04-15 16:52:37:399 INFO] IPv4 supported, port: 19132: Used for gameplay and LAN discovery
Apr 15 16:52:37 my-server bedrock_server[2599]: [2025-04-15 16:52:37:400 INFO] IPv6 supported, port: 19133: Used for gameplay
Apr 15 16:52:37 my-server bedrock_server[2599]: [2025-04-15 16:52:37:428 INFO] Server started.
Apr 15 16:52:37 my-server bedrock_server[2599]: [2025-04-15 16:52:37:429 INFO] ================ TELEMETRY MESSAGE ===================
Apr 15 16:52:37 my-server bedrock_server[2599]: [2025-04-15 16:52:37:429 INFO] Server Telemetry is currently not enabled.
Apr 15 16:52:37 my-server bedrock_server[2599]: [2025-04-15 16:52:37:429 INFO] Enabling this telemetry helps us improve the game.
Apr 15 16:52:37 my-server bedrock_server[2599]: [2025-04-15 16:52:37:429 INFO]
Apr 15 16:52:37 my-server bedrock_server[2599]: [2025-04-15 16:52:37:429 INFO] To enable this feature, add the line 'emit-server-telemetry=true'
Apr 15 16:52:37 my-server bedrock_server[2599]: [2025-04-15 16:52:37:429 INFO] to the server.properties file in the handheld/src-server directory
Apr 15 16:52:37 my-server bedrock_server[2599]: [2025-04-15 16:52:37:429 INFO] ======================================================
ubuntu@my-server:~$- Connect to your Minecraft server and start playing. For example, from the iPhone Minecraft edition, select Play, then Servers > Add Server. Give your server a name and add the IP address of your VM instance running your Minecraft server. Leave the default port of
19132. - Select Add Server.

- Find your server from the list and select Play.

If you ever need to view your minecraft server logs, run the following command.
sudo journalctl -u minecraftClean up#
Stop the service, delete the instance from Compute > Instances, and remove the security group when you no longer need the server:
sudo systemctl stop minecraft
sudo systemctl disable minecraftQuick answers
- Why does `openstack image save` write a 0-byte file for my boot-from-volume instance?CLI
- Why does `openstack server create` fail with "Only volume-backed servers are allowed for flavors with zero disk"?CLIAPITerraform
- Why does my project still have a 10 GiB Cinder volume after I deleted my instance?CLIAPI