
Velocity is a high-performance Minecraft proxy server designed to connect multiple backend servers into a seamless network. Known for its modern architecture, strong security features, and excellent scalability. Supports modern player forwarding, plugin API, and automatic version resolution via the PaperMC API.
Here's what you need to run a Minecraft - Velocity dedicated server.
Small proxy, 1-100 players
Large proxy, 100-1000 players
Start hosting from your own computer
Run a Minecraft - Velocity server on your desktop, laptop, VPS, or dedicated machine ā GameCP automates Docker setup, resource allocation, and Minecraft - Velocity configuration instantly. Automatic port forwarding means your friends can connect without touching your router. Start local, scale to a VPS when you're ready.
Skip the manual installation, port forwarding, and configuration. Install on your own computer and start hosting instantly.
The full manual process to host a Minecraft - Velocity dedicated server on a VPS. Or install GameCP on your own computer and skip all of this.
Set your server settings, then install Docker, and pull the Minecraft - Velocity container image.
# Update system and install Docker
sudo apt update && sudo apt install -y docker.io
sudo systemctl enable --now docker
# Create game server directory
sudo mkdir -p /opt/gameserver
# Server configuration
export MOTD="${SERVER_NAME}"
export PLAYER_INFO_FORWARDING="modern"
export ONLINE_MODE="true"
export FORCE_KEY_AUTH="true"
export PREVENT_PROXY_CONNECTIONS="false"
export ANNOUNCE_FORGE="false"
export KICK_EXISTING_PLAYERS="false"
export PING_PASSTHROUGH="DISABLED"
export COMPRESSION_THRESHOLD="256"
export COMPRESSION_LEVEL="-1"
export LOGIN_RATELIMIT="3000"
export CONNECTION_TIMEOUT="5000"
export READ_TIMEOUT="30000"
export HAPROXY_PROTOCOL="false"
export TCP_FAST_OPEN="false"
export BUNGEE_PLUGIN_CHANNEL="true"
export ANNOUNCE_PROXY_COMMANDS="true"
export FAILOVER_ON_DISCONNECT="true"
export SHOW_PING_REQUESTS="false"
export LOG_COMMAND_EXECUTIONS="false"
export LOG_PLAYER_CONNECTIONS="true"
export ENABLE_PLAYER_ADDRESS_LOGGING="true"
export QUERY_ENABLED="false"
export QUERY_PORT="25565"
export QUERY_MAP="Velocity"
export QUERY_SHOW_PLUGINS="false"
# Pull the container image
docker pull eclipse-temurin:21-jre-alpineMinecraft - Velocity uses a custom install script to download and configure the server files.
#!/bin/bash
apt update
apt install -y wget curl jq
cd /opt/gameserver || { echo "Failed to change directory to /opt/gameserver"; exit 1; }
# Resolve Velocity version
VEL_VERSION="${VELOCITY_VERSION:-latest}"
VELOCITY_API="https://api.papermc.io/v2/projects/velocity"
if [ "$VEL_VERSION" = "latest" ]; then
echo "Fetching latest Velocity version..."
VEL_VERSION=$(curl -sSL "$VELOCITY_API" | jq -r '.versions[-1]')
echo "Latest Velocity version: $VEL_VERSION"
else
echo "Using specified version: $VEL_VERSION"
fi
# Verify version exists
VER_CHECK=$(curl -sSL "$VELOCITY_API" | jq -r --arg V "$VEL_VERSION" '.versions[] | select(. == $V)')
if [ -z "$VER_CHECK" ]; then
echo "WARNING: Version $VEL_VERSION not found. Falling back to latest..."
VEL_VERSION=$(curl -sSL "$VELOCITY_API" | jq -r '.versions[-1]')
fi
# Get latest build
echo "Fetching latest Velocity build for $VEL_VERSION..."
BUILD_INFO=$(curl -sSL "$VELOCITY_API/versions/$VEL_VERSION/builds")
LATEST_BUILD=$(echo "$BUILD_INFO" | jq -r '.builds[-1].build')
JAR_NAME=$(echo "$BUILD_INFO" | jq -r '.builds[-1].downloads.application.name')
if [ -z "$LATEST_BUILD" ] || [ "$LATEST_BUILD" = "null" ]; then
echo "ERROR: Could not determine latest build for Velocity $VEL_VERSION!"
exit 1
fi
DOWNLOAD_URL="$VELOCITY_API/versions/$VEL_VERSION/builds/$LATEST_BUILD/downloads/$JAR_NAME"
echo "Downloading Velocity $VEL_VERSION build $LATEST_BUILD..."
wget -q "$DOWNLOAD_URL" -O velocity.jar
echo "Velocity download completed."
# Generate forwarding secret if it doesn't exist
if [ ! -f forwarding.secret ]; then
echo "Generating forwarding secret..."
date +%s | sha256sum | base64 | head -c 24 > forwarding.secret
echo "Forwarding secret created."
else
echo "Forwarding secret already exists, keeping it."
fi
echo "Install Completed"Minecraft - Velocity requires 1 port to be open for game traffic and queries.
sudo ufw allow 25565/tcp
Start the Minecraft - Velocity server using the configuration from Step 1.
docker run -d \
--name minecraft-java-velocity-server \
-p 25565:25565/tcp \
-e MOTD="${SERVER_NAME}" \
-e PLAYER_INFO_FORWARDING="modern" \
-e ONLINE_MODE="true" \
-e FORCE_KEY_AUTH="true" \
-e PREVENT_PROXY_CONNECTIONS="false" \
-e ANNOUNCE_FORGE="false" \
-e KICK_EXISTING_PLAYERS="false" \
-e PING_PASSTHROUGH="DISABLED" \
-e COMPRESSION_THRESHOLD="256" \
-e COMPRESSION_LEVEL="-1" \
-e LOGIN_RATELIMIT="3000" \
-e CONNECTION_TIMEOUT="5000" \
-e READ_TIMEOUT="30000" \
-e HAPROXY_PROTOCOL="false" \
-e TCP_FAST_OPEN="false" \
-e BUNGEE_PLUGIN_CHANNEL="true" \
-e ANNOUNCE_PROXY_COMMANDS="true" \
-e FAILOVER_ON_DISCONNECT="true" \
-e SHOW_PING_REQUESTS="false" \
-e LOG_COMMAND_EXECUTIONS="false" \
-e LOG_PLAYER_CONNECTIONS="true" \
-e ENABLE_PLAYER_ADDRESS_LOGGING="true" \
-e QUERY_ENABLED="false" \
-e QUERY_PORT="25565" \
-e QUERY_MAP="Velocity" \
-e QUERY_SHOW_PLUGINS="false" \
-v /opt/gameserver:/opt/gameserver \
-w /opt/gameserver \
eclipse-temurin:21-jre-alpine \
java -Xmx -Xms -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+UnlockExperimentalVMOptions -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -XX:MaxInlineLevel=15 -jar velocity.jarGameCP automates every step above: Docker, port forwarding, startup, and config. Install on your own PC and deploy a Minecraft - Velocity server in under 5 minutes.
Deploy with GameCPExplore step-by-step setup guides for other popular games supported by GameCP.
Install GameCP on your own computer and start hosting in minutes. Automatic port forwarding, zero config ā your friends connect instantly.
No credit card required Ā· Free tier available Ā· Install local, scale later