SSD Nodes Learn Hosting plans →
Mga Gabay Matt ConnorNi Matt Connor · Na-update 2026-08-07

Paano Mag-host ng Minecraft Server sa VPS

Patakbuhin ang Paper Minecraft server sa Ubuntu 24.04 VPS gamit ang Java 21, systemd, whitelist, dalawang firewall sa port 25565, at ligtas na world backups.

Mga binubuo 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 gamit ang Restart=on-failure, naka-enable ang whitelist, bukas ang port 25565 sa parehong firewall na nasa pagitan ng mga player at ng JVM, 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 bumibigay sa unang weekend ay nakapaligid sa command na iyon, at iyon ang saklaw ng guide na ito.

Dalawang tapat na babala bago ka gumastos. Una, memory-hungry ang Minecraft at karamihan sa trabaho nito ay single-threaded: hindi makakapagpatakbo ng playable server ang 1 GB VPS, at mas mahusay ang isang mabilis na core kaysa sa apat na mababagal. Ikalawa, Java Edition ito. Hindi makakasali sa Java server ang mga Bedrock player, console, phone, at Windows Bedrock app; kailangan ng Bedrock ng ibang server software sa UDP 19132, o ng Geyser plugin, na hindi saklaw dito.

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 21

Ang Minecraft 1.20.5 at lahat ng kasunod nitong release (kabilang ang 1.21.x) ay nangangailangan ng Java 21. Kasama ito sa default repositories ng Ubuntu 24.04. Hindi rin kasama sa headless build ang desktop libraries na hindi gagamitin ng server:

sudo apt update && sudo apt install -y openjdk-21-jre-headless
java -version

Tamang resulta: dapat openjdk version "21.0.x" ang mabasa sa unang linya. Kung 17 o 11 ang mabasa, ibang JRE ang naka-install at ginagamit. Ayusin ito gamit ang sudo update-alternatives --config java, at piliin ang entry na naglalaman ng java-21.

Kapag nilaktawan ang check na ito, lalabas sa kalaunan ang pinakakaraniwang Minecraft server error na hinahanap sa Google. Sa Java 17, agad nagka-crash 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.0

Ipinapakita ng mga numero ang mismatch: ang class file version na 65.0 ay Java 21, ang 61.0 ay Java 17, at ang 60.0 ay Java 16. Anuman ang pares na makita mo, pareho ang solusyon: i-install ang mas bagong JRE at muling patakbuhin 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 minecraft

Gumagawa 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 lang ang dapat pagkuhanan 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. Ang server jar ay arbitrary code na patatakbuhin mo 24/7 sa server na exposed 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 magiging luma ang hardcoded na URL rito. Pagkatapos:

cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'

Tamang resulta: isang server.jar na humigit-kumulang 50 MB, pagmamay-ari ng minecraft, at 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 nogui

Lumalabas 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.txt

Patakbuhin 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 know

online-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 nogui

Ang -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 heap

Malinaw 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.target
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
systemctl status minecraft
journalctl -u minecraft -f

Tamang 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 lamang sa optional query protocol at naka-off bilang default). Sa VPS:

sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enable

Iyon ang unang firewall. Karamihan sa VPS provider ay nagpapatakbo ng pangalawa, network-level firewall sa control panel, at ito ang madalas nakakalimutan. Buksan din doon ang TCP 25565. Kapag isa lamang sa dalawang firewall ang nabuksan, hindi malinaw ang sintomas: natitigil ang client sa "Connecting to the server..." at nagfa-fail gamit ang Connection timed out: no further information, walang refusal, walang server error, at walang 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; nangangahulugan ang succeeded na bukas ang parehong firewall, habang ang pagkatigil ay nangangahulugang hindi bukas ang kahit isa sa mga ito.

Habang nasa ufw ka, nagpapatakbo rin ang parehong box ng SSH sa isang public IP, at magsisimula sa loob ng ilang oras ang ingay mula sa brute-force logs. I-set up ang Fail2ban para sa SSH sa Ubuntu 24.04 bago mo ito makalimutan.

Kumonekta ngayon: Multiplayer, Direct Connection, ang IP ng server. Dahil binigyan mo ang sarili mo ng op sa step 4, agad na gagana ang mga in-game command, /whitelist add FriendName para sa bawat player, /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 nakakasira sa world

Ang pangunahing rule: huwag kailanman mag-copy ng world directory habang sinusulatan ito ng server. Patuloy na nire-rewrite ang region files habang naglalaro; kapag sumabay ang isang tar sa write operation, magkakaroon ang archive ng mga chunk na kalahating naisulat. Kapag kalaunan ay ni-restore mo ito, sa mismong oras na kailangang gumana ang backup, mapupuno ang log ng mga error sa pag-load ng chunk at magkakaroon ng mga butas ang terrain. Maiiwasan ito sa pamamagitan ng dalawang discipline.

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 world_nether world_the_end
sudo systemctl start minecraft

