Paano mag-host ng Minecraft server sa VPS
Mag-setup ng Paper Minecraft sa Ubuntu 24.04 gamit ang Java 21 at systemd. Matutunan ang tamang RAM sizing, port 25565 configuration, at safe backup methods.
Ang iyong bubuuin
Isang Minecraft Java Edition server na laging online: Paper sa Ubuntu 24.04, tumatakbo bilang isang dedicated minecraft user sa ilalim ng systemd gamit ang Restart=on-failure, naka-whitelist, at bukas ang port 25565 sa parehong firewall sa pagitan ng mga player at ng JVM. Kasama rin dito ang paggawa ng backups sa paraang hindi masisira ang world na pinoprotektahan nito. Ang server ay binubuo lamang ng isang jar at isang java command; ang pagkakaiba ng server na matagal na magagamit ng iyong mga kaibigan sa isang server na mabilis na nag-crash ay nakadepende sa command na ito, at iyan ang tatalakayin sa guide na ito.
Dalawang babala bago ka gumastos. Una, malakas kumain ng memory ang Minecraft at karamihan ay single-threaded: ang 1 GB VPS ay hindi sapat para sa isang playable server, at mas mainam ang isang mabilis na core kaysa sa apat na mabagal na core. Pangalawa, ito ay para sa Java Edition. Ang mga Bedrock player — consoles, phones, at Windows Bedrock app — ay hindi makakasali sa isang Java server; kailangan ng Bedrock ng ibang server software sa UDP 19132, o kaya ay ang Geyser plugin, na hindi sakop ng tutorial na ito.
Kailangan mo ng bagong Ubuntu 24.04 KVM VPS na may root o sudo access, at humigit-kumulang tatlumpung minuto.
Sizing: ang kailangan talaga ng server para sa mga kaibigan
RAM ang pinakaimportanteng factor, at mas mababa ang totoong kailangan kaysa sa nakasaad sa mga modpack forum:
- 2 GB ay sapat para sa vanilla para sa 2–5 players na may katamtamang view distance. Playable ito, pero walang headroom.
- 4 GB ang ideal na laki para sa server ng mga kaibigan: kaya nito ang sampung concurrent players sa Paper na may ilang plugins, at may sapat pang natitira para sa OS.
- 8 GB pataas ay para sa mga modpack at 20-plus players. Dito, dapat mo na ring tingnan ang single-core CPU speed dahil ang main game loop ay tumatakbo sa isang thread lamang.
Lumalaki rin ang file size ng world sa disk habang nag-eexplore ang mga players — ang isang survival world na maraming pinuntahan ay umaabot ng ilang gigabytes — kaya maglaan ng headroom para sa world at sa mga backups nito.
Vanilla o Paper? Ang Paper ay drop-in replacement para sa official jar: pareho ang worlds, pareho ang clients, at hindi kailangan ng client-side mods. Ni-rewrite nito ang pinakamabagal na server paths — chunk loading, entity ticking, hoppers — at nagdadagdag ng plugin API. Ang tanging dahilan para gumamit ng vanilla ay kung kailangan mo ng bit-exact vanilla mechanics para sa mga technical redstone farms na maaaring mabago ng optimisations ng Paper; para sa lahat, mas maraming players per gigabyte ang Paper. Ang lahat ng nakasaad sa ibaba ay gumagana sa parehong server.
Step 1: i-install ang Java 21
Kailangan ng Minecraft 1.20.5 at lahat ng sumunod na release (lahat ng 1.21.x) ang Java 21. Kasama na ito sa default repos ng Ubuntu 24.04. Ang headless build ay hindi kasama ang mga desktop libraries na hindi naman gagamitin ng server:
sudo apt update && sudo apt install -y openjdk-21-jre-headless
java -versionTamang resulta: dapat openjdk version "21.0.x" ang unang linya. Kung 17 o 11 ang nakalagay, may ibang JRE na naka-install at ito ang ginagamit; ayusin ito gamit ang sudo update-alternatives --config java at piliin ang entry na may java-21.
Kapag nalaktawan ang check na ito, ito ang magiging sanhi ng pinakamadalas i-search na Minecraft server error. Kapag Java 17 ang gamit, agad na mag-eerror ang server jar na may:
Error: LinkageError occurred while loading main class net.minecraft.bundler.Main
java.lang.UnsupportedClassVersionError: net/minecraft/bundler/Main has been
compiled by a more recent version of the Java Runtime (class file version 65.0),
this version of the Java Runtime only recognizes class file versions up to 61.0Ipinapakita ng mga numero ang mismatch: ang class file version 65.0 ay Java 21, ang 61.0 ay Java 17, at ang 60.0 ay Java 16. Anuman ang makita mong pares, pareho lang ang solusyon — i-install ang mas bagong JRE at i-run muli ang update-alternatives.
Step 2: gumamit ng dedicated user, huwag root
Isinasagawa ng server ang plugin code at pino-parse ang network input mula sa sinumang makakaabot sa port. Kapag nagkaroon ng error, ang compromise kung root ang gamit ay magreresulta sa pagkawala ng kontrol sa iyong VPS; kung minecraft ang gamit, game world lang ang mawawala.
sudo adduser --system --group --home /opt/minecraft minecraftGumagawa ang --system ng no-password account na hindi maaaring mag-log in via SSH, gamit ang /opt/minecraft bilang home at working directory. Lahat ng command na tatama sa server mula rito ay tatakbo bilang user na ito.
Step 3: i-download ang server jar mula sa official source
Dalawang lugar lang ang dapat magbigay sa iyo ng server jar: ang official server download page sa minecraft.net para sa vanilla, at ang downloads page sa papermc.io para sa Paper. Ang mga third-party "download hubs" na nagre-repackage ng mga server jar ay kilalang channel para sa malware — ang server jar ay arbitrary code na patatakbuhin mo nang 24/7 sa isang internet-facing na machine.
I-copy ang download link para sa current build mula sa official page (nagbabago ang URL sa bawat version at build, kaya hindi dapat i-hardcode ang link dito), pagkatapos ay:
cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'Tamang resulta: isang server.jar na may laki na humigit-kumulang 50 MB na pagmamay-ari ng minecraft, na kumpirmado gamit ang ls -lh /opt/minecraft/server.jar.
Step 4: unang pagtakbo, ang EULA, at pag-op sa iyong sarili
Patakbuhin ang server nang interactive nang isang beses bago gamitin ang systemd — may dalawang gawain ang unang pagtakbo na sa live console lang nagagawa nang maayos.
cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar noguiMag-eexit ito sa loob ng ilang segundo — maglalaan muna ang Paper ng ilang sandali para i-apply ang mga patches nito — at ang log ay magtatapos sa linyang nakikita ng lahat:
[ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.Hindi ito error; isa itong license gate. Isinulat ng run ang eula.txt sa tabi ng jar. Basahin ang linked EULA kung hindi mo pa ito nababasa, pagkatapos ay i-set ang flag:
sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txtPatakbuhin muli ang parehong java command. Sa pagkakataong ito, gagawin na nito ang world — aabutin ng isa o dalawang minuto sa unang boot — at hihinto sa:
[Server thread/INFO]: Done (9.204s)! For help, type "help"Mayroon ka nang live console. Gamitin ito para sa ikalawang gawain: i-type ang op YourMinecraftName (ang iyong eksaktong in-game username) at isusulat ka ng server sa ops.json, para sa susunod — kapag wala nang naka-attach na console — magagamit mo ang lahat ng admin command mula sa loob ng laro. Pagkatapos, i-type ang stop para mag-save at mag-exit nang maayos.
Step 5: server.properties, at kung bakit dapat manatiling true ang online-mode
Isinulat din ng unang run ang server.properties. Ayos na ang karamihan sa mga default; ang mga linyang ito ang dapat mong pagpasyahan nang maigi:
online-mode=true
white-list=true
enforce-whitelist=true
view-distance=8
max-players=10
motd=A private server for people I actually knowonline-mode=true pinapatingin ng server ang bawat username na sumasali sa session servers ng Mojang upang patunayan na ang player ay may-ari ng account. Kapag ginawang false — ang "cracked server" toggle — tinatanggap ng server ang anumang impormasyon mula sa client tungkol sa kanilang pagkakakilanlan: kahit sino ay maaaring sumali gamit ang anumang pangalan, kasama na ang sa iyo. Dahil ang ops at whitelists ay nakabase sa pangalan, ang isang impersonator ay makakapasok na mayroon mong operator permissions. Ang tanging lehitimong dahilan para gawin itong false ay kung mayroong authenticating proxy tulad ng Velocity, na siya mismong nagve-verify sa mga player. Sa isang normal na server, dapat itong manatiling true.
view-distance ang pinakamalaking performance lever sa file na ito — ang CPU at RAM cost ay tumataas nang kahanay ng square nito. Ang 8 ay isang maayos na default para sa VPS; ang 10 ay ang vanilla default at mas mabigat sa system.
white-list=true plus enforce-whitelist=true ay nagsasara sa server para sa mga hindi kakilala, na ayon sa security section sa ibaba ay hindi dapat i-disable. Magdagdag ng mga player gamit ang /whitelist add TheirName sa loob ng laro bilang isang op.
Step 6: memory flags — bakit dapat magkapareho ang -Xms at -Xmx
Nag-aallocate ang JVM ng heap sa pagitan ng -Xms (starting size) at -Xmx (ceiling). Sa isang dedicated game server, itakda ang mga ito sa parehong value: mapupuno rin naman ang heap hanggang sa ceiling, at ang pagpapalaki nito nang paunti-unti ay nagdudulot lamang ng garbage-collector churn habang naglalaro. Para sa isang 4 GB VPS, ang tamang pares ay:
/usr/bin/java -Xms3G -Xmx3G -jar server.jar noguiAng -Xmx ay hindi ang kabuuang memory na ginagamit ng process. Nagdadagdag ang JVM ng off-heap overhead — thread stacks, JIT caches, direct buffers — na humigit-kumulang kalahating gigabyte o higit pa, at kailangan din ng Ubuntu ng space. Ang working rule: -Xmx ang maximum na VPS RAM minus 1 GB. Kapag lumampas ka, magkakaroon ng isa sa dalawang failure. Kung mabigo ang allocation sa simula, hindi magsisimula ang server at lalabas ang:
Error: Could not reserve enough space for object heapAng error na ito ay direkta at agad na makikita. Ang mas malalang version ay nagsisimula nang maayos pero namamatay pagkalipas ng ilang oras, kapag napuno ang heap sa ilalim ng load at pinili ng kernel OOM killer ang pinakamalaking process sa machine — ang JVM. Walang lalabas sa server log; ang ebidensya ay nasa sudo dmesg | grep -i oom, isang linya gaya ng Out of memory: Killed process 1234 (java). Kung ang iyong service ay "randomly" na nagre-restart, i-check muna doon, at babaan ang -Xmx.
Para sa Paper, ang dokumentasyon ng project ay nagrerekomenda ng Aikar's flags — isang tuned G1GC set (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 at iba pang flags) na nagpapatmooth ng garbage-collection pauses sa mas malalaking heap. I-generate ang buong command line mula sa Paper documentation; sa 2–4 GB heap, maliit lang ang gain pero ligtas naman ang mga flags na ito.
Step 7: systemd unit na may Restart=on-failure
Ang server na pinatakbo nang manual ay mamamatay kasabay ng iyong SSH session at hindi na muling bubukas pagkatapos ng reboot. Isulat ang /etc/systemd/system/minecraft.service:
[Unit]
Description=Minecraft server (Paper)
After=network-online.target
Wants=network-online.target
[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui
Restart=on-failure
RestartSec=10
TimeoutStopSec=120
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now minecraft
systemctl status minecraft
journalctl -u minecraft -fTamang resulta: ipapakita ng status ang active (running), at ang journal — na naglalaman na ngayon ng server console output — ay hihinto muli sa Done na linya.
May dalawang sadyang desisyon sa unit na ito. Ibabalik ng Restart=on-failure ang server pagkatapos ng crash pero hindi pagkatapos ng malinis na stop, kaya mananatiling posible ang maintenance. At mahalaga ang TimeoutStopSec=120 higit sa inaakala: magpapadala ang systemctl stop ng SIGTERM, tatanggapin ito ng Minecraft server at i-save ang lahat ng world bago mag-exit, at sa malalaking world, matagal ang pag-save na ito. Maaaring i-SIGKILL ng default timeout ng systemd ang JVM habang nag-sa-save, na siyang pangunahing sanhi ng corruption sa mga region file. Bigyan ito ng dalawang minuto.
Kung ang service ay nag-i-flap at ang journal ay nagpapakita ng:
[Server thread/WARN]: **** FAILED TO BIND TO PORT!
[Server thread/WARN]: The exception was: io.netty.channel.unix.Errors$NativeIoException: bind(..) failed: Address already in use
[Server thread/WARN]: Perhaps a server is already running on that port?ibig sabihin ay may gumagamit na ng port 25565 — madalas ay ang nauna mong foreground run na buhay pa sa ibang SSH session. Hanapin ito gamit ang sudo ss -tlnp | grep 25565 at i-stop ang kopya na iyon; huwag kailanman magpatakbo ng dalawang server sa iisang port.
Step 8: i-open ang 25565 sa parehong firewall
TCP 25565 lamang ang ginagamit ng Minecraft Java (ang UDP ay para sa optional query protocol lang, at naka-off ito by default). Sa VPS:
sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enableIyan ang unang firewall. Karamihan sa mga VPS provider ay may pangalawang network-level firewall sa kanilang control panel, at ito ang madalas makalimutan. I-open din ang TCP 25565 doon. Ang sintomas kapag isa lang sa dalawa ang bukas ay hindi malinaw: mag-ha-hang ang client sa "Connecting to the server..." at mag-e-error sa Connection timed out: no further information — walang refusal, walang server error, at walang laman ang journal dahil hindi nakarating ang mga packet. I-verify ito mula sa machine na labas sa VPS gamit ang nc -vz your.server.ip 25565; ang succeeded ay nangangahulugang bukas ang parehong firewall, habang ang pag-hang ay nangangahulugang may kahit isang hindi bukas.
Habang nasa ufw ka, ang parehong server ay tumatakbo rin sa SSH gamit ang public IP, at magsisimula na ang brute-force log noise sa loob ng ilang oras — i-set up ang Fail2ban para sa SSH sa Ubuntu 24.04 bago mo pa malimutan.
Mag-connect na: Multiplayer, Direct Connection, ang server IP. Dahil na-op ka na sa step 4, gagana agad ang mga in-game command — /whitelist add FriendName para sa bawat player, /gamemode creative kung iyon ang plano.
Step 9: i-whitelist ang server dahil nakikita ng internet ang port 25565
Ang pag-iwan sa Minecraft server na bukas sa internet ay isang totoong risk: patuloy na ini-scan ng mga mass scanner ang buong IPv4 space para sa port 25565 — nakahanap na ang mga griefing projects ng daan-daang libong open servers gamit ito — at ang isang server na walang whitelist ay makakatanggap ng mga hindi kilalang bisita sa loob ng ilang araw o oras. Ang whitelist mula sa step 5 ang solusyon: pinapatunayan ng online-mode=true ang identity, at nililimitahan ng whitelist ang entry sa mga identity na pinili mo. Ang kombinasyong ito ang buong security model, at sapat na ito para sa server ng mga kaibigan.
Para sa console access nang hindi binubuksan ang game — gaya ng scripted backups o cron job — i-enable ang RCON sa server.properties (enable-rcon=true, isang malakas na rcon.password, port 25575) at i-build ang maliit na mcrcon client mula sa GitHub source nito sa mismong VPS; wala ito sa mga repo ng Ubuntu. Huwag i-open ang 25575 sa anumang firewall: ipinapadala ng RCON ang password sa cleartext, kaya dapat itong manatiling loopback-only.
Step 10: mga backup na hindi nakakasira ng world
Ang iisang panuntunan: huwag kailanman i-copy ang world directory habang nagsusulat ang server. Ang mga region file ay patuloy na sinusulat habang may naglalaro; ang isang tar na nagre-race sa isang write operation ay magreresulta sa archive na may half-written chunks. Kapag ni-restore mo ito — ang mahalagang sandali kung kailan dapat gumana ang backup — mapupuno ang log ng chunk-loading errors at magkakaroon ng mga butas ang terrain. May dalawang paraan para maiwasan ito.
Ang Stop-copy-start ay ang simpleng paraan, ngunit may downtime na isang minuto:
sudo systemctl stop minecraft
sudo mkdir -p /opt/backups
sudo tar czf /opt/backups/world-$(date +%F-%H%M).tgz \
-C /opt/minecraft world world_nether world_the_end
sudo systemctl start minecraft(Hinihiwalay ng Paper ang mga dimension sa world, world_nether, at world_the_end; ang vanilla server ay pinapanatili ang lahat sa world, kaya i-drop ang dalawang iba pa doon.)
Ang Save-off ay nagba-backup habang live: gamit ang RCON, i-issue ang save-off (itigil ang autosaver), pagkatapos ay save-all flush (pilitin ang lahat na isulat sa disk at maghintay), kunin ang tar, pagkatapos ay save-on. Ito ang bersyon na dapat ilagay sa cron tuwing 5 a.m.
Sa alinmang paraan, ang backup na nasa parehong VPS gaya ng server ay hindi maituturing na backup — i-scp o rclone ang mga archive palabas ng machine, at magtabi ng higit sa isa. At dahil hindi ka nakatingin sa console kapag may nasira, maglagay ng external check sa port: ang Uptime Kuma sa ibang box na gumagawa ng TCP check laban sa 25565 ay magsasabi sa iyo na down ang server bago pa man ito malaman ng iyong mga players.
Plugins at upgrades
Sa Paper, ang plugin ay isang jar na ilalagay sa /opt/minecraft/plugins/ at pagkatapos ay i-restart ang server — iyon lang ang proseso ng installation. Kumuha lamang ng plugins mula sa kanilang official project pages (Hangar, Modrinth, SpigotMC). Katulad ng server jar, ang bawat plugin ay arbitrary code na tumatakbo bilang minecraft user.
Ang pag-upgrade ng server ay: i-stop, i-back up, palitan ang server.jar ng build para sa bagong Minecraft version, at i-start. May dalawang dapat tandaan. Ang world upgrades ay one-way — ang world na binuksan sa mas bagong version ay hindi na mabubuksan sa mas lumang version, kaya mahalaga ang backups. Ang mga plugin ay madalas na nahuhuli ng ilang araw o linggo sa bagong Minecraft release, kaya i-check muna ang compatibility bago mag-upgrade sa unang araw ng release.
Kung mas gusto mong i-manage ang lahat ng ito bilang isang container — gaya ng version pinning, EULA acceptance, at memory flags bilang environment variables — ang itzg/minecraft-server image ay maaaring gamitin. Pinapatakbo nito ang parehong Paper server gamit ang Docker Compose sa iyong VPS na may parehong firewall at backup discipline.
FAQ
Gaano karaming RAM ang kailangan ng Minecraft server?
Ang 2 GB ay sapat para sa vanilla para sa 2–5 players; ang 4 GB ay komportable para sa server ng mga kaibigan na may sampung players gamit ang Paper at ilang plugins; ang mga modpacks at 20-plus players ay nangangailangan ng 8 GB o higit pa. Anuman ang laki ng VPS, i-set ang -Xmx sa maximum na total RAM minus 1 GB — gumagamit ang JVM ng memory lampas sa heap, at ang paglampas dito ay magreresulta sa Error: Could not reserve enough space for object heap o sa isang silent OOM kill.
Bakit hindi makakonekta ang mga kaibigan ko sa aking Minecraft server?
Ang client hang na nagtatapos sa Connection timed out: no further information ay halos laging dahil sa firewall, at mayroong dalawa: ang ufw sa VPS at ang network firewall ng iyong provider sa control panel. Dapat bukas ang TCP 25565 sa dalawang ito. Siguraduhin na ang server ay nakikinig gamit ang sudo ss -tlnp | grep 25565 sa machine, pagkatapos ay i-test mula sa labas gamit ang nc -vz your.server.ip 25565.
Dapat ko bang i-set ang online-mode=false sa server.properties?
Hindi. Gamit ang online-mode=false, tuluyan nang nilalagpasan ng server ang Mojang authentication, kaya kahit sino ay makakapartidong gamit ang anumang username — kabilang ang pangalan ng isang op, na magmamana ng kanilang permissions — at masisira ang mga skins at stable UUIDs. Ang tanging tamang gamit nito ay sa likod ng isang authenticating proxy gaya ng Velocity na nagve-verify mismo sa mga player. Para sa isang normal na server, dapat itong manatiling true.
Mas mabuti ba ang Paper kaysa sa vanilla Minecraft server?
Para sa halos lahat, oo: ang Paper ay isang drop-in jar na naglo-load ng vanilla worlds, tumatanggap ng unmodified clients, mas efficient ang pag-tick ng entities at pag-load ng chunks, at nagdadagdag ng plugin ecosystem. Ang exception ay ang mga technical-redstone community na nangangailangan ng bit-exact vanilla behaviour, na binabago ng ilang Paper optimisations. Sa isang maliit na VPS, ang efficiency ng Paper ay nagsisilbing libreng extra RAM.
Paano mag-back up ng Minecraft world nang hindi ito naco-corrupt?
Huwag kailanman i-archive ang world directory habang nagsusulat ang server dito — ang pagkopya habang may isinusulat na region-file ay nagreresulta sa corrupted chunks na malalaman mo lang sa oras ng pag-restore. I-stop ang server, i-tar ang mga world directories, at i-start itong muli, o panatilihin itong live gamit ang save-off, save-all flush, tar, at save-on sa pamamagitan ng RCON. Pagkatapos ay ilipat ang archive palabas ng VPS.