SSD Nodes Learn Hosting plans →
Mwongozo Matt ConnorNa Matt Connor · Imeboreshwa 2026-08-07

Jinsi ya kuendesha seva ya Minecraft kwenye VPS ya Ubuntu

Jifunze kuweka seva ya Paper Minecraft kwenye Ubuntu 24.04 kwa kutumia Java 21. Mwongozo huu unaelezea usanidi wa systemd, firewall ya 25565, na mbinu za kuhifadhi nakala.

Unachojenga

Seva ya Minecraft Java Edition inayobaki hewani: Paper kwenye Ubuntu 24.04, inayofanya kazi kama mtumiaji maalum minecraft chini ya systemd na Restart=on-failure, whitelist ikiwa imewashwa, port 25565 ikiwa wazi katika firewall zote mbili zilizopo kati ya wachezaji wako na JVM, na backups zinazochukuliwa kwa njia isiyoharibu ulimwengu unaolindwa. Seva yenyewe ni jar moja na amri moja ya java; kila kitu kinachotofautisha seva ambayo marafiki zako wanacheza kwa mwaka mzima na ile inayokufa mwishoni mwa wiki ya kwanza kimejengwa kuzunguka amri hiyo, na ndicho mwongozo huu unachoshughulikia.

Maonyo mawili ya kweli kabla ya kutumia pesa. Kwanza, Minecraft inahitaji kumbukumbu nyingi na mara nyingi hutumia thread moja: VPS ya 1 GB haitaendesha seva inayoweza kuchezeka, na core moja ya haraka ni bora kuliko nne za polepole. Pili, hii ni Java Edition. Wachezaji wa Bedrock, consoles, simu, na programu ya Windows Bedrock hawawezi kujiunga na seva ya Java; Bedrock inahitaji programu tofauti ya seva kwenye UDP 19132, au plugin ya Geyser, ambayo haijajumuishwa hapa.

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

Ukubwa: mahitaji halisi ya seva ya marafiki

RAM ndiyo namba muhimu, na takwimu za kweli ni ndogo kuliko vile majukwaa ya modpack yanavyopendekeza:

  • 2 GB inaendesha vanilla kwa wachezaji 2–5 katika umbali wa kawaida wa kuona (view distance). Inafanya kazi, lakini haina nafasi ya ziada.
  • 4 GB ndiyo ukubwa unaofaa kwa seva ya marafiki: takriban wachezaji kumi kwa wakati mmoja kwenye Paper wakiwa na plugins chache, na inabaki nafasi ya kutosha kwa OS.
  • 8 GB na kuendelea ni kwa ajili ya modpacks na wachezaji zaidi ya 20, ambapo unapaswa pia kuzingatia kasi ya CPU ya core moja, kwa sababu mzunguko mkuu wa mchezo (main game loop) huendeshwa kwenye thread moja.

Ulimwengu wa mchezo pia hukua kwenye diski kadiri wachezaji wanavyochunguza, ulimwengu wa survival uliotembelewa sana hufikia gigabytes kadhaa, kwa hivyo acha nafasi ya ziada kwa ajili ya ulimwengu na backups zake.

Vanilla au Paper? Paper ni mbadala wa moja kwa moja wa jar rasmi: ulimwengu ni uleule, clients ni zilezile, na hakuna mods za upande wa client zinazohitajika. Inarekebisha njia za seva zilizo polepole, upakiaji wa chunks, utendaji wa entities, hoppers, na inaongeza API ya plugins. Sababu pekee ya kuendesha vanilla ni ikiwa unahitaji mechanics halisi za vanilla kwa ajili ya mashamba ya redstone ya kiufundi ambayo maboresho ya Paper yanaweza kubadilisha; kwa wengine wote, Paper inaruhusu wachezaji wengi zaidi kwa kila gigabyte. Kila kitu hapa chini kinafanya kazi kwa zote mbili.

Hatua ya 1: kusakinisha Java 21

Minecraft 1.20.5 na kila toleo lililofuata (yote ya 1.21.x) linahitaji Java 21. Ubuntu 24.04 inayo kwenye hazina zake za kawaida, na toleo la headless linaruka maktaba za desktop ambazo seva haitawahi kuzitumia:

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