Hinahati ng Paper ang mga dimension sa world, world_nether, at world_the_end; inilalagay ng vanilla server ang lahat sa world, kaya doon mo ilagay ang dalawa pa.

Ang save-off ay nagba-backup habang live ang server: sa RCON, i-issue ang save-off upang ihinto ang autosaver, pagkatapos ay save-all flush upang piliting isulat sa disk ang lahat at maghintay. Kunin ang tar, pagkatapos ay save-on. Ito ang bersyong ilalagay sa cron nang 5 a.m.

Sa alinmang paraan, hindi backup ang backup na nasa parehong VPS ng server. scp o rclone ang mga archive palabas ng server, at magpanatili ng higit sa isa. Dahil hindi mo babantayan ang console kapag may masira, maglagay ng external check sa port: ang Uptime Kuma sa ibang box ay magsagawa ng TCP check laban sa 25565 upang malaman mong down ang server bago pa malaman ng mga player.

Mga plugin at upgrade

Sa Paper, ang plugin ay isang jar na inilalagay sa /opt/minecraft/plugins/ at sinusundan ng restart. Iyon na ang buong proseso ng pag-install. Kumuha lamang ng mga plugin mula sa official project pages ng mga ito (Hangar, Modrinth, SpigotMC), sa parehong dahilan kung bakit ganoon din ang dapat gawin sa server jar: arbitrary code ang bawat isa na tumatakbo bilang user na minecraft.

Ang pag-upgrade ng server ay ganito: ihinto ito, gumawa ng backup, palitan ang server.jar ng build para sa bagong Minecraft version, at simulan itong muli. May dalawang dapat tandaan. One-way ang world upgrades. Hindi magbubukas sa mas lumang version ang world na nabuksan na ng mas bagong version. Dito mahalaga ang mga backup. Madalas ding nahuhuli ng ilang araw o linggo ang mga plugin sa bagong Minecraft release. Suriin muna ang compatibility bago agad gumamit ng release sa unang araw.

Kung mas gusto mong i-manage ang lahat ng ito bilang container, gamit ang version pinning, pagtanggap sa EULA, at memory flags bilang environment variables, pinapatakbo ng malawakang ginagamit na itzg/minecraft-server image ang parehong Paper server sa 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 ang 4 GB para sa humigit-kumulang sampung-player na server ng magkakaibigan sa Paper na may ilang plugin; ang mga modpack at 20-plus player ay nangangailangan ng 8 GB o higit pa. Anuman ang laki ng VPS, itakda ang -Xmx sa kabuuang RAM na bawas ng 1 GB dahil gumagamit ang JVM ng memory lampas sa heap, at ang sobrang laki ng itinakda ay nauuwi sa 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 halos palaging nangangahulugan ng firewall issue, at may dalawang firewall: ang ufw sa VPS at ang network firewall ng provider sa control panel. Kailangang bukas ang TCP 25565 sa pareho. Kumpirmahing aktuwal na nakikinig ang server gamit ang sudo ss -tlnp | grep 25565 sa server, pagkatapos ay 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 ang gamit, lubusang nilalaktawan ng server ang authentication ng Mojang. Dahil dito, maaaring sumali ang sinuman gamit ang anumang username, kabilang ang pangalan ng isang op, at mamana ang mga permission nito. Masisira rin ang skins at stable UUIDs. Ang tanging lehitimong gamit nito ay kapag nasa likod ng isang authenticating proxy gaya ng Velocity na mismong nagbe-verify ng mga player. Para sa normal na server, dapat itong manatiling true.

Mas mahusay 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 mga hindi binagong client, 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 behaviour sa bawat bit, dahil binabago ito ng ilang optimization ng Paper. Sa maliit na VPS, halos katumbas ng libreng dagdag na RAM ang efficiency ng Paper.

Paano ako magba-back up ng Minecraft world nang hindi ito nako-corrupt?

Huwag kailanman i-archive ang world directory habang sinusulatan ito ng server. Ang sabayang pagkopya habang may isinusulat na region file ay maaaring lumikha ng mga corrupted chunk na matutuklasan mo lamang kapag nag-restore. Maaari mong ihinto ang server, i-tar ang mga world directory, at simulan itong muli. Maaari mo ring panatilihing tumatakbo ang server gamit ang save-off, save-all flush, tar, at save-on sa pamamagitan ng RCON. Pagkatapos, ilipat ang archive palabas ng VPS.