SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-08-07

Cara Bina Pelayan Minecraft Paper di VPS Ubuntu 24.04

Panduan lengkap menyediakan pelayan Minecraft Paper pada VPS Ubuntu 24.04. Ketahui keperluan RAM, konfigurasi Java 21, tetapan systemd, firewall port 25565 dan sandaran.

Apa yang anda sedang bina

Sebuah pelayan Minecraft Java Edition yang sentiasa aktif: Paper pada Ubuntu 24.04, dijalankan sebagai pengguna minecraft khusus di bawah systemd dengan Restart=on-failure, senarai putih (whitelist) diaktifkan, port 25565 dibuka pada kedua-dua firewall yang berada di antara pemain anda dan JVM, serta sandaran yang diambil dengan cara yang tidak merosakkan dunia yang ingin dilindungi. Pelayan itu sendiri terdiri daripada satu fail jar dan satu arahan java; segala perkara yang membezakan pelayan yang dimainkan oleh rakan anda selama setahun dengan pelayan yang gagal pada hujung minggu pertama terletak di sekitar arahan tersebut, dan itulah yang diliputi oleh panduan ini.

Dua amaran jujur sebelum anda membelanjakan wang. Pertama, Minecraft sangat dahagakan memori dan kebanyakannya menggunakan satu teras (single-threaded): VPS 1 GB tidak akan dapat menjalankan pelayan yang boleh dimainkan, dan satu teras yang pantas adalah lebih baik daripada empat teras yang perlahan. Kedua, ini adalah Java Edition. Pemain Bedrock, konsol, telefon, aplikasi Windows Bedrock, tidak boleh menyertai pelayan Java; Bedrock memerlukan perisian pelayan yang berbeza pada UDP 19132, atau plugin Geyser, yang berada di luar skop panduan ini.

Anda memerlukan VPS KVM Ubuntu 24.04 yang baharu dengan akses root atau sudo, dan kira-kira tiga puluh minit.

Saiz: keperluan sebenar pelayan untuk rakan-rakan

RAM ialah angka yang paling penting, dan angka sebenar adalah lebih rendah daripada yang dicadangkan oleh forum modpack:

  • 2 GB boleh menjalankan vanilla untuk 2–5 pemain pada jarak pandangan (view distance) yang sederhana. Boleh dimainkan, tetapi tiada ruang tambahan.
  • 4 GB ialah saiz yang selesa untuk pelayan rakan-rakan: sekitar sepuluh pemain serentak pada Paper dengan beberapa plugin, dan baki yang mencukupi untuk OS.
  • 8 GB ke atas adalah untuk modpack dan lebih daripada 20 pemain, di mana anda juga perlu mementingkan kelajuan CPU teras tunggal, kerana gelung permainan utama berjalan pada satu thread.

Dunia permainan juga akan membesar pada cakera apabila pemain meneroka, dunia survival yang kerap dilawati boleh mencapai beberapa gigabait, jadi sediakan ruang tambahan untuk dunia tersebut dan sandarannya.

Vanilla atau Paper? Paper ialah pengganti terus (drop-in replacement) untuk jar rasmi: dunia yang sama, klien yang sama, tiada mod sebelah klien diperlukan. Ia menulis semula laluan pelayan yang paling perlahan, pemuatan chunk, ticking entiti, hopper, dan menambah API plugin. Satu-satunya sebab untuk menjalankan vanilla adalah jika anda memerlukan mekanik vanilla yang tepat untuk ladang redstone teknikal yang mungkin diubah oleh pengoptimuman Paper; bagi pengguna lain, Paper membolehkan lebih ramai pemain bagi setiap gigabait. Semua yang dinyatakan di bawah berfungsi untuk kedua-duanya.

Langkah 1: pasang Java 21

Minecraft 1.20.5 dan setiap keluaran selepasnya (semua versi 1.21.x) memerlukan Java 21. Ubuntu 24.04 menyertakan Java 21 dalam repositori lalai, dan binaan headless tidak menyertakan pustaka desktop yang tidak diperlukan oleh pelayan:

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

Hasil yang betul: baris pertama memaparkan openjdk version "21.0.x". Jika ia memaparkan 17 atau 11, JRE lain telah dipasang dan sedang digunakan; betulkan dengan sudo update-alternatives --config java dan pilih entri yang mengandungi java-21.

Mengabaikan semakan ini akan menyebabkan ralat pelayan Minecraft yang paling kerap dicari di Google. Dengan Java 17, fail jar pelayan akan terhenti serta-merta dengan ralat:

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