Matokeo sahihi: mstari wa kwanza unasomeka openjdk version "21.0.x". Ikiwa unasomeka 17 au 11, JRE nyingine imesakinishwa na inatumika; irekebishe kwa sudo update-alternatives --config java na uchague ingizo lenye java-21.

Kuruka ukaguzi huu husababisha kosa la seva ya Minecraft linalotafutwa zaidi kwenye Google baadaye. Ukiwa na Java 17, seva jar inakufa mara moja na ujumbe:

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

Namba hizi zinafafanua kutolingana huko: toleo la faili la darasa 65.0 ni Java 21, 61.0 ni Java 17, 60.0 ni Java 16. Jozi yoyote unayoiona, suluhisho ni lilelile, sakinisha JRE mpya zaidi na uendeshe tena update-alternatives.

Hatua ya 2: mtumiaji maalum, si root

Seva hutekeleza msimbo wa plugin na kuchakata data ya mtandao kutoka kwa mtu yeyote anayeweza kufikia port hiyo. Ikiwa jambo hilo litafeli, udukuzi unaoendeshwa kama root unamiliki VPS yako; udukuzi unaoendeshwa kama minecraft unamiliki ulimwengu wa mchezo tu.

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

--system hutengeneza akaunti isiyo na nenosiri ambayo haiwezi kuingia kupitia SSH, ikiwa na /opt/minecraft kama saraka yake ya nyumbani na saraka ya kufanyia kazi. Kila amri inayohusu seva kuanzia hapa inaendeshwa kama mtumiaji huyu.

Hatua ya 3: pakua server jar kutoka chanzo rasmi

Kuna maeneo mawili pekee yanayopaswa kukupa server jar: ukurasa rasmi wa kupakua seva katika minecraft.net kwa ajili ya vanilla, na ukurasa wa vipakuzi katika papermc.io kwa ajili ya Paper. "Vituo vya kupakua" vya watu wengine vinavyopakia upya server jar ni njia ya muda mrefu ya kusambaza programu hasidi; server jar ni msimbo holela (arbitrary code) ambao unakaribia kuuuendesha saa 24 kwa siku kwenye seva inayotazamana na Internet.

Nakili kiungo cha kupakua cha toleo la sasa kutoka kwenye ukurasa rasmi (URL hubadilika kila toleo na build mpya, kwa hivyo kuweka kiungo kimoja hapa kutakifanya kishindwe kufanya kazi baada ya muda), kisha:

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

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

Hatua ya 4: uendeshaji wa kwanza, EULA, na kujipa haki za op

Endesha seva kwa njia ya maingiliano (interactive) mara moja kabla ya kugusa systemd; uendeshaji wa kwanza una kazi mbili ambazo konsole ya moja kwa moja pekee ndiyo inayoweza kuzifanya vizuri.

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

Inajifunga ndani ya sekunde chache, Paper hutumia muda mfupi zaidi kutumia viraka (patches) vyake kwanza, na logi huishia kwenye 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 si hitilafu; ni kizuizi cha leseni. Uendeshaji huo umeandika eula.txt karibu na jar. Soma EULA iliyounganishwa ikiwa hujafanya hivyo, kisha badilisha flag:

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

Endesha amri ileile ya java tena. Safari hii inatengeneza ulimwengu, inachukua dakika moja au mbili wakati wa boot ya kwanza, na inatulia kwenye:

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

Sasa una konsole hai. Itumie kwa kazi ya pili: chapa op YourMinecraftName (jina lako kamili la mtumiaji ndani ya mchezo) na seva itakuandika ndani ya ops.json, ili baadaye, wakati hakuna konsole iliyounganishwa, uweze kuendesha kila amri ya admin ukiwa ndani ya mchezo. Kisha chapa stop ili kuhifadhi na kutoka kwa usalama.

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

Uendeshaji wa kwanza pia uliandika server.properties. Chaguo nyingi za awali ni sawa; mistari hii ndiyo inayostahili kuamuliwa kwa makini:

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 huifanya seva kuthibitisha kila jina la mtumiaji linalojiunga dhidi ya seva za session za Mojang, ikithibitisha kuwa mchezaji anamiliki akaunti hiyo. Kuiweka kuwa false, kitufe cha "cracked server", inamaanisha seva inakubali neno la mteja yeyote kuhusu utambulisho wake: mtu yeyote anaweza kujiunga kwa jina lolote, pamoja na lako, na kwa kuwa ops na whitelists hutegemea majina, mtu anayejifanya kuwa wewe anaweza kuingia na haki zako za operator. Sababu pekee halali ya kuweka false ni ikiwa seva iko nyuma ya proxy ya uthibitishaji kama Velocity, ambayo yenyewe huthibitisha wachezaji. Kwenye seva ya kawaida, inabaki kuwa true, bila mjadala.

