Ditch Game Hosts: How to Build Your Own Multi-Game Dedicated Server (Minecraft, Palworld, Rust) Using Pterodactyl & Cloudflare

Renting game servers from traditional game server providers (GSPs) is a massive money sink. They upcharge you for RAM, restrict your player slots, and lock your files behind heavily limited control panels. By setting up your own dedicated Linux server using Pterodactyl, you can host multiple heavy-hitting titles simultaneously with maximum performance.

⚠️ Crucial Reality Check Before We Begin Cloudflare's free tier proxy network only routes HTTP/HTTPS web traffic. It cannot natively proxy raw UDP/TCP game traffic (like Minecraft, Rust, or Palworld) unless you are paying thousands for their Enterprise "Cloudflare Spectrum" plan. In this tutorial, we will use Cloudflare Tunnels to securely encrypt and route traffic to your Pterodactyl Web Interface. For player connections to your games, we will use Cloudflare's fast, unproxied (DNS-only) records paired with your dedicated server host’s native hardware DDoS protection.

🛠️ Prerequisites & Hardware Requirements

To run a multi-game server hosting Minecraft, Palworld, and Rust all at once, your hardware needs serious backbone:

  • OS: A fresh installation of Ubuntu 24.04 LTS or Debian 12.
  • CPU: 4 to 8 Cores (High single-core clock speed is king for game servers).
  • RAM: Minimum 16GB (32GB+ highly recommended. Palworld and Rust are notorious RAM hogs).
  • Storage: 100GB+ NVMe SSD (Game maps and player data read/write constantly).
  • A Domain Name: (e.g., yourdomain.com) managed through a free Cloudflare account.
  • Pre-Flight DNS Setup: Before starting, go to your Cloudflare DNS dashboard and create an Unproxied (Grey Cloud) A-Record called node.yourdomain.com pointing to your server's Public IP. We will need this to generate an SSL certificate for your live server console later.

Step 1: Prepare the Server & Firewall

Log into your dedicated server via SSH as the root user. First, ensure your system packages are fully updated:

Bash
apt update && apt upgrade -y

Install the essential dependencies required for the installation scripts:

Bash
apt install sudo curl git ufw -y

Configure the System Firewall (UFW)

We need to open ports for the game traffic, Let's Encrypt SSL generation, and Pterodactyl's underlying systems. (Note: Docker automatically modifies iptables to expose game ports, but configuring UFW is good administrative practice to track your open ports).

Bash
# Allow standard SSH access (Change 22 if you use a custom SSH port)
ufw allow 22/tcp

# Allow HTTP/HTTPS for Let's Encrypt certificate generation & renewals
ufw allow 80/tcp
ufw allow 443/tcp

# Allow Pterodactyl Wings communication daemon & SFTP
ufw allow 8080/tcp
ufw allow 2022/tcp

# Minecraft Default Port
ufw allow 25565/tcp

# Palworld Default Ports
ufw allow 8211/udp
ufw allow 27015/udp

# Rust Default Ports
ufw allow 28015/udp
ufw allow 28016/tcp
ufw allow 28082/tcp

# Enable the firewall
ufw enable

Step 2: Automated Installation of Pterodactyl

While a manual installation requires setting up Nginx, PHP, Redis, and MySQL from scratch, the open-source community maintains a rock-solid script that completely automates this deployment.

Run the universal Pterodactyl installer script:

