Cara bina pelayan Minecraft di VPS Ubuntu
Panduan lengkap bina pelayan Paper Minecraft pada Ubuntu 24.04 menggunakan Java 21. Pelajari cara tetapan systemd, buka port 25565, dan buat sandaran dunia.
Apa yang anda bina
Pelayan Minecraft Java Edition yang stabil: Paper pada Ubuntu 24.04, dijalankan sebagai pengguna minecraft khas di bawah systemd dengan Restart=on-failure, senarai putih (whitelist) diaktifkan, port 25565 dibuka pada kedua-dua tembok api antara pemain dan JVM, dan sandaran (backup) diambil tanpa merosakkan dunia yang ingin dilindungi. Pelayan itu sendiri hanyalah satu fail jar dan satu arahan java; segala perkara yang membezakan pelayan yang boleh digunakan oleh rakan anda selama setahun dengan pelayan yang terhenti pada hujung minggu pertama adalah berkaitan dengan arahan tersebut, dan itulah yang akan dibincangkan dalam panduan ini.
Dua amaran penting sebelum anda mengeluarkan wang. Pertama, Minecraft menggunakan banyak memori dan sebahagian besarnya bersifat single-threaded: VPS 1 GB tidak akan dapat menjalankan pelayan yang boleh dimainkan, dan satu teras pantas adalah lebih baik daripada empat teras perlahan. Kedua, ini adalah Java Edition. Pemain Bedrock — konsol, telefon, aplikasi Windows Bedrock — tidak boleh menyertai pelayan Java; Bedrock memerlukan perisian pelayan berbeza pada UDP 19132, atau plugin Geyser, yang tidak termasuk dalam skop panduan ini.
Anda memerlukan VPS Ubuntu 24.04 KVM yang baharu dengan akses root atau sudo, dan masa sekitar tiga puluh minit.
Saiz: keperluan sebenar pelayan rakan anda
RAM adalah angka yang paling penting, dan angka yang jujur adalah lebih rendah daripada apa yang dicadangkan dalam forum modpack:
- 2 GB membolehkan vanilla berjalan untuk 2–5 pemain dengan jarak pandangan yang sederhana. Boleh dimainkan, tetapi tiada ruang tambahan.
- 4 GB adalah saiz pelayan rakan yang selesa: sekitar sepuluh pemain serentak pada Paper dengan beberapa plugin, dan baki yang mencukupi untuk OS.
- 8 GB dan ke atas adalah untuk modpack dan 20+ pemain, di mana anda juga perlu mementingkan kelajuan CPU single-core, kerana gelung permainan utama berjalan pada satu thread.
Saiz dunia juga bertambah pada cakera apabila pemain meneroka — dunia survival yang kerap diteroka boleh mencapai beberapa gigabait — jadi sediakan ruang tambahan untuk dunia dan sandarannya.
Vanilla atau Paper? Paper adalah pengganti terus 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 boleh diubah oleh pengoptimuman Paper; untuk orang lain, Paper memberikan lebih ramai pemain bagi setiap gigabait. Semua perkara di bawah berfungsi untuk kedua-duanya.
Langkah 1: pasang Java 21
Minecraft 1.20.5 dan semua versi selepas itu (semua 1.21.x) memerlukan Java 21. Ubuntu 24.04 menyediakannya dalam repositori lalai, dan binaan headless mengabaikan perpustakaan desktop yang tidak akan digunakan oleh pelayan:
sudo apt update && sudo apt install -y openjdk-21-jre-headless
java -versionKeputusan betul: baris pertama menunjukkan openjdk version "21.0.x". Jika ia menunjukkan 17 atau 11, JRE lain telah dipasang dan sedang digunakan; selesaikan dengan sudo update-alternatives --config java dan pilih entri yang mengandungi java-21.
Melangkau semakan ini akan menyebabkan ralat pelayan Minecraft yang paling kerap dicari di Google kemudiannya. Dengan Java 17, fail jar pelayan akan terhenti serta-merta dengan:
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.0Nombor tersebut menjelaskan ketidakpadanan: versi fail kelas 65.0 adalah Java 21, 61.0 adalah Java 17, 60.0 adalah Java 16. Apa sahaja pasangan yang anda lihat, penyelesaiannya adalah sama — pasang JRE yang lebih baharu dan jalankan semula update-alternatives.
Langkah 2: pengguna khusus, jangan gunakan root
Pelayan akan melaksanakan kod plugin dan memproses input rangkaian daripada sesiapa sahaja yang boleh mengakses port tersebut. Jika berlaku ralat, pencerobohan yang dijalankan sebagai root akan menguasai VPS anda; pencerobohan 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 selepas ini akan dijalankan sebagai pengguna ini.
Langkah 3: muat turun server jar daripada sumber rasmi
Hanya dua tempat sahaja yang boleh membekalkan server jar: halaman muat turun server rasmi di minecraft.net untuk vanilla, atau halaman muat turun di papermc.io untuk Paper. "Hab muat turun" pihak ketiga yang membungkus semula server jar adalah saluran malware yang berlarutan — server jar adalah kod rawak yang akan anda jalankan 24/7 pada pelayan yang terdedah ke internet.
Salin pautan muat turun untuk binaan semasa daripada halaman rasmi (URL berubah bagi setiap versi dan binaan, jadi menetapkan satu URL di sini akan menyebabkan ia tidak lagi sah), 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 milik minecraft, disahkan dengan ls -lh /opt/minecraft/server.jar.
Langkah 4: larian pertama, EULA, dan pemberian akses admin
Jalankan pelayan secara interaktif sekali sebelum menggunakan systemd — larian pertama hanya mempunyai dua tugas yang hanya boleh dilakukan oleh konsol langsung.
cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar noguiIa akan berhenti dalam masa beberapa saat — Paper mengambil masa tambahan sedikit untuk melaksanakan patch — dan log akan berakhir dengan baris yang dihadapi 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; ini adalah sekatan lesen. Larian tersebut telah menulis eula.txt bersebelahan dengan 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.txtJalankan semula arahan java yang sama. Kali ini ia akan 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. Gunakan ia 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 yang disambungkan — anda boleh menjalankan setiap arahan admin dari dalam permainan. Kemudian taip stop untuk menyimpan dan keluar dengan kemas.
Langkah 5: server.properties, dan mengapa online-mode kekal true
Pelaksanaan pertama juga menulis server.properties. Kebanyakan tetapan lalai adalah memadai; baris-baris ini adalah yang perlu diputuskan secara sengaja:
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 menyebabkan pelayan mengesahkan setiap nama pengguna yang menyertai terhadap pelayan sesi Mojang, bagi membuktikan pemain memiliki akaun tersebut. Menetapkannya kepada false — suis "cracked server" — bermaksud pelayan menerima sebarang pengakuan klien tentang identiti mereka: sesiapa sahaja boleh menyertai menggunakan sebarang nama, termasuk nama anda, dan memandangkan ops dan whitelist berasaskan nama, penyamar boleh masuk dengan keizinan operator anda. Satu-satunya sebab sah untuk ia ditetapkan sebagai false adalah di sebalik proksi pengesahan seperti Velocity, yang mengesahkan pemain itu sendiri. Pada pelayan biasa, ia kekal true, titik.
view-distance adalah pemacu prestasi terbesar dalam fail ini — kos CPU dan RAM meningkat secara kasar mengikut kuadratnya. 8 adalah nilai lalai VPS yang munasabah; 10 adalah nilai lalai vanilla dan jauh lebih berat.
white-list=true ditambah dengan enforce-whitelist=true menutup pelayan kepada orang asing, yang mana bahagian keselamatan di bawah menyatakan ia bukan pilihan. Tambah pemain dengan /whitelist add TheirName di dalam permainan sebagai seorang op.
Step 6: bendera memori — mengapa -Xms dan -Xmx perlu sama
JVM memperuntukkan heap di antara -Xms (saiz permulaan) dan -Xmx (had siling). Pada pelayan permainan khusus, tetapkan kedua-duanya pada nilai yang sama: heap akan mencapai had siling juga, dan proses membesarkannya secara berperingkat hanya menambah beban kerja garbage-collector semasa permainan berlangsung. Pada VPS 4 GB, pasangan yang betul ialah:
/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui-Xmx bukan jumlah keseluruhan memori yang digunakan oleh proses tersebut. JVM menambah overhead off-heap — thread stacks, JIT caches, direct buffers — kira-kira setengah gigabait atau lebih, dan Ubuntu juga memerlukan ruang. Peraturan am: -Xmx pada paling banyak RAM VPS ditolak 1 GB. Jika melebihi had, anda akan menghadapi salah satu daripada dua kegagalan. Jika peruntukan gagal pada peringkat awal, pelayan akan gagal bermula dengan:
Error: Could not reserve enough space for object heapRalat ini adalah jelas dan segera. Versi yang lebih buruk bermula dengan baik tetapi terhenti beberapa jam kemudian, apabila heap penuh di bawah beban kerja dan kernel OOM killer memilih proses terbesar pada sistem — iaitu JVM. Tiada apa yang muncul dalam log pelayan; buktinya ada dalam sudo dmesg | grep -i oom, baris seperti Out of memory: Killed process 1234 (java). Jika perkhidmatan anda dimulakan semula secara "rawak", semak di sana terlebih dahulu, dan kurangkan -Xmx.
Untuk Paper, dokumentasi projek mencadangkan Aikar's flags — satu set G1GC yang telah ditala (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 dan beberapa lagi) yang melancarkan jeda garbage-collection pada heap yang lebih besar. Jana baris penuh daripada dokumentasi Paper; pada heap 2–4 GB, peningkatan adalah kecil tetapi bendera tersebut tidak berbahaya.
Langkah 7: unit systemd dengan Restart=on-failure
Pelayan yang dimulakan secara manual akan terhenti apabila sesi SSH anda ditutup dan kekal terhenti 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.targetsudo systemctl daemon-reload
sudo systemctl enable --now minecraft
systemctl status minecraft
journalctl -u minecraft -fHasil yang betul: status menunjukkan active (running), dan jurnal — yang kini mengandungi output konsol pelayan — berakhir pada baris Done semula.
Dua pilihan sengaja dalam unit tersebut. Restart=on-failure memulakan semula pelayan selepas kegagalan tetapi bukan selepas stop yang bersih, supaya penyelenggaraan tetap boleh dilakukan. Dan TimeoutStopSec=120 lebih penting daripada yang dilihat: systemctl stop menghantar SIGTERM, pelayan Minecraft menangkap isyarat tersebut dan menyimpan setiap dunia sebelum keluar, dan bagi dunia yang besar, proses simpanan itu mengambil masa. Masa tamat (timeout) lalai systemd boleh menghantar SIGKILL kepada JVM semasa proses simpanan sedang berjalan, dan itulah punca fail region rosak. Berikan masa dua minit.
Jika perkhidmatan mengalami kegagalan berulang (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 sedang menggunakan port 25565 — hampir selalunya ia adalah sesi foreground terdahulu yang masih hidup dalam sesi SSH lain. Cari ia dengan sudo ss -tlnp | grep 25565 dan hentikan salinan tersebut; jangan sesekali menjalankan dua pelayan pada satu port yang sama.
Step 8: buka 25565 pada kedua-dua firewall
Minecraft Java hanya menggunakan TCP 25565 (UDP hanyalah protokol query pilihan, ditutup secara lalai). Pada VPS:
sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enableItu adalah firewall pertama. Kebanyakan penyedia VPS menjalankan firewall kedua pada peringkat rangkaian di dalam panel kawalan, dan ini sering dilupakan. Buka TCP 25565 di sana juga. Simptom jika hanya satu firewall dibuka adalah sangat tidak spesifik: klien akan tersekat pada "Connecting to the server..." dan gagal dengan Connection timed out: no further information — tiada penolakan, tiada ralat pelayan, tiada rekod dalam journal, kerana paket tidak pernah sampai. Sahkan dari mesin luar VPS dengan nc -vz your.server.ip 25565; succeeded bermaksud kedua-dua firewall telah dibuka, manakala kegagalan sambungan bermaksud sekurang-kurangnya satu firewall masih tertutup.
Semasa anda menggunakan ufw, mesin yang sama menjalankan SSH pada IP awam, dan log serangan brute-force akan bermula dalam masa beberapa jam — set up Fail2ban for SSH on Ubuntu 24.04 sebelum anda terlupa.
Sekarang sambung: Multiplayer, Direct Connection, alamat IP pelayan. Kerana anda telah memberikan hak akses pada langkah 4, arahan dalam permainan boleh digunakan serta-merta — /whitelist add FriendName untuk setiap pemain, /gamemode creative jika itu adalah rancangan anda.
Langkah 9: whitelist, kerana internet mengesan port 25565
Membuka pelayan Minecraft kepada internet adalah risiko nyata: pengimbas pukal menyisir seluruh ruang IPv4 untuk port 25565 secara berterusan — projek gangguan hobi telah memetakan ratusan ribu pelayan terbuka melalui cara ini — dan pelayan tanpa whitelist akan menerima pelawat yang tidak diundang dalam masa beberapa hari, malah kadangkala beberapa jam. Whitelist daripada langkah 5 adalah penyelesaiannya: online-mode=true mengesahkan identiti, manakala whitelist mengehadkan kemasukan kepada identiti yang anda pilih. Pasangan tersebut adalah keseluruhan model keselamatan, dan ia sudah memadai untuk pelayan rakan-rakan.
Untuk akses konsol tanpa permainan — sandaran skrip, tugasan cron — aktifkan RCON dalam server.properties (enable-rcon=true, rcon.password yang kuat, port 25575) dan bina klien mcrcon yang kecil daripada sumber GitHub pada VPS itu sendiri; ia tidak terdapat dalam repositori Ubuntu. Jangan buka 25575 dalam mana-mana firewall: RCON menghantar kata laluan dalam teks biasa, jadi ia mesti kekal dalam loopback-only sahaja.
Langkah 10: sandaran yang tidak merosakkan dunia
Satu peraturan utama: jangan sesekali menyalin direktori dunia semasa pelayan sedang menulis data. Fail region ditulis semula secara berterusan semasa sesi permainan; tar yang bertembung dengan proses penulisan akan menghasilkan arkib dengan chunk yang tidak lengkap. Apabila anda memulihkan sandaran tersebut — iaitu waktu kritikal sandaran mesti berfungsi — log akan dipenuhi ralat pemuatan chunk dan muka bumi akan mempunyai lubang. Dua kaedah boleh mengelakkan masalah ini.
Stop-copy-start adalah kaedah yang mudah, tetapi memerlukan masa henti (downtime) selama satu minit:
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 membahagikan dimensi kepada world, world_nether, dan world_the_end; pelayan vanilla menyimpan semua data dalam world, jadi pindahkan dua dimensi lain ke sana.)
Save-off melakukan sandaran secara langsung: melalui RCON, jalankan save-off (hentikan autosaver), kemudian save-all flush (paksa semua data ditulis ke disk dan tunggu), ambil fail tar, kemudian save-on. Ini adalah versi yang sesuai untuk diletakkan dalam cron pada jam 5 pagi.
Dalam kedua-dua kaedah, sandaran yang disimpan pada VPS yang sama dengan pelayan bukanlah sandaran yang selamat — scp atau rclone arkib tersebut keluar dari pelayan, dan simpan lebih daripada satu salinan. Memandangkan anda tidak akan memantau konsol apabila berlaku kerosakan, letakkan semakan luaran pada port: Uptime Kuma pada kotak lain yang melakukan semakan TCP terhadap 25565 akan memberitahu anda jika pelayan terhenti sebelum pemain anda menyedarinya.
Plugins dan naik taraf
Pada Paper, plugin ialah fail jar yang dimasukkan ke dalam /opt/minecraft/plugins/ dan diikuti dengan pemulaan semula — itu sahaja proses pemasangannya. Dapatkan plugin hanya daripada halaman projek rasmi mereka (Hangar, Modrinth, SpigotMC). Ini penting kerana setiap plugin ialah kod rawak yang berjalan sebagai pengguna minecraft.
Proses menaik taraf pelayan adalah: hentikan pelayan, buat sandaran, ganti server.jar dengan binaan untuk versi Minecraft baharu, kemudian mulakan pelayan. Terdapat dua perkara yang perlu diperhatikan. Naik taraf dunia adalah sehala — dunia yang dibuka oleh versi baharu tidak akan boleh dibuka dalam versi lama, jadi sandaran adalah sangat penting. Selain itu, plugin sering lewat beberapa hari atau minggu daripada pelancaran Minecraft yang baharu, jadi semak keserasakan sebelum menggunakan versi baharu pada hari pertama.
Jika anda lebih suka menguruskan semua ini sebagai kontena — seperti penetapan versi, penerimaan EULA, dan bendera 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 tembok api dan sandaran yang serupa.
FAQ
Berapakah RAM yang diperlukan untuk pelayan Minecraft?
2 GB sudah memadai untuk vanilla bagi 2–5 pemain; 4 GB adalah selesa untuk pelayan rakan-rakan sekitar sepuluh pemain menggunakan Paper dengan beberapa plugin; modpacks dan 20+ pemain memerlukan 8 GB atau lebih. Berdasarkan saiz VPS anda, tetapkan -Xmx kepada jumlah RAM tolak 1 GB — JVM menggunakan memori tambahan di luar heap, dan jika berlebihan akan menyebabkan Error: Could not reserve enough space for object heap atau OOM kill secara senyap.
Mengapa rakan saya tidak dapat menyambung ke pelayan Minecraft saya?
Kegagalan sambungan client yang berakhir dengan Connection timed out: no further information hampir selalunya disebabkan oleh firewall, dan terdapat dua firewall: ufw pada VPS dan firewall rangkaian pembekal anda di panel kawalan. TCP 25565 mesti dibuka pada kedua-duanya. Sahkan pelayan sedang mendengar dengan sudo ss -tlnp | grep 25565 pada mesin tersebut, kemudian uji dari luar dengan nc -vz your.server.ip 25565.
Patutkah saya menetapkan online-mode=false dalam server.properties?
Tidak. Dengan online-mode=false, pelayan akan melangkau pengesahan Mojang sepenuhnya, jadi sesiapa sahaja boleh menyertai menggunakan mana-mana nama pengguna — termasuk nama op, yang akan mewarisi kebenaran mereka — serta skin dan UUID stabil akan rosak. Satu-satunya kegunaan sah adalah di belakang proxy pengesahan seperti Velocity yang mengesahkan pemain sendiri. Untuk pelayan biasa, ia harus kekal true.
Adakah Paper lebih baik daripada pelayan Minecraft vanilla?
Untuk hampir semua orang, ya: Paper adalah jar yang boleh digunakan terus untuk memuatkan dunia vanilla, menerima client tanpa modifikasi, mengurus tick entiti dan memuatkan chunk dengan jauh lebih cekap, serta menambah ekosistem plugin. Pengecualian adalah komuniti technical-redstone yang memerlukan tingkah laku vanilla yang tepat, yang mana sesetengah pengoptimuman Paper akan mengubahnya. Pada VPS kecil, kecekapan Paper memberikan tambahan RAM secara percuma.
Bagaimanakah cara untuk membuat sandaran dunia Minecraft tanpa merosakkannya?
Jangan sesekali mengarkibkan direktori dunia semasa pelayan sedang menulis ke dalamnya — salinan yang bertindih dengan penulisan fail region akan menghasilkan chunk yang rosak yang hanya dikesan semasa pemulihan. Sama ada hentikan pelayan, tar direktori dunia, dan mulakan semula, atau biarkan ia aktif dengan save-off, save-all flush, tar, save-on melalui RCON. Kemudian pindahkan arkib tersebut keluar dari VPS.