view-distance ndiyo kigezo kikubwa zaidi cha utendaji katika faili hii, gharama ya CPU na RAM huongezeka kulingana na mraba wake. 8 ni chaguo la kawaida la VPS; 10 ni chaguo la vanilla na ni nzito zaidi.

white-list=true pamoja na enforce-whitelist=true hufunga seva kwa wageni, jambo ambalo sehemu ya usalama hapa chini inasisitiza kuwa si la hiari. Ongeza wachezaji kwa kutumia /whitelist add TheirName ndani ya mchezo kama op.

Hatua ya 6: flag za kumbukumbu, kwa nini -Xms na -Xmx zinapaswa kufanana

JVM hutenga heap yake kati ya -Xms (ukubwa wa kuanzia) na -Xmx (kikomo cha juu). Kwenye seva ya michezo iliyojitolea, ziweke ziwe na thamani sawa: heap itafikia kikomo hicho hata hivyo, na kuiongeza hatua kwa hatua huongeza tu kazi ya garbage-collector wakati wa mchezo. Kwenye VPS ya 4 GB jozi sahihi ni:

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

-Xmx sio jumla ya kumbukumbu inayotumiwa na mchakato huo. JVM huongeza overhead ya nje ya heap, thread stacks, JIT caches, na direct buffers, takriban nusu gigabyte au zaidi, na Ubuntu yenyewe inahitaji nafasi. Kanuni ya kazi ni: -Xmx iwe angalau RAM ya VPS kutoa 1 GB. Ukizidisha utapata moja ya hitilafu mbili. Ikiwa utengaji utashindwa mwanzoni, seva itakataa kuanza na ujumbe:

Error: Could not reserve enough space for object heap

Hiyo ni ya wazi na ya papo hapo. Toleo baya zaidi huanza vizuri na kufa baada ya saa kadhaa, wakati heap inapojaa chini ya mzigo na OOM killer ya kernel huchagua mchakato mkubwa zaidi kwenye mashine, yaani JVM. Hakuna kinachoonekana kwenye log ya seva; ushahidi uko kwenye sudo dmesg | grep -i oom, mstari kama Out of memory: Killed process 1234 (java). Ikiwa huduma yako inajiwasha upya "bila mpangilio", angalia hapo kwanza, na upunguze -Xmx.

Kwa Paper, mradi huandika Aikar's flags, seti iliyosanifiwa ya G1GC (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 na nyingine kumi na mbili) ambayo hupunguza usumbufu wa garbage-collection kwenye heap kubwa. Tengeneza mstari kamili kutoka kwenye nyaraka za Paper; kwenye heap ya 2–4 GB faida ni ndogo lakini flag hizo hazina madhara.

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

Seva inayozinduliwa kwa mkono hufa pamoja na session yako ya SSH na hubaki imezimwa baada ya 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 pato la console ya seva, inaishia kwenye mstari wa Done tena.

Kuna machaguo mawili ya makusudi katika unit hiyo. Restart=on-failure huirudisha seva baada ya crash lakini si baada ya stop safi, hivyo matengenezo yanawezekana. Na TimeoutStopSec=120 ni muhimu zaidi kuliko inavyoonekana: systemctl stop hutuma SIGTERM, seva ya Minecraft huipokea na kuhifadhi kila ulimwengu kabla ya kutoka, na kwenye ulimwengu mkubwa uhifadhi huo huchukua muda. Muda wa kusubiri wa kawaida wa systemd unaweza kutuma SIGKILL kwa JVM katikati ya uhifadhi, jambo ambalo ndilo hasa husababisha faili za kanda kuharibika. Ipe dakika mbili.

