Introduction
Migrating a Minecraft server is simpler than migrating a FiveM server: everything is in one folder, and almost all configurations are text files (.yml, .properties, .json). This guide covers the following cases:
- Migration from another host via FTP/SFTP
- Migration from a self-hosted VPS
- Migration to the VeryCloud Wisp panel (
panel.verycloud.fr) - Migration to an independent Linux VPS
Prerequisites
- SFTP access to source server
- Access to destination server (Wisp panel or VPS root SSH)
- Java 17+ installed on destination (for Minecraft 1.18+) or Java 21 (for 1.21+)
- Knowledge of the exact Minecraft version of source server
Step 1: Identify version and specifics
On the source server, note:
- Server type: Vanilla, Paper, Spigot, Bukkit, Forge, Fabric, Velocity, BungeeCord
- Minecraft version: 1.20.4, 1.21.1, etc.
- Installed plugins/mods: full list
- Folder size:
du -sh .(the world is usually 70% of the total)
This info determines the Java version and .jar to use on the destination.
Step 2: Prepare the destination server
Option A: On Wisp (VeryCloud panel)
On https://panel.verycloud.fr, order or use an existing Minecraft server. Wisp pre-configures Paper / Forge / Fabric based on your needs.
Option B: On a Linux VPS
# Install Java 21
sudo apt update
sudo apt install -y openjdk-21-jre-headless screen
# Check
java -version
# Create the minecraft user
sudo useradd -m -s /bin/bash minecraft
sudo passwd minecraft
sudo su - minecraft
# Prepare the folder
mkdir -p ~/server && cd ~/server
Download the right .jar:
# Paper 1.21
wget -O server.jar "https://api.papermc.io/v2/projects/paper/versions/1.21.1/builds/132/downloads/paper-1.21.1-132.jar"
Launch once to generate files:
java -Xms2G -Xmx4G -jar server.jar nogui
Accept the EULA:
echo "eula=true" > eula.txt
Step 3: Stop the source server
Crucial: completely stop the source server before transferring the world. Otherwise, the level.dat file is locked and the backup will be corrupted.
# In the source server console
stop
Step 4: Transfer files
Method 1: Direct SCP (if VPS → VPS)
From your local machine or directly between servers:
# On source server
cd /path/to/server
tar -czf minecraft-backup.tar.gz \
--exclude='logs' \
--exclude='cache' \
--exclude='crash-reports' \
world/ world_nether/ world_the_end/ \
plugins/ config/ \
server.properties bukkit.yml spigot.yml paper-global.yml \
ops.json banned-players.json banned-ips.json whitelist.json
Transfer:
scp minecraft-backup.tar.gz root@DEST_IP:/tmp/
Method 2: SFTP (most universal)
Use FileZilla or WinSCP:
- Source: connect to the old host's SFTP
- Destination: connect to Wisp SFTP (panel.verycloud.fr → Server → SFTP Details) or to VPS
Download everything locally, then re-upload. Slower but works everywhere.
Method 3: rsync (fastest for large volumes)
rsync -avz --progress \
--exclude='logs' --exclude='cache' \
root@SOURCE_SERVER:/path/server/ \
/home/minecraft/server/
Step 5: Extract and restore
On destination:
cd ~/server
tar -xzf /tmp/minecraft-backup.tar.gz
chown -R minecraft:minecraft .
Step 6: Adapt the configuration
server.properties
nano ~/server/server.properties
Check:
server-ip=
server-port=25565
max-players=20
view-distance=10
motd=Welcome to \u00a7b\u00a76VeryCloud
Leave server-ip= empty (the VPS IP will be used).
LuckPerms permissions (or other)
If you use LuckPerms, your data is in MySQL or SQLite. If SQLite, the file luckperms-h2-v2.mv.db should have been transferred. If MySQL, export the database and import it:
# On source
mysqldump -u user -p luckperms_db > luckperms.sql
# On destination
mysql -u user -p luckperms_db < luckperms.sql
Then adapt the connection string in plugins/LuckPerms/config.yml.
EssentialsX, EconomyAPI, etc.
Most plugins store their data in plugins/PluginName/. Verify these folders have been copied.
Step 7: Adapt the launch script
Create a startup script with the right JVM options:
nano ~/server/start.sh
#!/bin/bash
cd "$(dirname "$0")"
java -Xms4G -Xmx8G \
-XX:+UseG1GC \
-XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=30 \
-XX:G1MaxNewSizePercent=40 \
-XX:G1HeapRegionSize=8M \
-XX:G1ReservePercent=20 \
-XX:G1HeapWastePercent=5 \
-XX:G1MixedGCCountTarget=4 \
-XX:InitiatingHeapOccupancyPercent=15 \
-XX:G1MixedGCLiveThresholdPercent=90 \
-XX:G1RSetUpdatingPauseTimePercent=5 \
-XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem \
-XX:MaxTenuringThreshold=1 \
-Dusing.aikars.flags=https://mcflags.emc.gs \
-Daikars.new.flags=true \
-jar server.jar nogui
These JVM flags ("Aikar's flags") are known to drastically optimize Minecraft servers.
chmod +x start.sh
Step 8: First startup
cd ~/server
./start.sh
Watch the console: all plugins should start with Enabled. Worlds should load without errors.
Connect with your Minecraft client: DEST_IP:25565.
Check:
- Your character finds its position, inventory, hotbar
- Filled chests are intact
- Admin / OP permissions work
- Plugins respond (
/help,/plot info,/money, etc.)
Step 9: Configure systemd service (on VPS)
sudo nano /etc/systemd/system/minecraft.service
[Unit]
Description=Minecraft Server
After=network.target
[Service]
Type=forking
User=minecraft
WorkingDirectory=/home/minecraft/server
ExecStart=/usr/bin/screen -dmS minecraft /home/minecraft/server/start.sh
ExecStop=/usr/bin/screen -S minecraft -X stuff "say Stopping in 10 seconds...^Mstop^M"
TimeoutStopSec=30
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
Access the live console:
sudo -u minecraft screen -r minecraft
Step 10: Update DNS
If you have a domain like play.your-server.com, update the record:
A play.your-server.com → VERYCLOUD_VPS_IP
To use a non-standard port without forcing it on players, create an SRV record:
SRV _minecraft._tcp.play.your-server.com → 0 5 25565 play.your-server.com
Troubleshooting
"Outdated server"
The .jar version doesn't match your client. Download the exact version of your source server.
Plugins don't start
[ERROR] Could not load 'plugins/PluginX.jar'
Classic cause: plugin version not compatible with Paper/Spigot 1.21. Download the latest version on SpigotMC / Modrinth.
Corrupted worlds
If you transferred the world while server was running, it may be corrupted. Backup and use MCAselector to repair damaged chunks.
Significant lag
Check allocated RAM (-Xmx). Modern Minecraft likes at least 4 GB. For 20 players: 6-8 GB.
Inspect ticks:
# In console
/tps
20.0 = optimal. Below 18 = noticeable lag.
Useful commands
# Live console (VPS)
sudo -u minecraft screen -r minecraft
# Exit without killing: Ctrl+A then D
# Live logs
tail -f ~/server/logs/latest.log
# Quick backup
tar -czf backup-$(date +%F).tar.gz ~/server/world ~/server/world_nether ~/server/world_the_end
# Disk space used
du -sh ~/server/*
# List plugins
ls ~/server/plugins/*.jar
Conclusion
Your Minecraft server is migrated without loss. Going further:
- Configure daily automatic backups (cron + tar)
- Install an anti-cheat (Vulcan, Matrix) if the server is public
- If you manage multiple servers (lobby, survival, creative), switch to a Velocity/BungeeCord proxy
VeryCloud offers a free migration service on Minecraft Wisp and Gaming VPS plans: open a ticket and we'll handle it.
Resources
- Aikar's flags explained: https://docs.papermc.io/paper/aikars-flags
- PaperMC: https://papermc.io
- Wisp Panel: https://panel.verycloud.fr
- World validation tool: https://github.com/Querz/mcaselector

