Nombor tersebut menunjukkan ketidakpadanan versi: class file version 65.0 ialah Java 21, 61.0 ialah Java 17, 60.0 ialah Java 16. Walau apa pun pasangan nombor yang anda lihat, penyelesaiannya tetap sama, pasang JRE yang lebih baharu dan jalankan semula update-alternatives.

Langkah 2: pengguna khusus, bukan root

Pelayan melaksanakan kod pemalam dan menghuraikan input rangkaian daripada sesiapa sahaja yang boleh mencapai port tersebut. Jika berlaku kegagalan, penggodaman yang dijalankan sebagai root akan menguasai VPS anda; manakala penggodaman yang dijalankan sebagai minecraft hanya menguasai dunia permainan.

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

--system mencipta akaun tanpa kata laluan yang tidak boleh log masuk melalui SSH, dengan /opt/minecraft sebagai direktori rumah dan direktori kerja. Setiap arahan yang menyentuh pelayan dari sini dan seterusnya dijalankan sebagai pengguna ini.

Langkah 3: muat turun fail jar pelayan daripada sumber rasmi

Hanya dua lokasi yang sepatutnya anda gunakan untuk mendapatkan fail jar pelayan: halaman muat turun pelayan rasmi di minecraft.net untuk versi vanilla, dan halaman muat turun di papermc.io untuk Paper. "Hab muat turun" pihak ketiga yang membungkus semula fail jar pelayan merupakan saluran perisian hasad yang telah lama wujud; fail jar pelayan ialah kod arbitrari yang akan anda jalankan 24/7 pada mesin yang terdedah kepada internet.

Salin pautan muat turun untuk binaan semasa daripada halaman rasmi (URL berubah mengikut setiap versi dan binaan, jadi menetapkan satu pautan di sini akan menyebabkan pautan tersebut menjadi lapuk), kemudian:

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

Hasil yang betul: sebuah server.jar bersaiz kira-kira 50 MB yang dimiliki oleh minecraft, disahkan dengan ls -lh /opt/minecraft/server.jar.

Langkah 4: pelaksanaan pertama, EULA, dan memberikan status op kepada diri sendiri

Jalankan pelayan secara interaktif sekali sebelum menyentuh systemd, pelaksanaan pertama mempunyai dua tugas yang hanya boleh dilakukan dengan baik oleh konsol langsung.

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

Ia akan berhenti dalam beberapa saat, Paper mengambil masa beberapa saat tambahan untuk menggunakan patchnya terlebih dahulu, dan log berakhir dengan baris yang ditemui oleh semua orang:

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

Ini bukan ralat; ia adalah sekatan lesen. Pelaksanaan tersebut menulis eula.txt di sebelah fail jar. Baca EULA yang dipautkan jika anda belum membacanya, kemudian tukar flag tersebut:

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

Jalankan arahan java yang sama sekali lagi. Kali ini ia menjana dunia, mengambil masa satu atau dua minit pada but pertama, dan berhenti pada:

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

Anda kini mempunyai konsol langsung. Gunakannya untuk tugas kedua: taip op YourMinecraftName (nama pengguna dalam permainan anda yang tepat) dan pelayan akan menulis anda ke dalam ops.json, supaya kemudian, apabila tiada konsol disambungkan, anda boleh menjalankan setiap arahan pentadbir dari dalam permainan. Kemudian taip stop untuk menyimpan dan keluar dengan sempurna.

Langkah 5: server.properties, dan sebab online-mode perlu kekal true

Jalankan kali pertama juga menulis server.properties. Kebanyakan tetapan lalai adalah memadai; baris-baris ini adalah yang perlu diputuskan dengan teliti:

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 memastikan pelayan mengesahkan setiap nama pengguna yang menyertai melalui pelayan sesi Mojang, bagi membuktikan pemain tersebut memiliki akaun berkenaan. Menetapkannya kepada false, iaitu togol "cracked server", bermakna pelayan akan mempercayai sesiapa sahaja yang menyambung: sesiapa pun boleh menyertai menggunakan sebarang nama, termasuk nama anda, dan memandangkan status op serta senarai putih (whitelist) ditentukan berdasarkan nama, penyamar boleh masuk dengan kebenaran operator anda. Satu-satunya alasan sah untuk menetapkannya kepada false adalah apabila berada di belakang proksi pengesahan seperti Velocity, yang melakukan pengesahan pemain itu sendiri. Pada pelayan biasa, tetapan ini mesti kekal true, titik.