Ikiwa huduma inawaka na kuzima mfululizo (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 kuna kitu tayari kinashikilia 25565, karibu kila mara ni ule uzinduzi wako wa awali wa foreground ambao bado uko hai katika session nyingine ya SSH. Ipatie kwa sudo ss -tlnp | grep 25565 na usimamishe nakala hiyo; usiwahi kuendesha seva mbili kwenye port moja.

Hatua ya 8: fungua 25565 kwenye firewall zote mbili

Minecraft Java hutumia TCP 25565 pekee (UDP ni itifaki ya query ya hiari, ambayo imezimwa kwa chaguo-msingi). Kwenye VPS:

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

Hiyo ni firewall ya kwanza. Watoa huduma wengi wa VPS huendesha firewall ya pili ya kiwango cha mtandao kwenye control panel, na hiyo ndiyo watu husahau. Fungua TCP 25565 huko pia. Dalili ya kufungua moja kati ya hizo mbili ni ya kutatanisha: mteja hukwama kwenye "Connecting to the server..." na kushindwa na Connection timed out: no further information, hakuna kukataliwa, hakuna hitilafu ya seva, hakuna kitu kwenye journal, kwa sababu pakiti hazikufika kabisa. Thibitisha kutoka kwa mashine iliyo nje ya VPS kwa kutumia nc -vz your.server.ip 25565; succeeded inamaanisha firewall zote mbili ziko wazi, kukwama kunamaanisha angalau moja haijafunguliwa.

Ukiwa bado kwenye ufw, kisanduku hicho hicho kinaendesha SSH kwenye IP ya umma, na kelele za logi za brute-force huanza ndani ya saa chache, sanidi Fail2ban kwa ajili ya SSH kwenye Ubuntu 24.04 kabla hujasahau.

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

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

Kuacha seva ya Minecraft wazi kwenye mtandao si hatari ya kinadharia: skana za watu wengi huchunguza nafasi nzima ya IPv4 kwa ajili ya port 25565 mfululizo, miradi ya wahuni wa mtandaoni imechora ramani ya mamia ya maelfu ya seva zilizo wazi kwa njia hii, na seva isiyo na whitelist hupata wageni wasioalikwa ndani ya siku chache, wakati mwingine ndani ya saa chache. Whitelist kutoka hatua ya 5 ndiyo suluhisho: online-mode=true huthibitisha utambulisho, whitelist huzuia uingiaji kwa utambulisho uliouchagua. Jozi hiyo ndiyo mfano mzima wa usalama, na inatosha kwa seva ya marafiki.

Kwa ajili ya ufikiaji wa console bila mchezo, backups za script, na cron job, wezesha RCON katika server.properties (enable-rcon=true, rcon.password imara, port 25575) na ujenge mteja mdogo wa mcrcon kutoka chanzo chake cha GitHub kwenye VPS yenyewe; haipo katika hazina za Ubuntu. Usifungue 25575 katika firewall yoyote: RCON hutuma nenosiri kwa maandishi wazi (cleartext), kwa hivyo lazima ibaki kwenye loopback pekee.

Hatua ya 10: nakala za akiba (backups) zisizoharibu ulimwengu

Kanuni moja: usinakili kamwe saraka ya ulimwengu wakati seva inaandika ndani yake. Faili za region huandikwa upya mfululizo wakati wa mchezo; tar inayoshindana na uandikaji hutoa kumbukumbu (archive) yenye vipande vilivyoandikwa nusu, na utakapojaribu kuirejesha, wakati huo ambao nakala ya akiba inapaswa kufanya kazi, logi itajaa makosa ya kupakia vipande (chunk-loading errors) na ardhi itakuwa na mashimo. Mbinu mbili huzuia hili.

Kusimamisha-kunakili-kuanzisha ndiyo njia rahisi, kwa gharama ya dakika moja ya kutopatikana kwa huduma:

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 hugawa vipimo katika world, world_nether, na world_the_end; seva ya vanilla huweka kila kitu ndani ya world, kwa hivyo acha zile nyingine mbili hapo.)

Save-off hufanya nakala ya akiba wakati seva inafanya kazi: kupitia RCON, toa amri ya save-off (simamisha uhifadhi wa kiotomatiki), kisha save-all flush (lazimisha kila kitu kiende kwenye diski na usubiri), chukua tar, kisha save-on. Hii ndiyo toleo la kuweka kwenye cron saa 11 alfajiri.