Bash
bash <(curl -s https://pterodactyl-installer.se)

Part A: Installing the Panel

  1. Type 0 to install both the Panel and Wings.
  2. Set up your database credentials (hitting Enter to accept defaults is safe).
  3. Select your local timezone.
  4. Input your administrative email address and desired username/password.
  5. For the Fully Qualified Domain Name (FQDN), enter panel.yourdomain.com.
  6. Select N for automatic firewall configuration (we did this manually).
  7. Select N when asked to configure Let's Encrypt HTTPS for the Panel (our Cloudflare Tunnel will handle this).

Part B: Installing Wings (Crucial for Live Console)

  1. Choose Y to configure Docker and install Wings.
  2. When asked if you want to configure Let's Encrypt for Wings, select Y.
  3. Enter the node.yourdomain.com subdomain you prepared earlier. This provides the daemon with an SSL certificate, preventing browsers from blocking the live game terminal via "Mixed Content" security rules.
  4. Let the script finish downloading its core packages.

Step 3: Secure the Web Panel with Cloudflare Tunnels

A Cloudflare Tunnel connects your server directly to Cloudflare’s edge network via an outbound daemon. While we keep standard web ports open for Let's Encrypt to authenticate your Node, the tunnel will handle the heavy lifting of proxying, encrypting, and routing traffic to your web panel safely.

1. Install the Cloudflare Daemon (cloudflared)

Bash
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb

2. Authenticate the Tunnel

Bash
cloudflared tunnel login

Copy the URL printed in the console into your browser, log into Cloudflare, and authorize your domain.

3. Create Your Tunnel

Bash
cloudflared tunnel create ptero-panel

Copy the long Tunnel ID string generated in the output.

4. Route Traffic and Configure (System-Wide)

Create the configuration directory in /etc so the background service can locate it upon reboot:

Bash
mkdir -p /etc/cloudflared
nano /etc/cloudflared/config.yml

Paste the following structure (replacing placeholders with your real details):

YAML
tunnel: YOUR_TUNNEL_ID_STRING
credentials-file: /root/.cloudflared/YOUR_TUNNEL_ID_STRING.json
ingress:
  - hostname: panel.yourdomain.com
    service: http://localhost:80
  - service: http_status:404

Map the tunnel natively inside your Cloudflare DNS dashboard using the command line:

Bash
cloudflared tunnel route dns ptero-panel panel.yourdomain.com

5. Run as a System Service

Bash
cloudflared service install
systemctl enable --now cloudflared

If you navigate to panel.yourdomain.com in a web browser, your panel will pull up, completely secured with an automated Cloudflare SSL certificate. Log in.

Step 4: Link Your Node to the Panel

Before you can build game servers, you need to link your physical hardware (the Node) to the Panel interface.

1. Create a Location

  • Click the Admin Control Icon (gear symbol, top right).
  • Click LocationsCreate New.
  • Short Code: Dedicated-1 → Click Create.

2. Create the Node

  • Click NodesCreate New.
  • Name: Primary-Node
  • FQDN: node.yourdomain.com (Do not use the raw IP here, or the console web-socket will fail).
  • Communicate Over SSL: Explicitly select Use SSL Connection.
  • Behind Proxy: Select Not Behind a Proxy.
  • Memory / Disk Space: Input your server’s total capacity (e.g., 32768 for 32GB RAM).
  • Click Create Node.

3. Start Wings

Click the Configuration tab inside the node settings. Copy the block of text displayed inside the black box. Back in your server's SSH terminal, open the config file:

Bash
mkdir -p /etc/pterodactyl
nano /etc/pterodactyl/config.yml

Paste the block, save, and exit (Ctrl+O, Enter, Ctrl+X). Start the Wings process:

Bash
systemctl enable --now wings

The heart icon next to your node name inside the web panel will instantly turn green.

Step 5: Deploying Your Game Servers

You must allocate specific network ports to your Node inside the panel admin dashboard first. Go to Nodes → Click your node → Allocation Tab. Enter your server's Public IP and input ports (e.g., 25565, 8211, 27015, 28015). Click Submit.

Now click Servers on the left sidebar → Create New.

🎮 Game 1: Minecraft

  • Core Configuration: Name your server, and assign a target user.
  • Allocation: Select your Public IP and map port 25565.
  • Nest & Egg Options: Select the Minecraft Nest and the Paper (or Vanilla) Egg.
  • Variables: Set your preferred maximum RAM capacity (e.g., 6144 for 6GB).

🎮 Game 2: Palworld

  • Allocation: Select your Public IP and map port 8211 (UDP).
  • Nest & Egg Options: Select the Steam Games Nest → Palworld Egg.
  • Variables: Palworld servers notoriously eat RAM. Ensure you allocate at least 8GB to 12GB of RAM specifically to this container to prevent daily out-of-memory server crashes.

🎮 Game 3: Rust

  • Allocation: Select your Public IP and map port 28015 (UDP) as the main port, along with 28016 (TCP) for RCON management.
  • Nest & Egg Options: Select Steam Games Nest → Rust Egg.
  • Build Configuration: Rust requires heavy CPU usage. You can adjust the CPU limit block if you want to pin it to specific hardware threads.

Step 6: Directing Players Using Cloudflare DNS

To make sure your friends don't have to connect using a raw, messy IP address, configure standard DNS routing inside your Cloudflare Dashboard.

Go to Cloudflare → DNSRecords. Add the following Unproxied entries:

Type Name Content / Value Proxy Status Purpose
A mc YOUR_SERVER_PUBLIC_IP 🔘 DNS Only (Grey Cloud) Players join via mc.yourdomain.com
A rust YOUR_SERVER_PUBLIC_IP 🔘 DNS Only (Grey Cloud) Players join via rust.yourdomain.com:28015
A pal YOUR_SERVER_PUBLIC_IP 🔘 DNS Only (Grey Cloud) Players join via pal.yourdomain.com:8211

Your game server deployment is now fully operational. Your administrative control interface is safely routed behind an encrypted Cloudflare Tunnel, your live server consoles will stream perfectly over secure WebSockets, and your games are running with raw bare-metal hardware speed!

🚀 Need the Ultimate Foundation for Your Multi-Game Setup?

Running heavy-hitting instances of Rust, Palworld, and Minecraft simultaneously requires more than just standard cloud vCPUs—it demands high-frequency, bare-metal hardware that won't choke under player stress.

If you want absolute control over your hosting infrastructure without the massive GSP upcharges, pair this tutorial with enterprise-grade bare metal. Visit the Fit Servers Dedicated Servers Page to find top-tier, low-latency infrastructure optimized for handling demanding Docker workloads.

Configure your Dedicated Server today!