Paano Mag-host ng Minecraft Server sa VPS
Magpatakbo ng Paper Minecraft server sa Ubuntu 24.04 VPS: tamang RAM, Java 25, systemd, firewall sa 25565, ligtas na backup, at eksaktong error.
Mga itinatayo mo
Isang Minecraft Java Edition server na tuloy-tuloy na tumatakbo: Paper sa Ubuntu 24.04, tumatakbo bilang dedicated na minecraft user sa ilalim ng systemd na may Restart=on-failure, naka-enable ang whitelist, bukas ang port 25565 sa ufw at sa network firewall ng provider kung naka-enable ito, at may mga backup na ginagawa sa paraang hindi nakakasira sa world na pinoprotektahan ng mga ito. Ang server mismo ay isang jar at isang java command; ang lahat ng naghihiwalay sa server na nilalaruan ng mga kaibigan mo sa loob ng isang taon mula sa server na tumitigil sa unang weekend ay nakapaligid sa command na iyon, at iyon ang tinatalakay ng gabay na ito.
Dalawang tapat na babala bago ka gumastos. Una, malakas sa memory ang Minecraft at karamihan sa mga gawain nito ay gumagamit ng iisang thread: hindi makakapagpatakbo ng playable server ang 1 GB VPS, at mas mainam ang isang mabilis na core kaysa apat na mababagal na core. Ikalawa, Java Edition ito. Hindi makakasali sa Java server ang mga manlalaro sa Bedrock, console, phone, at Windows Bedrock app; kailangan ng Bedrock ng ibang server software sa UDP 19132, o ng Geyser plugin, na wala sa saklaw ng gabay na ito.
Kailangan mo ng bagong Ubuntu 24.04 KVM VPS na may root o sudo, at humigit-kumulang tatlumpung minuto.
Sizing: ano talaga ang kailangan ng friends server
RAM ang pinakamahalagang numero, at mas mababa ang aktuwal na kailangan kaysa sa ipinapahiwatig ng mga modpack forum:
- 2 GB ay kayang magpatakbo ng vanilla para sa 2–5 player sa katamtamang view distance. Nape-play, pero walang ekstrang capacity.
- 4 GB ang komportableng laki para sa friends server: humigit-kumulang sampung sabay-sabay na player sa Paper na may ilang plugin, at may sapat na matitira para sa OS.
- 8 GB pataas ang para sa modpack at higit 20 player. Sa ganitong setup, mahalaga rin ang single-core CPU speed dahil tumatakbo sa isang thread ang pangunahing game loop.
Lumalaki rin ang world sa disk habang nag-e-explore ang mga player. Ang madalas paglaruang survival world ay maaaring umabot sa ilang gigabyte, kaya maglaan ng headroom para sa world at mga backup nito.
Vanilla o Paper? Ang Paper ay drop-in replacement para sa official jar: pareho ang mga world, pareho ang mga client, at hindi kailangan ng client-side mods. Binabago nito ang pinakamabagal na server path, kabilang ang chunk loading, entity ticking, at hopper processing, at nagdadagdag ito ng plugin API. Ang tanging dahilan para gumamit ng vanilla ay kung kailangan mo ng eksaktong vanilla mechanics para sa mga technical redstone farm na maaaring mabago ng mga optimization ng Paper. Para sa iba, mas maraming player ang kayang suportahan ng Paper sa bawat gigabyte. Gumagana ang lahat ng nasa ibaba para sa parehong setup.
Hakbang 1: i-install ang Java 25
Nangangailangan ang Minecraft 26.1 at bawat release mula rito ng Java 25; saklaw lamang ng Java 21 ang mas lumang 1.20 hanggang 1.21.11 line. Ipinapamahagi ng Ubuntu 24.04 ang Java 25 sa pamamagitan ng updates at security repository nito. I-install ang buong JRE, hindi ang -headless build: nagbababala ang Java install guide ng Paper na huwag gumamit ng headless variant dahil kulang ang mga dependency na kailangan ng Paper.
sudo apt update && sudo apt install -y openjdk-25-jre
java -versionTamang resulta: openjdk version "25.0.x" ang nasa unang linya. Kung 21, 17, o 11 ang nakalagay, ibang JRE ang naka-install at ginagamit; ayusin ito gamit ang sudo update-alternatives --config java at piliin ang entry na naglalaman ng java-25.
Kapag nilaktawan ang pagsusuring ito, lalabas kalaunan ang error sa Minecraft server na pinakamadalas hanapan ng solusyon sa Google. Sa Java 21, agad nagsasara ang server jar at ipinapakita ang:
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 69.0),
this version of the Java Runtime only recognizes class file versions up to 65.0Ipinapakita ng mga numero ang mismatch: ang class file version na 69.0 ay Java 25, ang 65.0 ay Java 21, at ang 61.0 ay Java 17. Anuman ang pares na makita mo, pareho ang solusyon: i-install ang mas bagong JRE at patakbuhin muli ang update-alternatives.
Hakbang 2: dedicated user, hindi kailanman root
Ang server ay nagpapatakbo ng plugin code at nagpa-parse ng network input mula sa sinumang makakaabot sa port. Kung magkaproblema ito, ang compromise na tumatakbo bilang root ay magkakaroon ng ganap na kontrol sa iyong VPS; ang tumatakbo bilang minecraft ay magkakaroon lamang ng kontrol sa isang game world.
sudo adduser --system --group --home /opt/minecraft minecraftGumagawa ang --system ng account na walang password at hindi makakapag-login sa SSH, gamit ang /opt/minecraft bilang home at working directory nito. Mula rito, lahat ng command na kumikilos sa server ay tatakbo bilang user na ito.
Hakbang 3: i-download ang server jar mula sa opisyal na source
Dalawang lugar lamang ang dapat pagkunan ng server jar: ang opisyal na server download page sa minecraft.net para sa vanilla, at ang downloads page sa papermc.io para sa Paper. Ang mga third-party na “download hub” na nagre-repackage ng server jar ay matagal nang channel ng malware. Arbitrary code ang server jar na patatakbuhin mo 24/7 sa isang server na accessible sa internet.
Kopyahin ang download link para sa kasalukuyang build mula sa opisyal na page. Nagbabago ang URL sa bawat version at build, kaya mabilis maluluma kung maglalagay nito rito nang hardcoded. Pagkatapos:
cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'Tamang resulta: isang server.jar na humigit-kumulang 60 MB at pagmamay-ari ng minecraft, na nakumpirma gamit ang ls -lh /opt/minecraft/server.jar.
Hakbang 4: unang pagpapatakbo, ang EULA, at pagdaragdag ng sarili bilang operator
Patakbuhin muna nang interactive ang server bago galawin ang systemd. Dalawa lamang ang gawaing mahusay na maisagawa ng live console sa unang run.
cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar noguiLumalabas ito pagkalipas ng ilang segundo. Gumugugol muna ang Paper ng ilang dagdag na sandali sa paglalapat ng mga patch nito. Pagkatapos, nagtatapos ang log 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. License gate ito. Isinulat ng run ang eula.txt sa tabi ng jar. Basahin ang naka-link na EULA kung hindi mo pa ito nagagawa, pagkatapos ay baguhin ang flag:
sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txtPatakbuhin muli ang parehong java command. Sa pagkakataong ito, ginagawa nito ang world. Umaabot ito ng isa o dalawang minuto sa unang boot, pagkatapos ay nananatili sa:
[Server thread/INFO]: Done (9.204s)! For help, type "help"Mayroon ka na ngayong live console. Gamitin ito para sa ikalawang gawain: i-type ang op YourMinecraftName (ang eksaktong in-game username mo). Isusulat ka ng server sa ops.json, kaya sa kalaunan, kapag walang nakakabit na console, maaari mong patakbuhin ang lahat ng admin command mula sa loob ng game. Pagkatapos, i-type ang stop upang ma-save ang mga pagbabago at malinis na lumabas.
Hakbang 5: server.properties, at kung bakit nananatiling true ang online-mode
Isinulat din ng unang run ang server.properties. Maayos na ang karamihan sa default; ang mga linyang ito ang kailangang pagpasiyahan nang sinadya:
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 ang nagbe-verify sa bawat username na sumasali laban sa session servers ng Mojang, upang mapatunayan na pagmamay-ari ng player ang account. Kapag itinakda ito sa false, ang toggle para sa “cracked server,” nagtitiwala ang server sa anumang sabihin ng client tungkol sa pagkakakilanlan nito: maaaring sumali ang sinuman gamit ang anumang pangalan, kasama ang pangalan mo. Dahil naka-key sa pangalan ang mga op at whitelist, maaaring makapasok ang impostor gamit ang operator permissions mo. Ang tanging lehitimong dahilan para maging false ito ay kapag nasa likod ng isang nag-a-authenticate na proxy gaya ng Velocity, na mismong nagbe-verify sa mga player. Sa normal na server, nananatili itong true, walang eksepsiyon.
view-distance ang pinakamalaking performance lever sa file. Tinatayang naka-scale sa square nito ang CPU at RAM cost. Makatuwirang default sa VPS ang 8; ang 10 ang vanilla default at kapansin-pansing mas mabigat.
white-list=true kasama ang enforce-whitelist=true ang nagsasara sa server para sa mga hindi kilala, na ayon sa security section sa ibaba ay hindi opsyonal. Magdagdag ng mga player gamit ang /whitelist add TheirName in-game bilang op.
Hakbang 6: memory flags, kung bakit dapat magkapareho ang -Xms at -Xmx
Inilalaan ng JVM ang heap nito sa pagitan ng -Xms (panimulang laki) at -Xmx (pinakamataas na laki). Sa isang dedicated game server, itakda ang mga ito sa parehong value: maaabot din ng heap ang pinakamataas na laki, at ang unti-unting pagpapalaki nito ay nagdaragdag lamang ng garbage-collector churn habang naglalaro. Sa isang 4 GB VPS, ito ang tamang pares:
/usr/bin/java -Xms3G -Xmx3G -jar server.jar noguiAng -Xmx ay hindi kabuuang memory na ginagamit ng process. Nagdadagdag ang JVM ng off-heap overhead, thread stacks, JIT caches, at direct buffers na humigit-kumulang kalahating gigabyte o higit pa, at kailangan din ng Ubuntu ng sapat na memory. Ang praktikal na tuntunin: -Xmx na hindi lalampas sa VPS RAM na binawasan ng 1 GB. Kapag sumobra, isa sa dalawang failure ang mangyayari. Kung mabigo agad ang allocation, tatangging magsimula ang server at ipapakita nito ang:
Error: Could not reserve enough space for object heapMalinaw at agad na lumilitaw ang error na ito. Mas mapanganib ang kabilang bersyon: maayos itong nagsisimula ngunit namamatay makalipas ang ilang oras, kapag napuno ang heap sa ilalim ng load at pinili ng kernel's OOM killer ang pinakamalaking process sa server, ang JVM. Walang lalabas sa server log; nasa sudo dmesg | grep -i oom ang ebidensiya, sa linyang gaya ng Out of memory: Killed process 1234 (java). Kung ang service ay nagre-restart nang “random”, suriin muna roon at ibaba ang -Xmx.
Para sa Paper, idinodokumento ng project ang Aikar's flags, isang naka-tune na G1GC set (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 at iba pang flags) na nagpapabawas sa tagal ng garbage-collection pauses sa mas malalaking heap. I-generate ang buong line mula sa Paper documentation; sa 2–4 GB heap, maliit ang pakinabang ngunit ligtas gamitin ang mga flag.
Hakbang 7: isang systemd unit na may Restart=on-failure
Ang server na sinimulan nang mano-mano ay namamatay kapag natapos ang SSH session mo at hindi na muling umaandar 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: ipinapakita ng status ang active (running), at ang journal, na naglalaman na ngayon ng console output ng server, ay nagtatapos muli sa linyang Done.
May dalawang sadyang pagpili sa unit na ito. Ibinabalik ng Restart=on-failure ang server kapag nag-crash ito, pero hindi pagkatapos ng malinis na stop, kaya posible pa rin ang maintenance. Mahalaga rin ang TimeoutStopSec=120 kahit hindi ito agad halata: nagpapadala ang systemctl stop ng SIGTERM, sinasalo ito ng Minecraft server at sine-save ang bawat world bago mag-exit, at matagal ang pag-save na ito kapag malaki ang world. Maaaring magpadala ang default timeout ng systemd ng SIGKILL sa JVM habang nagse-save pa ito. Ito ang eksaktong paraan kung paano nasisira ang region files. Itakda ito sa dalawang minuto.
Kung paulit-ulit na nagre-restart ang service at ipinapakita ng journal ang:
[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?may ibang proseso nang gumagamit sa 25565. Halos palaging ang nauna mong foreground run ito na patuloy pang tumatakbo sa ibang SSH session. Hanapin ito gamit ang sudo ss -tlnp | grep 25565 at ihinto ang kopyang iyon; huwag magpatakbo ng dalawang server sa iisang port.
Hakbang 8: buksan ang 25565 sa parehong firewall
TCP 25565 lamang ang ginagamit ng Minecraft Java (ang UDP ay para lang sa optional query protocol at naka-off bilang default). Sa VPS:
sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enableIyan ang unang firewall. Nag-aalok din ang maraming VPS provider ng pangalawang firewall na nasa network level sa control panel. Kapag aktibo ito, madalas itong nakakaligtaan. Sa SSD Nodes, ito ang Advanced Firewall Groups add-on, isang bayad na dagdag na ina-assign mo sa checkout o mula sa dashboard. Kung may ganito ang server mo, buksan din doon ang TCP 25565. Hindi tiyak ang sintomas kapag may nawawalang rule sa alinman sa mga firewall: mananatili ang client sa "Connecting to the server..." at mabibigo gamit ang Connection timed out: no further information. Walang refusal, server error, o entry sa journal dahil hindi nakarating ang mga packet. Mag-verify mula sa machine na nasa labas ng VPS gamit ang nc -vz your.server.ip 25565. Ibig sabihin ng succeeded ay bukas ang bawat firewall sa path. Karaniwang ibig sabihin ng pag-hang ay may firewall pang nagda-drop ng mga packet. Gayunman, maaari ring mag-time out ang koneksyon kapag masyadong abala ang host para tumanggap ng mga koneksyon. Kaya tiyaking nakikinig ang server gamit ang ss sa mismong box.
Habang nasa ufw ka, nagpapatakbo rin ang parehong box ng SSH sa public IP. Magsisimula ang ingay ng brute-force logs sa loob lamang ng ilang oras. I-set up ang Fail2ban para sa SSH sa Ubuntu 24.04 bago mo ito makalimutan.
Kumonekta ngayon: Multiplayer, Direct Connection, at ang server IP. Dahil binigyan mo ang sarili mo ng operator access sa hakbang 4, gagana agad ang mga in-game command, /whitelist add FriendName para sa bawat player, at /gamemode creative kung iyon ang plano.
Hakbang 9: whitelist, dahil natutukoy ng internet ang port 25565
Hindi teoretikal na panganib ang pag-iwang bukas ng Minecraft server sa internet: patuloy na ini-scan ng mga mass scanner ang buong IPv4 space para sa port 25565, daan-daang libong bukas na server ang na-map ng mga hobbyist griefing project sa ganitong paraan, at sa loob ng ilang araw, o minsan ilang oras, may mga hindi inimbitahang bisita na ang server na walang whitelist. Ang whitelist mula sa hakbang 5 ang solusyon: pinatutunayan ng online-mode=true ang identity, at nililimitahan ng whitelist ang pagpasok sa mga identity na pinili mo. Iyan ang buong security model, at sapat na ito para sa server ng magkakaibigan.
Para sa console access nang hindi ginagamit ang game, scripted backups, at isang cron job, i-enable ang RCON sa server.properties (enable-rcon=true, isang matibay na rcon.password, port 25575) at i-build ang maliit na mcrcon client mula sa GitHub source nito mismo sa VPS; wala ito sa Ubuntu repositories. Huwag buksan ang 25575 sa anumang firewall: ipinapadala ng RCON ang password bilang cleartext, kaya dapat loopback-only ito.
Hakbang 10: mga backup na hindi sumisira sa world
Ang pangunahing tuntunin: huwag kailanman kopyahin ang isang world directory habang sinusulatan ito ng server. Patuloy na nire-rewrite ang mga region file habang naglalaro; kapag nakipagsabayan ang isang tar sa write, makakagawa ito ng archive na may mga chunk na kalahating naisulat. Kapag ni-restore mo ito kalaunan, sa mismong panahong kailangang gumana ang backup, mapupuno ang log ng mga chunk-loading error at magkakaroon ng mga butas ang terrain. Maiiwasan ito sa pamamagitan ng dalawang paraan.
Ang stop-copy-start ang pinakasimple, kapalit ng isang minutong downtime:
sudo systemctl stop minecraft
sudo mkdir -p /opt/backups
sudo tar czf /opt/backups/world-$(date +%F-%H%M).tgz \
-C /opt/minecraft world
sudo systemctl start minecraft(Mula 26.1, inilalagay ng Paper ang lahat ng tatlong dimension sa loob ng world/dimensions/, gaya ng vanilla, kaya ang world ang buong world. Ang Paper server na nasa 1.21.11 o mas luma pa ay hinahati ang mga ito sa world, world_nether, at world_the_end; idagdag ang dalawang iyon sa tar doon.)
Ang save-off ay gumagawa ng backup habang live ang server: sa RCON, i-issue ang save-off (ihinto ang autosaver), pagkatapos ang save-all flush (piliting isulat ang lahat sa disk at maghintay), kunin ang tar, at pagkatapos ay save-on. Ito ang bersyong ilalagay sa cron nang 5 a.m.
Alinman sa dalawang paraan, ang backup na nasa parehong VPS ng server ay hindi tunay na backup. scp o rclone ang mga archive palabas ng server, at magtabi ng higit sa isa. Dahil hindi mo tinitingnan ang console kapag may nasisira, maglagay ng external check sa port: ang Uptime Kuma sa ibang box na nagsasagawa ng TCP check sa 25565 ay magsasabi sa iyo na down ang server bago pa ito malaman ng mga player mo.
Mga plugin at upgrade
Sa praktika, ang plugin ay isang jar na inilalagay sa /opt/minecraft/plugins/ at sinusundan ng restart; iyon na ang buong proseso ng installation. Kumuha lamang ng mga plugin mula sa official project pages ng mga ito (Hangar, Modrinth, SpigotMC), sa parehong dahilan kung bakit dapat sa official source kunin ang server jar: arbitrary code ang bawat isa na tumatakbo bilang minecraft user.
Ganito ang pag-upgrade ng server: ihinto ito, gumawa ng backup, palitan ang server.jar ng build para sa bagong Minecraft version, at simulan muli. Dalawang bagay ang dapat tandaan. One-way ang world upgrades. Hindi bubuksan sa mas lumang version ang world na binuksan na ng mas bagong version, kaya mahalaga rin dito ang mga backup. Madalas ding nahuhuli ng ilang araw o linggo ang mga plugin sa bagong Minecraft release. Suriin muna ang compatibility bago magmadaling mag-install ng release sa unang araw. Ang paglipat mula 1.21.11 papunta sa 26.1 o mas bago ay nangangailangan din ng Java 25 (step 1) at inililipat ang Nether at End folders ng Paper sa world/dimensions/.
Kung mas gusto mong i-manage ang lahat ng ito bilang container, gamit ang version pinning, EULA acceptance, at memory flags bilang environment variables, pinapatakbo ng malawakang ginagamit na itzg/minecraft-server image ang parehong Paper server sa ilalim ng Docker Compose sa iyong VPS, kasama ang parehong firewall at backup discipline.
FAQ
Gaano karaming RAM ang kailangan ng Minecraft server?
Kayang patakbuhin ng 2 GB ang vanilla para sa 2–5 player; sapat at komportable ang 4 GB para sa humigit-kumulang sampung manlalaro sa friends server na gumagamit ng Paper at ilang plugin; ang mga modpack at 20 o higit pang player ay nangangailangan ng 8 GB o higit pa. Anuman ang laki ng VPS, itakda ang -Xmx sa hindi hihigit sa kabuuang RAM bawas 1 GB, dahil gumagamit ang JVM ng memory bukod sa heap, at ang paglampas sa limitasyon ay nagdudulot ng Error: Could not reserve enough space for object heap o tahimik na OOM kill.
Bakit hindi makakonekta ang mga kaibigan ko sa Minecraft server ko?
Ang pag-hang ng client na nagtatapos sa Connection timed out: no further information ay karaniwang nangangahulugan ng problema sa firewall: ang ufw sa VPS at ang network firewall ng provider kung naka-enable ito sa control panel. Dapat bukas ang TCP 25565 sa bawat firewall na dinaanan ng koneksyon. Tiyaking aktuwal na nakikinig ang server gamit ang sudo ss -tlnp | grep 25565 sa server, saka mag-test mula sa labas gamit ang nc -vz your.server.ip 25565.
Dapat ko bang itakda ang online-mode=false sa server.properties?
Hindi. Kapag online-mode=false, tuluyang nilalaktawan ng server ang authentication ng Mojang, kaya maaaring sumali ang sinuman gamit ang anumang username, kabilang ang pangalan ng isang op, at mamamana ang mga permission nito. Masisira rin ang mga skin at stable UUID. Ang tanging lehitimong gamit nito ay sa likod ng authenticating proxy gaya ng Velocity na mismong nagbe-verify sa mga player. Para sa karaniwang server, nananatili itong true.
Mas mahusay ba ang Paper kaysa sa vanilla Minecraft server?
Para sa halos lahat, oo: ang Paper ay drop-in jar na naglo-load ng vanilla worlds, tumatanggap ng mga client na walang binagong configuration, mas mahusay na nagti-tick ng entities at naglo-load ng chunks, at nagdaragdag ng plugin ecosystem. Ang eksepsiyon ay mga technical-redstone community na nangangailangan ng eksaktong vanilla behavior, dahil binabago ito ng ilang optimization ng Paper. Sa maliit na VPS, halos katumbas ng dagdag na libreng RAM ang efficiency ng Paper.
Paano ako magba-back up ng Minecraft world nang hindi ito naco-corrupt?
Huwag kailanman i-archive ang world directory habang sinusulatan ito ng server, dahil ang copy na kasabay ng pagsusulat sa region file ay maaaring lumikha ng corrupted chunks na matutuklasan mo lamang kapag nag-restore. Maaari mong ihinto ang server, i-tar ang mga world directory, at simulan itong muli. Maaari mo rin itong panatilihing tumatakbo gamit ang save-off, save-all flush, tar, at save-on sa RCON. Pagkatapos, ilipat ang archive palabas ng VPS.