SSD Nodes Learn
Mwongozo Matt ConnorNa Matt Connor · Imeboreshwa 2026-07-24

Jinsi ya kuweka Minecraft server kwenye VPS

Jifunze kuendesha Paper Minecraft kwenye Ubuntu 24.04 kwa kutumia Java 21 na systemd. Pata mwongozo wa RAM, firewall 25565, na yedeksha za ulimwengu wako.

Unachojenga

Server ya Minecraft Java Edition inayodumu: Paper kwenye Ubuntu 24.04, inayojiendesha kama minecraft user maalum chini ya systemd kwa kutumia Restart=on-failure, whitelist ikiwa imewashwa, port 25565 ikiwa wazi kwenye firewall zote mbili zilizopo kati ya wachezaji na JVM, na nakala yedeksha (backups) zinazochukuliwa bila kuharibu ulimwengu unaoitunza. Server yenyewe ni jar moja na java command moja; kila kitu kinachotofautisha server ambayo marafiki zako wataicheza kwa mwaka mmoja na ile inayofeli wikiendi ya kwanza kinahusu hiyo command, na mwongozo huu unashughulikia mambo hayo.

Onyo mbili muhimu kabla ya kutumia pesa. Kwanza, Minecraft hutumia RAM nyingi na hutumia thread moja zaidi: VPS ya 1 GB haitaweza kuendesha server inayochezeka, na core moja ya haraka ni bora kuliko core nne za polepole. Pili, hii ni Java Edition. Wachezaji wa Bedrock — console, simu, au Windows Bedrock app — hawawezi kujiunga na server ya Java; Bedrock inahitaji programu ya server tofauti kwenye UDP 19132, au plugin ya Geyser, ambayo haipo kwenye mwongozo huu.

Unahitaji Ubuntu 24.04 KVM VPS mpya yenye root au sudo, na takriban dakika kama thelathini.

Ukubwa: kile ambacho seva ya marafiki inahitaji hasa

RAM ndiyo kipimo muhimu, na takwimu za kweli ni ndogo kuliko zinavyopendekezwa kwenye majukwaa ya modpack:

  • 2 GB inafaa kwa vanilla kwa wachezaji 2–5 kwa umbali wa kuona (view distance) wa wastani. Inafanya kazi, lakini haina nafasi ya ziada.
  • 4 GB ni ukubwa unaofaa kwa seva ya marafiki: takriban wachezaji kumi wanaocheza kwa wakati mmoja kwenye Paper ikiwa na plugin chache, na kiasi kinachotosha kwa OS.
  • 8 GB na zaidi ni kwa ajili ya modpack na wachezaji zaidi ya 20, ambapo unapaswa pia kuzingatia kasi ya single-core CPU, kwa sababu mzunguko mkuu wa mchezo (game loop) hufanya kazi kwenye thread moja.

Pia, dunia hukua kwenye diski wakati wachezaji wanapochunguza — dunia ya survival iliyotemelewa sana hufika gigabytes kadhaa — hivyo acha nafasi ya ziada kwa ajili ya dunia na nakala zake (backups).

Vanilla au Paper? Paper ni mbadala wa jar rasmi: dunia zilezile, client zilezile, na haihitaji mod za upande wa client. Inarekebisha njia polepole zaidi za seva — kuchukua chunk, entity ticking, hoppers — na inaongeza plugin API. Sababu pekee ya kutumia vanilla ni ikiwa unahitaji mekanika ya vanilla iliyo sahihi kabisa kwa ajili ya redstone farms za kiufundi ambazo optimisations za Paper zinaweza kubadilisha; kwa kila mwingine, Paper inatoa wachezaji wengi zaidi kwa kila gigabyte. Kila kitu kilicho chini hufanya kazi kwa zote mbili.

Hatua ya 1: install Java 21

Minecraft 1.20.5 na kila toleo baada yake (vyote vya 1.21.x) vinahitaji Java 21. Ubuntu 24.04 inatoa toleo hili kwenye repos za kawaida, na toleo la headless huondoa maktaba za desktop ambazo seva haitazitumia:

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

Matokeo sahihi: mstari wa kwanza unasoma openjdk version "21.0.x". Ikiwa unasoma 17 au 11, JRE nyingine imewekwa na inatumika; irekebishe kwa kutumia sudo update-alternatives --config java na chagua chaguo yenye java-21.