view-distance merupakan tuil prestasi paling utama dalam fail ini, di mana penggunaan CPU dan RAM meningkat secara kasar mengikut kuasa dua nilainya. 8 adalah nilai lalai yang munasabah untuk VPS; 10 adalah nilai lalai vanilla dan terasa lebih berat.

white-list=true serta enforce-whitelist=true menutup pelayan daripada orang asing, yang mana bahagian keselamatan di bawah menegaskan bahawa ia bukanlah pilihan. Tambah pemain dengan /whitelist add TheirName dalam permainan sebagai op.

Langkah 6: flag memori, sebab -Xms dan -Xmx perlu sama

JVM memperuntukkan heap antara -Xms (saiz permulaan) dan -Xmx (had maksimum). Pada pelayan permainan khusus, tetapkan nilai tersebut kepada nilai yang sama: heap akan mencapai had maksimum juga, dan proses pembesaran secara berperingkat hanya menambah beban garbage-collector semasa permainan berlangsung. Pada VPS 4 GB, pasangan yang sesuai ialah:

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

-Xmx bukan jumlah memori yang digunakan oleh proses tersebut. JVM menambah overhead di luar heap, thread stack, cache JIT, dan buffer terus, yang berjumlah kira-kira setengah gigabait atau lebih, dan Ubuntu sendiri memerlukan ruang. Peraturan praktikal: -Xmx maksimum ialah RAM VPS tolak 1 GB. Jika anda melebihi had ini, salah satu daripada dua kegagalan akan berlaku. Jika peruntukan gagal pada peringkat awal, pelayan enggan bermula dengan ralat:

Error: Could not reserve enough space for object heap

Ralat tersebut adalah jelas dan serta-merta. Versi yang lebih buruk ialah pelayan bermula dengan baik tetapi terhenti beberapa jam kemudian, apabila heap penuh di bawah beban dan OOM killer kernel memilih proses terbesar pada mesin tersebut, iaitu JVM. Tiada apa-apa yang muncul dalam log pelayan; bukti tersebut berada dalam sudo dmesg | grep -i oom, satu baris seperti Out of memory: Killed process 1234 (java). Jika servis anda dimulakan semula secara "rawak", periksa fail tersebut dahulu, dan rendahkan -Xmx.

Untuk Paper, projek tersebut mendokumentasikan Aikar's flags, satu set G1GC yang ditala (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 dan sedozen flag lain) yang melancarkan jeda garbage-collection pada heap yang lebih besar. Jana baris penuh daripada dokumentasi Paper; pada heap 2–4 GB, peningkatan yang diperoleh adalah sederhana tetapi flag tersebut tidak mendatangkan mudarat.

Langkah 7: unit systemd dengan Restart=on-failure

Pelayan yang dimulakan secara manual akan mati apabila sesi SSH anda tamat dan tidak akan berjalan semula selepas but semula. Tulis /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

Hasil yang betul: status menunjukkan active (running), dan jurnal, yang kini membawa output konsol pelayan, berakhir pada baris Done sekali lagi.

Terdapat dua pilihan sengaja dalam unit tersebut. Restart=on-failure memulakan semula pelayan selepas ranap tetapi tidak selepas stop yang bersih, jadi penyelenggaraan masih boleh dilakukan. Dan TimeoutStopSec=120 adalah lebih penting daripada yang kelihatan: systemctl stop menghantar SIGTERM, pelayan Minecraft menangkap isyarat tersebut dan menyimpan setiap dunia sebelum keluar, dan pada dunia yang besar, proses simpanan ini mengambil masa. Had masa lalai systemd boleh menghantar SIGKILL kepada JVM semasa proses simpanan sedang berjalan, yang merupakan punca fail rantau (region files) menjadi rosak. Berikan masa selama dua minit.

Jika servis tersebut berkelip (flapping) dan jurnal menunjukkan:

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

maka sesuatu sudah pun menggunakan port 25565, selalunya disebabkan oleh proses yang anda jalankan di latar depan dalam sesi SSH lain yang masih aktif. Cari proses tersebut dengan sudo ss -tlnp | grep 25565 dan hentikan salinan itu; jangan sekali-kali menjalankan dua pelayan pada satu port yang sama.

Langkah 8: buka port 25565 pada kedua-dua firewall

Minecraft Java hanya menggunakan TCP 25565 (UDP hanyalah protokol pertanyaan pilihan, yang dinyahaktifkan secara lalai). Pada VPS:

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

