
Forge Minecraft server with extensive mod support and optional built-in voice chat. Forge is the original Minecraft modding platform, providing compatibility with thousands of community-created mods. Supports automatic version resolution, Aikar's flags, and Simple Voice Chat integration. Runs in Docker for isolated resource management.
Here's what you need to run a Minecraft - Forge dedicated server.
Small server, 1-10 players
Community server, 10-40 players
Large server, 40-200 players
Start hosting from your own computer
Run a Minecraft - Forge server on your desktop, laptop, VPS, or dedicated machine — GameCP automates Docker setup, resource allocation, and Minecraft - Forge 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 - Forge 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 - Forge 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 GAMEMODE="survival" export DIFFICULTY="easy" export LEVEL_NAME="world" export PVP="true" export SPAWN_MONSTERS="true" export WHITE_LIST="false" export ALLOW_FLIGHT="true" export SPAWN_PROTECTION="16" export HARDCORE="false" export FORCE_GAMEMODE="false" export ALLOW_NETHER="true" export LEVEL_TYPE="minecraft:normal" export GENERATE_STRUCTURES="true" export ONLINE_MODE="true" export ENFORCE_WHITELIST="false" export ENFORCE_SECURE_PROFILE="true" export ENABLE_RCON="false" export ENABLE_QUERY="true" export ENABLE_STATUS="true" export ENABLE_COMMAND_BLOCK="false" export VIEW_DISTANCE="10" export SIMULATION_DISTANCE="10" export MAX_TICK_TIME="60000" export NETWORK_COMPRESSION_THRESHOLD="256" export VOICE_CHAT_ENABLED="true" export VOICE_MAX_DISTANCE="48" export VOICE_WHISPER_DISTANCE="24" export VOICE_ENABLE_GROUPS="true" # Pull the container image docker pull eclipse-temurin:21-jdk-alpine
Minecraft - Forge 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; }
# Accept EULA
echo "Accepting EULA..."
echo "eula=true" > eula.txt
# Resolve Minecraft version
MC_VERSION="${MINECRAFT_VERSION:-latest}"
FORGE_PROMOS="https://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json"
if [ "$MC_VERSION" = "latest" ]; then
echo "Fetching latest recommended Forge version..."
JSON_DATA=$(curl -sSL "$FORGE_PROMOS")
MC_VERSION=$(echo "$JSON_DATA" | jq -r '.promos | to_entries[] | .key | select(contains("recommended")) | split("-")[0]' | sort -t. -k1,1n -k2,2n -k3,3n | tail -1)
if [ -z "$MC_VERSION" ]; then
MC_VERSION=$(echo "$JSON_DATA" | jq -r '.promos | to_entries[] | .key | select(contains("latest")) | split("-")[0]' | sort -t. -k1,1n -k2,2n -k3,3n | tail -1)
fi
echo "Latest Forge MC version: $MC_VERSION"
else
echo "Using specified version: $MC_VERSION"
fi
# Get Forge version for this MC version
echo "Resolving Forge version for MC $MC_VERSION..."
JSON_DATA=$(curl -sSL "$FORGE_PROMOS")
# Try recommended first, then latest
FORGE_VER=$(echo "$JSON_DATA" | jq -r --arg V "$MC_VERSION" '.promos["\($V)-recommended"] // empty')
if [ -z "$FORGE_VER" ]; then
FORGE_VER=$(echo "$JSON_DATA" | jq -r --arg V "$MC_VERSION" '.promos["\($V)-latest"] // empty')
fi
if [ -z "$FORGE_VER" ]; then
echo "ERROR: No Forge version found for MC $MC_VERSION!"
exit 1
fi
FULL_VERSION="$MC_VERSION-$FORGE_VER"
echo "Using Forge version: $FULL_VERSION"
# Download Forge installer
FORGE_URL="https://maven.minecraftforge.net/net/minecraftforge/forge/$FULL_VERSION/forge-$FULL_VERSION-installer.jar"
echo "Downloading Forge installer..."
wget -q "$FORGE_URL" -O installer.jar
if [ ! -f installer.jar ]; then
echo "ERROR: Failed to download Forge installer!"
exit 1
fi
# Clean previous install for upgrade/downgrade support
rm -rf libraries/net/minecraftforge/forge
rm -f unix_args.txt
# Run the installer
echo "Running Forge installer..."
java -jar installer.jar --installServer || { echo "Forge install failed!"; exit 1; }
# Handle JAR naming based on MC version
# Only rename for pre-1.17 Forge which ships a standalone jar.
# Modern Forge (1.17+) creates a shim jar that unix_args.txt references by name - don't touch it.
ARGS_FILE=$(ls libraries/net/minecraftforge/forge/*/unix_args.txt 2>/dev/null | head -1)
if [ -z "$ARGS_FILE" ]; then
FORGE_JAR=$(ls forge-*.jar 2>/dev/null | head -1)
if [ -n "$FORGE_JAR" ] && [ "$FORGE_JAR" != "installer.jar" ]; then
mv "$FORGE_JAR" server.jar
echo "Renamed $FORGE_JAR to server.jar (pre-1.17 Forge)"
fi
fi
# Set up unix_args.txt for 1.17+ (copy instead of symlink for Docker volume compatibility)
if [ -n "$ARGS_FILE" ]; then
cp "$ARGS_FILE" unix_args.txt
echo "Copied unix_args.txt from $ARGS_FILE"
fi
# Cleanup
rm -f installer.jar
rm -f run.bat run.sh installer.jar.log
echo "Forge server installed successfully."
# Install Simple Voice Chat mod if enabled
VOICE_ENABLED="${VOICE_CHAT_ENABLED:-false}"
if [ "$VOICE_ENABLED" = "true" ] || [ "$VOICE_ENABLED" = "1" ]; then
echo "Voice Chat enabled. Installing Simple Voice Chat mod..."
mkdir -p mods
MODRINTH_API="https://api.modrinth.com/v2/project/simple-voice-chat/version?loaders=%5B%22forge%22%5D&game_versions=%5B%22$MC_VERSION%22%5D"
VOICE_URL=$(curl -sSL "$MODRINTH_API" | jq -r '.[0].files[0].url // empty')
if [ -z "$VOICE_URL" ]; then
echo "No exact version match, trying latest Forge build..."
MODRINTH_API="https://api.modrinth.com/v2/project/simple-voice-chat/version?loaders=%5B%22forge%22%5D"
VOICE_URL=$(curl -sSL "$MODRINTH_API" | jq -r '.[0].files[0].url // empty')
fi
if [ -n "$VOICE_URL" ]; then
wget -q "$VOICE_URL" -O mods/voicechat.jar
echo "Simple Voice Chat mod installed."
else
echo "WARNING: Could not find Simple Voice Chat for Forge. Skipping."
fi
else
echo "Voice Chat disabled. Skipping mod install."
fi
echo "Install Completed"Minecraft - Forge requires 4 ports to be open for game traffic and queries.
sudo ufw allow 25565/tcp sudo ufw allow 25575/tcp sudo ufw allow 25566/both sudo ufw allow 24454/udp
Start the Minecraft - Forge server using the configuration from Step 1.
docker run -d \ --name minecraft-java-forge-server \ -p 25565:25565/tcp \ -p 25575:25575/tcp \ -p 25566:25566/both \ -p 24454:24454/udp \ -e GAMEMODE="survival" \ -e DIFFICULTY="easy" \ -e LEVEL_NAME="world" \ -e PVP="true" \ -e SPAWN_MONSTERS="true" \ -e WHITE_LIST="false" \ -e ALLOW_FLIGHT="true" \ -e SPAWN_PROTECTION="16" \ -e HARDCORE="false" \ -e FORCE_GAMEMODE="false" \ -e ALLOW_NETHER="true" \ -e LEVEL_TYPE="minecraft:normal" \ -e GENERATE_STRUCTURES="true" \ -e ONLINE_MODE="true" \ -e ENFORCE_WHITELIST="false" \ -e ENFORCE_SECURE_PROFILE="true" \ -e ENABLE_RCON="false" \ -e ENABLE_QUERY="true" \ -e ENABLE_STATUS="true" \ -e ENABLE_COMMAND_BLOCK="false" \ -e VIEW_DISTANCE="10" \ -e SIMULATION_DISTANCE="10" \ -e MAX_TICK_TIME="60000" \ -e NETWORK_COMPRESSION_THRESHOLD="256" \ -e VOICE_CHAT_ENABLED="true" \ -e VOICE_MAX_DISTANCE="48" \ -e VOICE_WHISPER_DISTANCE="24" \ -e VOICE_ENABLE_GROUPS="true" \ -v /opt/gameserver:/opt/gameserver \ -w /opt/gameserver \ eclipse-temurin:21-jdk-alpine \ -Xmx -Xms -Dterminal.jline=false -Dterminal.ansi=true @unix_args.txt
Alternative startup profiles:
GameCP lets you switch between these profiles with one click.
GameCP automates every step above: Docker, port forwarding, startup, and config. Install on your own PC and deploy a Minecraft - Forge 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