Cara Membuat Server Minecraft di VPS Ubuntu 24.04
Pelajari cara menjalankan server Paper Minecraft di VPS Ubuntu 24.04, termasuk kebutuhan RAM, Java 25, systemd, firewall port 25565, dan pencadangan world.
Yang Anda bangun
Server Minecraft Java Edition yang tetap aktif: Paper pada Ubuntu 24.04, berjalan sebagai pengguna khusus minecraft di bawah systemd dengan Restart=on-failure, whitelist diaktifkan, port 25565 dibuka di ufw dan firewall jaringan penyedia Anda jika tersedia, serta pencadangan dilakukan dengan cara yang tidak merusak world yang ingin dilindungi. Server ini sendiri terdiri dari satu jar dan satu perintah java. Semua hal yang membedakan server yang dimainkan teman-teman Anda selama setahun dari server yang mati pada akhir pekan pertama berkaitan dengan perintah tersebut. Hal itulah yang dibahas dalam panduan ini.
Ada dua peringatan penting sebelum Anda mengeluarkan biaya. Pertama, Minecraft membutuhkan banyak memori dan sebagian besar prosesnya berjalan pada satu thread: VPS 1 GB tidak akan dapat menjalankan server yang nyaman dimainkan, dan satu core cepat lebih baik daripada empat core lambat. Kedua, ini adalah Java Edition. Pemain Bedrock, konsol, ponsel, dan aplikasi Windows Bedrock tidak dapat bergabung ke server Java. Bedrock memerlukan perangkat lunak server yang berbeda pada UDP 19132, atau plugin Geyser, yang berada di luar cakupan panduan ini.
Anda memerlukan KVM VPS Ubuntu 24.04 baru dengan akses root atau sudo, serta waktu sekitar tiga puluh menit.
Ukuran: kebutuhan nyata server untuk teman
RAM adalah faktor yang paling penting. Angka yang realistis lebih rendah daripada yang biasanya disarankan di forum modpack:
- 2 GB dapat menjalankan vanilla untuk 2–5 pemain pada jarak tampilan sedang. Masih dapat dimainkan, tetapi tanpa ruang cadangan.
- 4 GB adalah ukuran yang nyaman untuk server teman: sekitar sepuluh pemain bersamaan pada Paper dengan beberapa plugin, serta masih menyisakan cukup RAM untuk OS.
- 8 GB dan lebih cocok untuk modpack dan lebih dari 20 pemain. Pada kondisi ini, Anda juga perlu memperhatikan kecepatan CPU single-core karena loop utama game berjalan pada satu thread.
Ukuran world juga bertambah di disk saat pemain menjelajah. World survival yang sering dijelajahi dapat mencapai beberapa gigabyte. Karena itu, sisakan ruang untuk world dan backup-nya.
Vanilla atau Paper? Paper adalah pengganti drop-in untuk jar resmi: world dan client tetap sama, serta tidak memerlukan mod pada sisi client. Paper menulis ulang jalur server yang paling lambat, termasuk pemuatan chunk, pemrosesan entity, dan hopper, serta menambahkan API plugin. Satu-satunya alasan untuk menjalankan vanilla adalah jika Anda memerlukan mekanisme vanilla yang identik hingga tingkat bit untuk farm redstone teknis yang dapat terpengaruh oleh optimisasi Paper. Untuk pengguna lain, Paper dapat mendukung lebih banyak pemain dengan jumlah gigabyte yang sama. Semua langkah di bawah ini berlaku untuk keduanya.
Langkah 1: instal Java 25
Minecraft 26.1 dan setiap rilis setelahnya memerlukan Java 25; Java 21 hanya mendukung lini 1.20 hingga 1.21.11 yang lebih lama. Ubuntu 24.04 menyediakan Java 25 melalui repositori updates dan security. Instal JRE lengkap, bukan build -headless: panduan instalasi Java Paper memperingatkan agar tidak menggunakan varian headless karena varian tersebut tidak menyertakan dependensi yang diperlukan Paper.
sudo apt update && sudo apt install -y openjdk-25-jre
java -versionHasil yang benar: baris pertama berbunyi openjdk version "25.0.x". Jika hasilnya 21, 17, atau 11, JRE lain sedang terinstal dan menjadi pilihan utama; perbaiki dengan sudo update-alternatives --config java, lalu pilih entri yang berisi java-25.
Jika pemeriksaan ini dilewati, Anda akan mengalami error server Minecraft yang paling sering dicari di Google. Dengan Java 21, server jar langsung berhenti dengan pesan:
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 69.0),
this version of the Java Runtime only recognizes class file versions up to 65.0Angka-angka tersebut menunjukkan ketidakcocokan: versi class file 69.0 adalah Java 25, 65.0 adalah Java 21, dan 61.0 adalah Java 17. Apa pun pasangan yang muncul, perbaikannya sama: instal JRE yang lebih baru, lalu jalankan kembali update-alternatives.
Langkah 2: gunakan user khusus, jangan pernah root
Server mengeksekusi kode plugin dan memproses input jaringan dari siapa pun yang dapat mengakses port tersebut. Jika terjadi masalah, kompromi yang berjalan sebagai root akan menguasai VPS Anda; kompromi yang berjalan sebagai minecraft hanya akan menguasai dunia game.
sudo adduser --system --group --home /opt/minecraft minecraft--system membuat akun tanpa kata sandi yang tidak dapat login melalui SSH, dengan /opt/minecraft sebagai direktori home dan direktori kerja. Mulai dari sini, setiap perintah yang berinteraksi dengan server dijalankan sebagai user ini.
Langkah 3: unduh server jar dari sumber resmi
Hanya dua tempat yang boleh menyediakan server jar: halaman unduhan server resmi di minecraft.net untuk vanilla, dan halaman unduhan di papermc.io untuk Paper. “Pusat unduhan” pihak ketiga yang mengemas ulang server jar merupakan saluran malware yang telah lama digunakan. Server jar berisi kode arbitrer yang akan Anda jalankan 24/7 pada server yang terhubung ke Internet.
Salin tautan unduhan untuk build saat ini dari halaman resmi tersebut. URL berubah pada setiap versi dan build, sehingga tidak tepat jika ditulis secara hardcode di sini. Kemudian:
cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'Hasil yang benar: sebuah server.jar berukuran sekitar 60 MB yang dimiliki oleh minecraft, dikonfirmasi dengan ls -lh /opt/minecraft/server.jar.
Langkah 4: menjalankan pertama kali, EULA, dan memberikan hak operator kepada diri sendiri
Jalankan server secara interaktif satu kali sebelum menyentuh systemd. Proses pertama ini memiliki dua tujuan yang hanya dapat ditangani dengan baik melalui konsol aktif.
cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar noguiProses tersebut berhenti dalam beberapa detik. Paper memerlukan beberapa saat tambahan untuk menerapkan patch terlebih dahulu, lalu log berakhir dengan baris yang akan dilihat 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 error, melainkan pemeriksaan lisensi. Proses tersebut menulis eula.txt di sebelah file jar. Baca EULA yang ditautkan jika Anda belum membacanya, lalu ubah flag tersebut:
sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txtJalankan kembali perintah java yang sama. Kali ini server membuat world. Pada boot pertama, proses ini memerlukan waktu satu atau dua menit, lalu server mencapai status:
[Server thread/INFO]: Done (9.204s)! For help, type "help"Sekarang Anda memiliki konsol aktif. Gunakan konsol tersebut untuk tujuan kedua: ketik op YourMinecraftName (username persis yang digunakan dalam game). Server akan menambahkan Anda ke ops.json. Dengan demikian, saat tidak ada konsol yang terhubung, Anda dapat menjalankan semua perintah admin dari dalam game. Setelah itu, ketik stop untuk menyimpan dan keluar dengan bersih.
Langkah 5: server.properties, dan alasan online-mode tetap true
Proses pertama juga menulis server.properties. Sebagian besar nilai default sudah sesuai. Baris berikut perlu ditentukan 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 membuat server memverifikasi setiap username yang bergabung ke server session Mojang untuk membuktikan bahwa pemain tersebut memiliki akun terkait. Jika diatur ke false, yaitu sakelar "cracked server", server menerima begitu saja identitas yang diberikan setiap client. Siapa pun dapat bergabung menggunakan nama apa pun, termasuk nama Anda. Karena ops dan whitelist menggunakan nama sebagai identitas, peniru dapat masuk dengan izin operator Anda. Satu-satunya alasan yang sah untuk menonaktifkannya adalah jika server berada di belakang proxy autentikasi seperti Velocity, yang memverifikasi pemain secara mandiri. Pada server biasa, nilainya harus tetap true.
view-distance adalah pengaturan performa paling penting dalam file ini. Penggunaan CPU dan RAM meningkat kira-kira sebanding dengan kuadrat nilainya. Nilai 8 merupakan default yang sesuai untuk VPS. Nilai 10 adalah default vanilla dan membutuhkan sumber daya yang jauh lebih besar.
white-list=true plus enforce-whitelist=true menutup server bagi orang yang tidak dikenal. Bagian keamanan di bawah menjelaskan bahwa pengaturan ini wajib diterapkan. Tambahkan pemain dengan /whitelist add TheirName dalam game sebagai op.
Langkah 6: flag memori, alasan -Xms dan -Xmx harus sama
JVM mengalokasikan heap antara -Xms (ukuran awal) dan -Xmx (batas maksimum). Pada game server khusus, tetapkan keduanya ke nilai yang sama: heap pada akhirnya akan mencapai batas maksimum, dan memperbesarnya secara bertahap hanya menambah aktivitas garbage collector selama permainan berlangsung. Pada VPS 4 GB, pasangan yang tepat adalah:
/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui-Xmx bukan total memori yang digunakan proses. JVM menambahkan overhead di luar heap, stack thread, cache JIT, dan buffer langsung, yang jumlahnya sekitar setengah gigabyte atau lebih. Ubuntu juga membutuhkan ruang. Aturan praktisnya: -Xmx maksimal sebesar RAM VPS dikurangi 1 GB. Jika nilainya terlalu besar, salah satu dari dua kegagalan berikut akan terjadi. Jika alokasi gagal sejak awal, server menolak untuk start dengan pesan:
Error: Could not reserve enough space for object heapPesan ini jelas dan langsung muncul. Versi yang lebih sulit dideteksi dapat start dengan normal lalu berhenti beberapa jam kemudian, ketika heap penuh karena beban dan OOM killer milik kernel memilih proses terbesar pada server, yaitu JVM. Tidak ada pesan yang muncul di log server. Buktinya ada di sudo dmesg | grep -i oom, pada baris seperti Out of memory: Killed process 1234 (java). Jika service Anda restart secara "acak", periksa bagian tersebut terlebih dahulu, lalu turunkan -Xmx.
Untuk Paper, proyek ini mendokumentasikan flag Aikar, yaitu kumpulan konfigurasi G1GC yang disetel (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 dan sekitar selusin flag lainnya) untuk mengurangi fluktuasi jeda garbage collection pada heap yang lebih besar. Buat baris lengkapnya dari dokumentasi Paper. Pada heap 2–4 GB, peningkatannya tidak besar, tetapi flag tersebut aman digunakan.
Langkah 7: unit systemd dengan Restart=on-failure
Server yang dijalankan secara manual berhenti saat sesi SSH Anda berakhir dan tetap tidak berjalan setelah reboot. 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 benar: status menampilkan active (running), dan journal, yang kini berisi output konsol server, kembali berakhir pada baris Done.
Ada dua pilihan yang disengaja dalam unit tersebut. Restart=on-failure menjalankan kembali server setelah crash, tetapi tidak setelah stop yang bersih, sehingga pemeliharaan tetap dapat dilakukan. Selain itu, TimeoutStopSec=120 lebih penting daripada yang terlihat: systemctl stop mengirim SIGTERM, server Minecraft menangkapnya dan menyimpan setiap world sebelum berhenti, dan penyimpanan tersebut memerlukan waktu pada world yang besar. Batas waktu default systemd dapat mengirim SIGKILL ke JVM saat proses penyimpanan belum selesai. Inilah yang menyebabkan file region rusak. Berikan waktu dua menit.
Jika service terus restart dan journal menampilkan:
[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?berarti ada proses lain yang sudah menggunakan port 25565. Hampir selalu penyebabnya adalah proses yang sebelumnya dijalankan di foreground masih aktif dalam sesi SSH lain. Temukan proses tersebut dengan sudo ss -tlnp | grep 25565 dan hentikan salinan itu. Jangan pernah menjalankan dua server pada satu port.
Langkah 8: buka port 25565 pada kedua firewall
Minecraft Java hanya menggunakan TCP 25565 (UDP hanya digunakan untuk protokol query opsional dan dinonaktifkan secara default). Pada VPS:
sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enableItulah firewall pertama. Banyak penyedia VPS juga menyediakan firewall kedua pada tingkat jaringan melalui control panel. Jika firewall ini aktif, firewall tersebut sering terlupakan. Di SSD Nodes, fitur ini adalah add-on Advanced Firewall Groups, yaitu fitur berbayar yang dapat ditetapkan saat checkout atau melalui dashboard. Jika server Anda menggunakannya, buka TCP 25565 di sana juga. Gejala ketika salah satu firewall tidak memiliki aturan ini sangat tidak spesifik: client berhenti pada pesan "Connecting to the server..." lalu gagal dengan Connection timed out: no further information. Tidak ada penolakan koneksi, error server, atau pesan apa pun di journal karena paket tidak pernah tiba. Verifikasi dari mesin di luar VPS dengan nc -vz your.server.ip 25565. Hasil succeeded berarti semua firewall di sepanjang jalur telah membuka koneksi. Jika koneksi berhenti, biasanya masih ada firewall yang menjatuhkan paket. Namun, host yang terlalu sibuk untuk menerima koneksi juga dapat mengalami timeout. Karena itu, pastikan server sedang listening dengan ss pada server tersebut.
Saat masih berada di ufw, ingat bahwa server yang sama menjalankan SSH pada IP publik. Log brute-force biasanya mulai dipenuhi pesan dalam hitungan jam. Konfigurasikan Fail2ban untuk SSH pada Ubuntu 24.04 sebelum Anda lupa.
Sekarang hubungkan client: Multiplayer, Direct Connection, lalu masukkan IP server. Karena Anda memberikan hak op kepada diri sendiri pada langkah 4, perintah dalam game langsung dapat digunakan. Gunakan /whitelist add FriendName untuk setiap pemain dan /gamemode creative jika memang itu rencananya.
Langkah 9: whitelist, karena Internet menemukan port 25565
Membiarkan server Minecraft terbuka ke Internet bukan risiko teoretis: pemindai massal terus menyapu seluruh ruang IPv4 untuk mencari port 25565, proyek griefing amatir telah memetakan ratusan ribu server terbuka dengan cara ini, dan server tanpa whitelist akan dikunjungi pihak yang tidak diundang dalam hitungan hari, terkadang jam. Whitelist dari langkah 5 adalah solusinya: online-mode=true membuktikan identitas, sedangkan whitelist membatasi akses hanya untuk identitas yang Anda pilih. Keduanya merupakan keseluruhan model keamanan dan sudah memadai untuk server yang digunakan bersama teman.
Untuk mengakses konsol tanpa membuka game, menjalankan backup terjadwal, atau menggunakan cron job, aktifkan RCON di server.properties (enable-rcon=true, gunakan rcon.password yang kuat, port 25575) dan build client kecil mcrcon dari source GitHub-nya langsung di VPS; client tersebut tidak tersedia di repositori Ubuntu. Jangan membuka port 25575 pada firewall apa pun: RCON mengirimkan password dalam teks biasa, sehingga aksesnya harus tetap terbatas pada loopback.
Langkah 10: cadangan yang tidak merusak dunia
Aturan utamanya: jangan pernah menyalin direktori world saat server sedang menulis ke dalamnya. File region terus ditulis ulang selama permainan berlangsung; tar yang berjalan bersamaan dengan proses penulisan dapat menghasilkan arsip berisi chunk yang hanya tertulis sebagian. Saat arsip tersebut dipulihkan, tepat ketika cadangan harus berfungsi, log akan dipenuhi error pemuatan chunk dan terrain akan memiliki lubang. Dua metode berikut dapat mencegahnya.
Stop-copy-start adalah metode sederhana dengan konsekuensi downtime selama satu menit:
sudo systemctl stop minecraft
sudo mkdir -p /opt/backups
sudo tar czf /opt/backups/world-$(date +%F-%H%M).tgz \
-C /opt/minecraft world
sudo systemctl start minecraft(Sejak 26.1, Paper menyimpan ketiga dimensi di dalam world/dimensions/, seperti vanilla, sehingga world mencakup seluruh world. Server Paper yang masih menggunakan 1.21.11 atau versi lebih lama memisahkannya menjadi world, world_nether, dan world_the_end; tambahkan dua direktori tersebut ke perintah tar.)
Save-off mencadangkan world saat server tetap berjalan: melalui RCON, jalankan save-off (hentikan autosaver), lalu save-all flush (paksa semua data ditulis ke disk dan tunggu hingga selesai), buat arsip tar, kemudian jalankan save-on. Gunakan metode ini dalam cron pada pukul 5 a.m.
Bagaimanapun metodenya, cadangan yang disimpan pada VPS yang sama dengan server bukanlah cadangan. scp atau rclone arsip tersebut ke luar server, dan simpan lebih dari satu salinan. Karena Anda tidak akan terus memantau konsol saat terjadi masalah, pasang pemeriksaan eksternal pada port tersebut: Uptime Kuma pada server lain yang melakukan pemeriksaan TCP terhadap 25565 akan memberi tahu Anda bahwa server tidak aktif sebelum pemain mengetahuinya.
Plugin dan upgrade
Secara teknis, plugin berupa file jar yang ditempatkan ke /opt/minecraft/plugins/, lalu server di-restart. Hanya dapatkan plugin dari halaman resmi proyeknya (Hangar, Modrinth, SpigotMC), dengan alasan yang sama seperti server jar: setiap plugin adalah kode arbitrer yang berjalan sebagai user minecraft.
Upgrade server dilakukan dengan urutan: hentikan server, buat backup, ganti server.jar dengan build untuk versi Minecraft yang baru, lalu jalankan kembali. Ada 2 hal yang perlu diperhatikan. Upgrade world bersifat satu arah. World yang dibuka oleh versi yang lebih baru tidak dapat dibuka oleh versi yang lebih lama. Karena itu, backup diperlukan untuk memulihkan kondisi sebelumnya. Plugin juga sering terlambat mendukung rilis Minecraft baru selama beberapa hari atau minggu. Periksa kompatibilitas sebelum menggunakan rilis tersebut pada hari pertama. Perpindahan dari 1.21.11 ke 26.1 atau yang lebih baru juga memerlukan Java 25 (langkah 1) dan memindahkan folder Nether serta End milik Paper ke world/dimensions/.
Jika Anda lebih memilih mengelola semua ini sebagai container, dengan pinning versi, penerimaan EULA, dan flag memori sebagai variabel lingkungan, image itzg/minecraft-server yang banyak digunakan dapat menjalankan server Paper yang sama melalui Docker Compose pada VPS Anda dengan disiplin firewall dan backup yang sama.
FAQ
Berapa RAM yang dibutuhkan server Minecraft?
RAM 2 GB cukup untuk vanilla dengan 2–5 pemain; RAM 4 GB nyaman untuk server teman dengan sekitar sepuluh pemain yang menggunakan Paper dan beberapa plugin; modpack dan lebih dari 20 pemain memerlukan RAM 8 GB atau lebih. Berapa pun ukuran VPS, atur -Xmx maksimal sebesar total RAM dikurangi 1 GB. JVM menggunakan memori di luar heap, dan nilai yang terlalu besar dapat berakhir dengan Error: Could not reserve enough space for object heap atau OOM kill tanpa pesan.
Mengapa teman saya tidak dapat terhubung ke server Minecraft saya?
Client yang berhenti merespons lalu berakhir dengan Connection timed out: no further information biasanya menunjukkan masalah firewall: ufw pada VPS dan firewall jaringan provider jika diaktifkan pada control panel. TCP 25565 harus dibuka pada setiap firewall di jalur koneksi. Pastikan server benar-benar listening dengan sudo ss -tlnp | grep 25565 pada server, lalu lakukan pengujian dari luar menggunakan nc -vz your.server.ip 25565.
Apakah saya harus menetapkan online-mode=false di server.properties?
Tidak. Dengan online-mode=false, server sepenuhnya melewati autentikasi Mojang. Siapa pun dapat bergabung menggunakan username apa pun, termasuk nama pengguna yang memiliki status op, lalu mewarisi izinnya. Skin dan UUID yang stabil juga tidak akan berfungsi dengan benar. Satu-satunya penggunaan yang sah adalah di balik proxy yang melakukan autentikasi, seperti Velocity, yang memverifikasi pemain sendiri. Untuk server biasa, nilainya tetap true.
Apakah Paper lebih baik daripada server Minecraft vanilla?
Bagi hampir semua pengguna, ya. Paper adalah file jar pengganti langsung yang memuat world vanilla, menerima client tanpa modifikasi, memproses entity dan memuat chunk dengan jauh lebih efisien, serta menyediakan ekosistem plugin. Pengecualiannya adalah komunitas technical-redstone yang memerlukan perilaku vanilla yang identik hingga tingkat bit, karena beberapa optimisasi Paper mengubah perilaku tersebut. Pada VPS kecil, efisiensi Paper pada praktiknya setara dengan tambahan RAM gratis.
Bagaimana cara mencadangkan world Minecraft tanpa merusaknya?
Jangan pernah mengarsipkan direktori world saat server sedang menulis ke dalamnya. Proses penyalinan yang berlangsung bersamaan dengan penulisan region file dapat menghasilkan chunk yang rusak, dan kerusakan itu mungkin baru diketahui saat pemulihan. Hentikan server, gunakan tar untuk mengarsipkan direktori world, lalu jalankan server kembali. Alternatifnya, biarkan server tetap aktif dengan save-off, save-all flush, tar, dan save-on melalui RCON. Setelah itu, pindahkan arsip keluar dari VPS.