Itu adalah firewall pertama. Kebanyakan penyedia VPS menjalankan firewall kedua di peringkat rangkaian dalam panel kawalan, dan itulah yang sering dilupakan oleh pengguna. Buka TCP 25565 di sana juga. Gejala jika hanya membuka salah satu daripada dua firewall tersebut sangat mengelirukan: klien akan terhenti pada "Connecting to the server..." dan gagal dengan Connection timed out: no further information, tiada penolakan, tiada ralat pelayan, dan tiada apa-apa dalam journal, kerana paket tidak pernah sampai. Sahkan daripada mesin di luar VPS dengan nc -vz your.server.ip 25565; succeeded bermaksud kedua-dua firewall telah dibuka, manakala jika ia terhenti, bermakna sekurang-kurangnya satu daripadanya belum dibuka.

Semasa anda berada dalam ufw, kotak yang sama sedang menjalankan SSH pada IP awam, dan gangguan log brute-force akan bermula dalam masa beberapa jam, sediakan Fail2ban untuk SSH pada Ubuntu 24.04 sebelum anda terlupa.

Sekarang sambungkan: Multiplayer, Direct Connection, masukkan IP pelayan. Oleh kerana anda telah memberikan status op kepada diri sendiri dalam langkah 4, arahan dalam permainan akan berfungsi serta-merta, /whitelist add FriendName untuk setiap pemain, /gamemode creative jika itu adalah perancangannya.

Langkah 9: senarai putih, kerana internet mengesan port 25565

Membiarkan pelayan Minecraft terbuka kepada internet bukanlah risiko teori semata-mata: pengimbas massa sentiasa menyemak keseluruhan ruang IPv4 untuk port 25565 secara berterusan, projek gangguan oleh pihak tidak bertanggungjawab telah memetakan ratusan ribu pelayan terbuka dengan cara ini, dan pelayan tanpa senarai putih akan menerima pelawat yang tidak diundang dalam masa beberapa hari, kadangkala beberapa jam sahaja. Senarai putih daripada langkah 5 adalah penyelesaiannya: online-mode=true membuktikan identiti, manakala senarai putih mengehadkan kemasukan kepada identiti yang anda pilih. Pasangan itu merupakan keseluruhan model keselamatan, dan ia mencukupi untuk pelayan rakan-rakan.

Untuk akses konsol tanpa permainan, sandaran berskrip, atau cron job, aktifkan RCON dalam server.properties (enable-rcon=true, rcon.password yang kuat, port 25575) dan bina klien mcrcon kecil daripada sumber GitHub pada VPS itu sendiri; ia tidak terdapat dalam repositori Ubuntu. Jangan buka port 25575 dalam mana-mana firewall: RCON menghantar kata laluan dalam teks jelas (cleartext), jadi ia mesti kekal terhad kepada loopback sahaja.

Langkah 10: sandaran yang tidak merosakkan dunia

Satu peraturan utama: jangan sesekali menyalin direktori dunia semasa pelayan sedang menulisnya. Fail rantau (region files) ditulis semula secara berterusan semasa permainan berlangsung; tar yang berlumba dengan proses penulisan akan menghasilkan arkib dengan ketulan (chunks) yang tidak lengkap. Apabila anda memulihkan sandaran tersebut—saat yang paling kritikal—log akan dipenuhi dengan ralat pemuatan ketulan dan rupa bumi akan mempunyai lubang. Dua disiplin berikut dapat mengelakkan perkara ini.

Henti-salin-mula adalah kaedah paling mudah, dengan kos satu minit waktu henti:

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 memisahkan dimensi kepada world, world_nether, dan world_the_end; pelayan vanilla menyimpan segala-galanya dalam world, jadi abaikan dua yang lain di sana.)

Save-off melakukan sandaran secara langsung: melalui RCON, jalankan save-off (hentikan penyimpan automatik), kemudian save-all flush (paksa semua data ke cakera dan tunggu), ambil fail tar, kemudian save-on. Ini adalah versi yang perlu diletakkan dalam cron pada pukul 5 pagi.

Walau apa pun caranya, sandaran yang disimpan pada VPS yang sama dengan pelayan bukanlah sandaran sebenar. scp atau rclone arkib tersebut keluar dari pelayan, dan simpan lebih daripada satu salinan. Memandangkan anda tidak akan sentiasa memantau konsol apabila berlaku kerosakan, letakkan pemeriksaan luaran pada port tersebut: Uptime Kuma pada mesin lain yang melakukan pemeriksaan TCP terhadap 25565 akan memberitahu anda bahawa pelayan terhenti sebelum pemain anda menyedarinya.

Pemalam dan naik taraf