Vyovyote vile, nakala ya akiba iliyopo kwenye VPS ileile ya seva si nakala ya akiba, scp au rclone kumbukumbu hizo nje ya seva hiyo, na uweke zaidi ya moja. Na kwa kuwa hutakuwa ukitazama konsole wakati kitu kinaharibika, weka ukaguzi wa nje kwenye port: Uptime Kuma kwenye mashine nyingine inayofanya ukaguzi wa TCP dhidi ya 25565 itakuambia seva imezimika kabla ya wachezaji wako kujua.

Plugins na upgrades

Kwenye Paper, plugin ni faili la jar linalowekwa kwenye /opt/minecraft/plugins/ likifuatiwa na restart, huo ndio usakinishaji mzima. Pata plugins kutoka kwenye kurasa zao rasmi za mradi (Hangar, Modrinth, SpigotMC), kwa sababu ile ile ya server jar: kila moja ni msimbo holela unaoendeshwa kama mtumiaji minecraft.

Kufanya upgrade ya seva ni: simamisha, hifadhi nakala (backup), badilisha server.jar na toleo la build kwa ajili ya toleo jipya la Minecraft, kisha anza. Tahadhari mbili. Upgrades za ulimwengu (world) haziwezi kutenduliwa, ulimwengu uliofunguliwa na toleo jipya hautafunguka kwenye toleo la zamani, hii ni kazi nyingine kwa ajili ya backups. Na plugins mara nyingi huchelewa kufuatia toleo jipya la Minecraft kwa siku au wiki, kwa hivyo hakikisha utangamano kabla ya kukimbilia toleo jipya siku ya kwanza.

Ikiwa ungependelea kusimamia haya yote kama container, kwa kutumia version pinning, kukubali EULA, na flags za kumbukumbu kama environment variables, image ya itzg/minecraft-server inayotumiwa sana huendesha seva hiyo hiyo ya Paper chini ya Docker Compose kwenye VPS yako ikiwa na nidhamu ile ile ya firewall na backup.

FAQ

Minecraft server inahitaji RAM kiasi gani?

2 GB inatosha kuendesha vanilla kwa wachezaji 2–5; 4 GB inafaa kwa seva ya marafiki ya wachezaji kumi hivi kwenye Paper ikiwa na plugins chache; modpacks na wachezaji zaidi ya 20 wanahitaji 8 GB au zaidi. Bila kujali ukubwa wa VPS, weka -Xmx isizidi jumla ya RAM kutoa 1 GB, kwa sababu JVM hutumia kumbukumbu nje ya heap, na kuzidisha kutasababisha Error: Could not reserve enough space for object heap au OOM kill ya kimya kimya.

Kwa nini marafiki zangu hawawezi kuunganisha kwenye Minecraft server yangu?

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

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

Hapana. Kwa online-mode=false seva huruka uthibitishaji wa Mojang kabisa, hivyo mtu yeyote anaweza kujiunga kwa jina lolote, ikiwemo jina la op, na kurithi ruhusa zao, na pia skins pamoja na UUID thabiti hupotea. Matumizi pekee ya halali ni nyuma ya proxy ya uthibitishaji kama Velocity inayothibitisha wachezaji yenyewe. Kwa seva ya kawaida, inapaswa kubaki true.

Je, Paper ni bora kuliko vanilla Minecraft server?

Kwa karibu kila mtu, ndiyo: Paper ni jar inayochukua nafasi ya vanilla, inapakia dunia za vanilla, inakubali clients zisizobadilishwa, inachakata entities na kupakia chunks kwa ufanisi zaidi, na inaongeza mfumo wa plugins. Isipokuwa ni jumuiya za technical-redstone zinazohitaji tabia halisi ya vanilla, ambayo baadhi ya maboresho ya Paper huibadilisha. Kwenye VPS ndogo, ufanisi wa Paper ni sawa na kupata RAM ya ziada bila gharama.

Ninawezaje kuhifadhi backup ya Minecraft world bila kuiharibu?

Usihifadhi saraka ya world wakati seva inaandika humo; nakala inayofanyika wakati faili za region zinaandikwa husababisha chunks zilizoharibika ambazo utazigundua tu wakati wa kurejesha (restore). Aidha simamisha seva, fanya tar ya saraka za world, kisha uianzishe tena, au iache ikiwa hai kwa kutumia save-off, save-all flush, tar, save-on kupitia RCON. Kisha hamisha archive hiyo nje ya VPS.