Skip to content
Deployments

Set up a Minecraft server

Deployment · Updated Jun 2026

Coming from another cloud?

▸AWS·EC2 Instances

EC2 Instanceshigh

  • 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.
AWS docs ↗
▸Azure·Virtual Machines

Virtual Machineshigh

  • 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.
Azure docs ↗
▸DigitalOcean·Droplets

Dropletshigh

  • 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.
DigitalOcean docs ↗
▸Google Cloud·VM instances

VM instanceshigh

  • 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.
Google Cloud docs ↗
▸Hetzner·Cloud Servers

Cloud Servershigh

  • 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).
Hetzner docs ↗

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.

Starting template$28.00/mo

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

$33.00/mo

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

$33.00

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).

$-5.00

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 more
$0.00

Private 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.

$0.00

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.

$0.00

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.

  1. From the Cloud console, select Networks > Security Groups.
  2. Select Create Security Group. In this example, you'll create a security group named SSHMinecraft.

Create security group

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#

Create rules

  1. Select Create Rule from the SSHMinecraft security group.
  2. Fill in the following fields:
  • Protocol: SSH
  • Direction: Ingress
  • Ether Type: IPv4
  • Source: All Traffic

Step 2.2 Add 1st Minecraft port#

Create rules

  1. Select Create Rule from the SSHMinecraft security group.
  2. 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#

Create rules

  1. Select Create Rule from the SSHMinecraft security group.
  2. 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.

  1. Select Compute > Instances > Create Instance.
  2. In the Base Config tab, fill in the following fields:
    • Name: my-server
    • Availability Zone: select the zone closest to your location
  3. For Specification, select the Shared Resources tab, then select s1a.micro for 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.

Create VM: Base Config tab with flavor selection

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

Create VM: image selection

  1. Select PublicEphemeral from the Public Networks tab. This option attaches your VM instance to a network that is accessible to the internet.

Create VM: Network Config tab

  1. Select the security group you previously created (SSHMinecraft) to attach to the VM instance.
  2. 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.

Create VM: System Config tab with keypair selection

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

Create VM

  1. Wait a few seconds until your VM instance changes to the Active state, 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.

Active

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#

  1. Connect to the VM instance over SSH, then download the server archive. Replace YOUR_SERVER_IP with the VM instance IP address from the Fixed IP column on the Instances page.
bash
ssh ubuntu@YOUR_SERVER_IP

Set the version, then fetch the archive with curl. The default wget user agent returns 403 Forbidden, so pass a browser user agent:

bash
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:

bash
scp bedrock-server-1.21.73.01.zip ubuntu@YOUR_SERVER_IP:~/
  1. Install unzip, extract the server into /opt/minecraft, and create the service account that runs it:
bash
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
  1. Create the systemd service. Run the following command to write the unit definition to /etc/systemd/system/minecraft.service:
bash
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
  1. Reload systemd, then enable and start the service:
bash
sudo systemctl daemon-reload
sudo systemctl enable minecraft
sudo systemctl start minecraft
  1. Check the status of your server by running the following in the terminal.
bash
sudo systemctl status minecraft

Status

You'll see a message such as the one below, showing that the server is active.

bash
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:~$
  1. 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.
  2. Select Add Server.

Add server

  1. Find your server from the list and select Play.

Play

If you ever need to view your minecraft server logs, run the following command.

bash
sudo journalctl -u minecraft

Clean up#

Stop the service, delete the instance from Compute > Instances, and remove the security group when you no longer need the server:

bash
sudo systemctl stop minecraft
sudo systemctl disable minecraft

Quick answers

Was this page helpful?