Kupuuza ukaguzi huu husababisha kosa la server ya Minecraft linalotafutwa zaidi Google baadaye. Ukitumia Java 17, server jar itafeli papo hapo na kuonyesha:

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

Nambari hizo zinaonyesha kutofautiana: class file version 65.0 ni Java 21, 61.0 ni Java 17, 60.0 ni Java 16. Haijalishi ni jozi gani unayoona, suluhisho ni lile lile — install JRE mpya na urejee update-alternatives.

Hatua ya 2: mtumiaji maalum, usitumie root kamwe

Server inatekeleza kodi ya plugin na kuchakata data ya mtandao kutoka kwa mtu yeyote anayeweza kufikia port. Ikitokea hitilafu, ikiwa unatumia root, mdukuzi atatawala VPS yako; ikiwa unatumia minecraft, atatawala ulimwengu wa mchezo tu.

sudo adduser --system --group --home /opt/minecraft minecraft

--system inatengeneza akaunti isiyo na password ambayo haiwezi kuingia kupitia SSH, ikiwa na /opt/minecraft kama home na working directory. Kila amri itakayogusa server kuanzia sasa itaendeshwa kama mtumiaji huyu.

Hatua ya 3: pakua server jar kutoka chanzo rasmi

Maeneo mawili tu ndiyo yanayopaswa kukupa server jar: ukurasa rasmi wa pakua server kwenye minecraft.net kwa vanilla, na ukurasa wa pakua kwenye papermc.io kwa Paper. "Download hubs" za watu wa tatu zinazofungasha upya server jars ni njia ya muda mrefu ya kueneza malware — server jar ni kodi inayojitegemea ambayo utaikimbisha 24/7 kwenye kifaa kilicho wazi kwenye mtandao.

Nakili kiungo cha pakua cha toleo la sasa kutoka kwenye ukurasa rasmi (URL hubadilika kwa kila toleo na build, hivyo kuweka moja hapa kutafanya iwe outdated), kisha:

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

Matokeo sahihi: server.jar ya takriban MB 50 inayomilikiwa na minecraft, iliyothibitishwa na ls -lh /opt/minecraft/server.jar.

Hatua ya 4: mwendo wa kwanza, EULA, na kujiongeza kama admin

Endesha server kwa njia ya interactive mara moja kabla ya kutumia systemd — mwendo wa kwanza una kazi mbili ambazo console haiwezi kuzifanya vizuri.

cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar nogui

Inajifunga ndani ya sekunde chache — Paper hutumia muda zaidi kidogo kuweka patches — na log huisha na mstari ambao kila mtu hukutana nao:

[ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

Hii siyo kosa; ni kizuizi cha leseni. Run iliandika eula.txt karibu na jar. Soma EULA iliyounganishwa ikiwa bado hujaisoma, kisha weka flag:

sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txt

Endesha amri ya java tena. Wakati huu inatengeneza ulimwengu — dakika moja au mbili wakati wa boot ya kwanza — na inafikia:

[Server thread/INFO]: Done (9.204s)! For help, type "help"

Sasa una console hai. Itumie kwa kazi ya pili: andika op YourMinecraftName (jina lako la mtumiaji ndani ya mchezo) na server itakuandika kwenye ops.json, ili baadaye — wakati hakuna console iliyounganishwa — uweze kutumia kila amri ya admin kutoka ndani ya mchezo. Kisha andika stop ili kuhifadhi na kutoka vizuri.

Hatua ya 5: server.properties, na kwa nini online-mode inabaki true

Mchakato wa kwanza pia uliandika server.properties. Mipangilio mingi ya awali ni sawa; mistari hii ndiyo inayohitaji maamuzi ya makusudi:

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 hufanya server ihakiki kila jina la mtumiaji linalojiunga dhidi ya seva za kikao za Mojang, ikithibitisha kuwa mchezaji anamiliki akaunti hiyo. Kuweka thamani ya false — chaguo la "cracked server" — inamaanisha server inaamini maelezo yoyote ya mteja kuhusu utambulisho wao: mtu yeyote anaweza kujiunga kwa jina lolote, ikiwemo lako, na kwa kuwa ops na whitelists hutumia majina, mlaghai anaweza kuingia akiwa na ruhusa zako za operator. Sababu pekee halali ya kuweka thamani ya false ni nyuma ya proxy ya uhakiki kama Velocity, ambayo hufanya uhakiki wa wachezaji wenyewe. Kwenye server ya kawaida, inabaki true, bila shaka.

view-distance ndio lever kubwa zaidi ya utendaji katika faili hii — gharama ya CPU na RAM huongezeka kulingana na mraba wake. 8 ni chaguo la kawaida kwa VPS; 10 ni chaguo la asili (vanilla) na ina uzito mkubwa zaidi.

white-list=true pamoja na enforce-whitelist=true hufunga server kwa watu wasiojulikana, jambo ambalo sehemu ya usalama hapo chini linasema si la hiari. Ongeza wachezaji kwa kutumia /whitelist add TheirName ndani ya mchezo kama op.

Hatua ya 6: memory flags — kwa nini -Xms na -Xmx zinapaswa kufanana

JVM hutenga heap yake kati ya -Xms (ukubwa wa kuanzia) na -Xmx (kiwango cha juu). Kwenye game server maalum, ziweke kwenye thamani sawa: heap itafika kiwango cha juu anyway, na kuikuza hatua kwa hatua huongeza mzigo wa garbage-collector wakati wa kucheza. Kwenye VPS ya GB 4, chaguo sahihi ni:

/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui

-Xmx si jumla ya memory inayotumiwa na process. JVM huongeza off-heap overhead — thread stacks, JIT caches, direct buffers — ya takriban nusu gigabyte au zaidi, na Ubuntu yenyewe inahitaji nafasi. Kanuni ya kazi: -Xmx ni RAM ya VPS chini kwa GB 1. Ukizidisha, utapata moja kati ya matatizo mawili. Ikiwa allocation itafeli mapema, server itakataa kuanza na:

Error: Could not reserve enough space for object heap

Hii ni taarifa ya wazi na ya haraka. Toleo baya zaidi huanza vizuri lakini hukufa baada ya saa kadhaa, wakati heap inapojaa chini ya mzigo na kernel's OOM killer inachagua process kubwa zaidi kwenye mashine — JVM. Hakuna kinachoonekana kwenye server log; ushahidi upo kwenye sudo dmesg | grep -i oom, mstari kama Out of memory: Killed process 1234 (java). Ikiwa huduma yako inajizima "kivutio", kagua huko kwanza, na upunguze -Xmx.

Kwa Paper, mradi unashauri Aikar's flags — seti ya G1GC iliyorekebishwa (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 na nyingine nyingi) inayolainisha pauses za garbage-collection kwenye heap kubwa. Tengeneza mstari kamili kutoka kwenye nyaraka za Paper; kwenye heap ya GB 2–4 faida ni ndogo lakini flags hizi hazina madhara.

Hatua ya 7: unit ya systemd yenye Restart=on-failure

Server iliyoanzishwa kwa mkono itazima pindi session yako ya SSH inapofungwa, na itaendelea kuwa imezimwa baada ya kuwasha upya (reboot). Andika /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

Matokeo sahihi: status inaonyesha active (running), na journal — ambayo sasa inabeba output ya console ya server — inaishia kwenye mstari wa Done tena.

Kuna chaguzi mbili za makusudi kwenye unit hiyo. Restart=on-failure huirudisha server baada ya hitilafu (crash) lakini si baada ya stop safi, hivyo matengenezo yanaendelea kuwa possible. Na TimeoutStopSec=120 ni muhimu zaidi kuliko inavyoonekana: systemctl stop hutuma SIGTERM, server ya Minecraft inaipokea na kuhifadhi kila ulimwengu (world) kabla ya kutoka, na kwenye ulimwengu mkubwa, uhifadhi huo huchukua muda. Timeout ya systemd inaweza kutuma SIGKILL kwenye JVM wakati wa kuhifadhi, na hiyo ndiyo sababu kuu inayoharibu files za region. Ipe dakika mbili.

Ikiwa service inazima na kuwaka mara kwa mara (flapping) na journal inaonyesha:

[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?

basi kitu fulani tayari kinatumia port 25565 — mara nyingi ni run yako ya awali ya foreground ambayo bado ipo hai kwenye session nyingine ya SSH. Itafute kwa kutumia sudo ss -tlnp | grep 25565 na usitue nakala hiyo; usirunde server mbili kwenye port moja.

Hatua ya 8: fungua 25565 kwenye firewalls zote mbili

Minecraft Java hutumia TCP 25565 pekee (UDP ni itifaki ya query isiyo ya lazima, ambayo imezimwa kwa kima kawaida). Kwenye VPS:

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

Hiyo ni firewall ya kwanza. Wasimamizi wengi wa VPS hutumia firewall ya pili katika panel ya udhibiti, na watu mara nyingi husahau hiyo. Fungua TCP 25565 huko pia. Dalili ya kuwa na firewall moja tu kati ya mbili ni isiyo na maelezo kamili: mteja (client) hukwama kwenye "Connecting to the server..." na kushindwa kwa Connection timed out: no further information — hakuna kukataliwa, hakuna hitilafu ya seva, hakuna kitu kwenye journal, kwa sababu paketi hazijafika kamwe. Hakiki kutoka kwenye mashine iliyo nje ya VPS kwa kutumia nc -vz your.server.ip 25565; succeeded inamaanisha firewalls zote mbili ziko wazi, kukwama kunamaanisha angalau moja haiko wazi.

Wakati unatumia ufw, seva hiyo hiyo inatumia SSH kwenye IP ya umma, na kelele za log za brute-force huanza ndani ya saa chache — weka Fail2ban kwa ajili ya SSH kwenye Ubuntu 24.04 kabla haujasahau.

Sasa unganisha: Multiplayer, Direct Connection, IP ya seva. Kwa sababu ulijipa ruhusa katika hatua ya 4, amri za mchezo zinafanya kazi mara moja — /whitelist add FriendName kwa kila mchezaji, /gamemode creative ikiwa huo ndio mpango.

Hatua ya 9: whitelist, kwa sababu mtandao unatafuta port 25565

Kuacha seva ya Minecraft ikiwa wazi kwenye mtandao ni hatari halisi: skana nyingi zinapitia eneo lote la IPv4 kutafuta port 25565 kila wakati — miradi ya uharibifu imepata mamia ya maelfu ya seva zilizofunguliwa kwa njia hii — na seva isiyo na whitelist hupata wageni wasiohitajika ndani ya siku chache, au hata saa chache. Whitelist kutoka hatua ya 5 ndiyo suluhisho: online-mode=true inathibitisha utambulisho, na whitelist inazuia watu wasiohusika kuingia. Mfumo huo wa usalama unatosha kwa seva ya marafiki.

Kwa ajili ya ufikiaji wa console bila mchezo — kama vile nakala za ziada (backups) zinazotumia script au cron job — washa RCON kwenye server.properties (enable-rcon=true, rcon.password imara, port 25575) na uunde client ndogo ya mcrcon kutoka kwenye chanzo chake cha GitHub kwenye VPS yenyewe; haipo kwenye repos za Ubuntu. Usifungue port 25575 kwenye firewall yoyote: RCON hutuma nywila bila usimbaji (cleartext), hivyo lazima ibaki kwenye loopback-only.

Hatua ya 10: nakala yedodha (backups) zisizoharibu data

Sheria moja: usinakili directory ya dunia wakati server inaandika. Files za region huandikwa upya kila wakati wakati wa kucheza; tar inayoshindana na uandishi huleta archive yenye chunks ambazo hazijaandikwa kikamilifu. Uniponirudisha (restore) — wakati ambao backup lazima ifanye kazi — log itajaa makosa ya chunk-loading na ardhi itakuwa na matundu. Njia mbili huzuia hili.

Stop-copy-start ni njia rahisi, lakini inasababisha server kutofanya kazi kwa dakika moja:

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

(Paper hugawanya dimensions katika world, world_nether, na world_the_end; vanilla server huhifadhi kila kitu kwenye world, hivyo weka nyingine mbili hapo.)

Save-off hufanya backup wakati server inafanya kazi: kupitia RCON, tumia save-off (simamisha autosaver), kisha save-all flush (lazimisha kila kitu kiandikwe kwenye disk na usubiri), chukua tar, kisha save-on. Hii ndiyo njia ya kuweka kwenye cron saa 5 a.m.

Vyovyote vile, backup iliyopo kwenye VPS ile ile na server siyo backup kamili — scp au rclone archives nje ya box, na weka zaidi ya moja. Kwa kuwa hautakuwa unaangalia console wakati kitu kinapovunjika, weka ukaguzi wa nje kwenye port: Uptime Kuma kwenye box nyingine inayofanya TCP check dhidi ya 25565 itakuambia server imezimika kabla ya wachezaji wako kujua.

Plugins na upgrades

Kwenye Paper, plugin ni jar inayowekwa kwenye /opt/minecraft/plugins/ kisha server inaanza upya — huo ndio ufungaji wote. Pata plugins kutoka kwenye kurasa rasmi za miradi (Hangar, Modrinth, SpigotMC), kwa sababu ile ile kama jar ya server: kila moja ni kodi inayojiendesha kama mtumiaji minecraft.

Kufanya upgrade ya server ni: simamisha server, fanya backup, badilisha server.jar na build ya toleo jipya la Minecraft, kisha anza tena. Tahadhari mbili. Upgrade ya dunia (world) ni ya upande mmoja — dunia iliyofunguliwa na toleo jipya haitafunguka kwenye toleo la zamani, jambo linalohitaji matumizi ya backup. Pia, plugins mara nyingi huchelewa kufuata toleo jipya la Minecraft kwa siku au wiki kadhaa, hivyo kagua utangamano kabla ya kutafuta toleo jipya siku ya kwanza.

Ikiwa ungependa kusimamia haya yote kama container — kuzuia matoleo (version pinning), kukubali EULA, na memory flags kama environment variables — picha ya itzg/minecraft-server inayotumika sana huendesha Paper server ile ile chini ya Docker Compose kwenye VPS yako kwa kutumia mfumo ule ule wa firewall na backup.

FAQ

Minecraft server inahitaji RAM kiasi gani?

GB 2 inatosha kwa vanilla kwa wachezaji 2–5; GB 4 ni nzuri kwa seva ya marafiki wenye wachezaji kumi kwenye Paper pamoja na plugins chache; modpacks na wachezaji zaidi ya 20 wanahitaji GB 8 au zaidi. Chochote kimoja kile cha ukubwa wa VPS, weka -Xmx iwe chini ya jumla ya RAM kutoa GB 1 — JVM hutumia kumbukumbu zaidi ya heap, na kuzidisha husababisha Error: Could not reserve enough space for object heap au OOM kill isiyoonekana.

Kwa nini marafiki wangu hawawezi kuunganishwa kwenye seva yangu ya Minecraft?

Kukwama kwa client hadi Connection timed out: no further information mara nyingi kunamaanisha firewall, na kuna mbili: ufw kwenye VPS na firewall ya mtandao ya mtoa huduma wako kwenye control panel. TCP 25565 lazima iwe wazi kwenye zote mbili. Hakikisha seva inasikiliza kwa kutumia sudo ss -tlnp | grep 25565 kwenye mashine, kisha jaribu kutoka nje kwa kutumia nc -vz your.server.ip 25565.

Je, nianze kuweka online-mode=false kwenye server.properties?

Hapana. Kwa online-mode=false seva huacha kabisa uthibitisho wa Mojang, hivyo mtu yeyote anaweza kujiunga kwa kutumia jina lolote la mtumiaji — ikiwa ni pamoja na jina la op, akipata ruhusa zao — na skins pamoja na UUID zisizo thabiti huharibika. Matumizi pekee ya uhalali ni nyuma ya proxy inayothibitisha kama Velocity inayojithibitisha wachezaji wenyewe. Kwa seva ya kawaida, inabaki true.

Je, Paper ni bora kuliko vanilla Minecraft server?

Kwa karibu kila mtu, ndiyo: Paper ni jar inayoweza kutumika moja kwa moja inayopakia vanilla worlds, inakubali clients zisizofanyiwa marekebisho, inasindika entities na kuchakata chunks kwa ufanisi zaidi, na inaongeza mfumo wa plugins. Pengeleo ni jamii za technical-redstone zinazohitaji tabia halisi ya vanilla, ambayo baadhi ya ufanisi wa Paper huibadilisha. Kwenye VPS ndogo, ufanisi wa Paper ni RAM ya ziada bila gharama.

Ninawezaje kuweka backup ya Minecraft world bila kuiharibu?

Usifunge (archive) directory ya dunia wakati seva inaandika ndani yake — nakala inayoshindana na uandishi wa region-file husababisha chunks zilizoharibika ambazo utazigundua wakati wa kurejesha. Aisa au simamisha seva, tar directories za dunia, kisha iwashe tena, au iache iendelee ikiwa na save-off, save-all flush, tar, save-on kupitia RCON. Kisha hamisha archive hiyo nje ya VPS.

#minecraft#game-server#java#ubuntu#self-hosting