Pada Paper, pemalam ialah fail jar yang diletakkan ke dalam /opt/minecraft/plugins/ diikuti dengan mulakan semula, itu sahaja proses pemasangannya. Dapatkan pemalam hanya daripada halaman projek rasmi mereka (Hangar, Modrinth, SpigotMC), atas sebab yang sama seperti fail jar pelayan: setiap satunya adalah kod arbitrari yang dijalankan sebagai pengguna minecraft.

Naik taraf pelayan dilakukan dengan cara: hentikan, buat sandaran, gantikan server.jar dengan binaan untuk versi Minecraft baharu, kemudian mulakan semula. Dua perkara perlu diberi perhatian. Naik taraf dunia adalah sehala, dunia yang dibuka oleh versi lebih baharu tidak akan dapat dibuka dalam versi lebih lama, yang merupakan satu lagi sebab pentingnya sandaran. Selain itu, pemalam sering ketinggalan beberapa hari atau minggu selepas keluaran Minecraft baharu, jadi semak keserasian sebelum mengejar keluaran pada hari pertama.

Jika anda lebih suka mengurus semua ini sebagai kontena, dengan penetapan versi, penerimaan EULA, dan flag memori sebagai pemboleh ubah persekitaran, imej itzg/minecraft-server yang digunakan secara meluas menjalankan pelayan Paper yang sama di bawah Docker Compose pada VPS anda dengan disiplin firewall dan sandaran yang sama.

FAQ

Berapakah jumlah RAM yang diperlukan oleh pelayan Minecraft?

2 GB RAM mencukupi untuk menjalankan versi vanilla bagi 2–5 pemain; 4 GB adalah selesa untuk pelayan rakan-rakan dengan kira-kira sepuluh pemain menggunakan Paper serta beberapa plugin; modpack dan lebih daripada 20 pemain memerlukan 8 GB atau lebih. Walau apa pun saiz VPS, tetapkan -Xmx kepada maksimum jumlah RAM tolak 1 GB, kerana JVM menggunakan memori di luar heap, dan jika melebihi had ini, ia akan menyebabkan Error: Could not reserve enough space for object heap atau OOM kill secara senyap.

Mengapa rakan saya tidak boleh menyambung ke pelayan Minecraft saya?

Kegagalan klien yang berakhir dengan Connection timed out: no further information hampir selalu disebabkan oleh firewall, dan terdapat dua jenis: ufw pada VPS dan firewall rangkaian pembekal anda di dalam panel kawalan. Port TCP 25565 mesti dibuka pada kedua-duanya. Sahkan bahawa pelayan benar-benar mendengar pada port tersebut dengan sudo ss -tlnp | grep 25565 di dalam pelayan, kemudian uji dari luar menggunakan nc -vz your.server.ip 25565.

Patutkah saya menetapkan online-mode=false dalam server.properties?

Tidak. Dengan online-mode=false, pelayan melangkau pengesahan Mojang sepenuhnya, jadi sesiapa sahaja boleh menyertai di bawah mana-mana nama pengguna, termasuk nama op, yang akan mewarisi kebenaran mereka, selain itu skin dan UUID yang stabil akan rosak. Satu-satunya kegunaan yang sah adalah di belakang proksi pengesahan seperti Velocity yang mengesahkan pemain itu sendiri. Untuk pelayan biasa, tetapan ini mesti kekal true.

Adakah Paper lebih baik daripada pelayan Minecraft vanilla?

Bagi hampir semua orang, ya: Paper ialah fail jar gantian yang memuatkan dunia vanilla, menerima klien yang tidak diubah suai, memproses entiti dan memuatkan chunk dengan jauh lebih cekap, serta menambah ekosistem plugin. Pengecualian adalah komuniti redstone teknikal yang memerlukan tingkah laku vanilla yang tepat, yang mungkin diubah oleh beberapa pengoptimuman Paper. Pada VPS kecil, kecekapan Paper secara berkesan memberikan RAM tambahan secara percuma.

Bagaimanakah cara untuk membuat sandaran dunia Minecraft tanpa merosakkannya?

Jangan sekali-kali mengarkibkan direktori dunia semasa pelayan sedang menulis ke dalamnya, kerana salinan yang bertindih dengan penulisan fail region akan menghasilkan chunk yang rosak yang hanya akan ditemui semasa proses pemulihan. Sama ada hentikan pelayan, tar direktori dunia, dan mulakan semula, atau kekalkan pelayan dalam talian dengan save-off, save-all flush, tar, dan save-on melalui RCON. Kemudian, pindahkan arkib tersebut keluar dari VPS.