Cara Host Server Minecraft Paper di VPS Ubuntu
Panduan instalasi Paper Minecraft di Ubuntu 24.04 menggunakan Java 21 dan systemd. Pelajari pengaturan RAM, buka port 25565, serta cara backup world aman.
Apa yang Anda bangun
Sebuah server Minecraft Java Edition yang stabil: Paper pada Ubuntu 24.04, berjalan sebagai pengguna minecraft khusus di bawah systemd dengan Restart=on-failure, whitelist aktif, port 25565 terbuka di kedua firewall yang membatasi pemain dan JVM, serta pencadangan dilakukan dengan cara yang tidak merusak dunia yang dilindungi. Server itu sendiri hanyalah satu file jar dan satu perintah java; segala hal yang membedakan server yang dimainkan teman Anda selama satu tahun dengan server yang mati pada akhir pekan pertama terletak pada perintah tersebut, dan itulah yang dibahas dalam panduan ini.
Dua peringatan penting sebelum Anda mengeluarkan uang. Pertama, Minecraft sangat boros memori dan sebagian besar bersifat single-threaded: VPS 1 GB tidak akan dapat menjalankan server yang layak dimainkan, dan satu core cepat lebih baik daripada empat core lambat. Kedua, ini adalah Java Edition. Pemain Bedrock — konsol, ponsel, aplikasi Windows Bedrock — tidak dapat bergabung ke server Java; Bedrock memerlukan perangkat lunak server berbeda pada UDP 19132, atau plugin Geyser, yang tidak dibahas di sini.
Anda memerlukan VPS Ubuntu 24.04 KVM baru dengan akses root atau sudo, dan waktu sekitar tiga puluh menit.
Sizing: kebutuhan aktual server teman Anda
RAM adalah angka yang paling penting, dan angka yang jujur lebih rendah daripada yang disarankan di forum modpack:
- 2 GB dapat menjalankan vanilla untuk 2–5 pemain dengan jarak pandang (view distance) sedang. Dapat dimainkan, tetapi tidak ada sisa kapasitas.
- 4 GB adalah ukuran yang nyaman untuk server teman: sekitar sepuluh pemain bersamaan pada Paper dengan beberapa plugin, dan masih ada sisa untuk OS.
- 8 GB ke atas adalah untuk modpack dan 20+ pemain, di mana Anda juga harus memperhatikan kecepatan CPU single-core, karena loop game utama berjalan pada satu thread.
Ukuran dunia juga bertambah di disk saat pemain menjelajah — dunia survival yang sering dijelajahi dapat mencapai beberapa gigabyte — jadi sediakan ruang untuk dunia dan cadangannya (backups).
Vanilla atau Paper? Paper adalah pengganti langsung untuk jar resmi: dunia yang sama, client yang sama, tidak butuh mod di sisi client. Paper menulis ulang jalur server yang paling lambat — pemuatan chunk, ticking entitas, hopper — dan menambahkan API plugin. Satu-satunya alasan menggunakan vanilla adalah jika Anda membutuhkan mekanik vanilla yang presisi untuk farm redstone teknis yang dapat diubah oleh optimasi Paper; untuk pengguna lain, Paper memberikan jumlah pemain lebih banyak per gigabyte. Semua hal di bawah ini berfungsi untuk keduanya.
Langkah 1: instal Java 21
Minecraft 1.20.5 dan semua rilis setelahnya (semua versi 1.21.x) memerlukan Java 21. Ubuntu 24.04 menyediakannya di repositori default, dan build headless mengabaikan pustaka desktop yang tidak akan digunakan oleh server:
sudo apt update && sudo apt install -y openjdk-21-jre-headless
java -versionHasil yang benar: baris pertama terbaca openjdk version "21.0.x". Jika terbaca 17 atau 11, JRE lain terinstal dan menjadi prioritas; perbaiki dengan sudo update-alternatives --config java dan pilih entri yang mengandung java-21.
Melewati pemeriksaan ini akan menyebabkan kesalahan server Minecraft yang paling sering dicari di Google di kemudian hari. Dengan Java 17, file jar server akan langsung berhenti 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.0Angka tersebut menunjukkan ketidakcocokan: class file version 65.0 adalah Java 21, 61.0 adalah Java 17, 60.0 adalah Java 16. Apa pun pasangan yang Anda lihat, solusinya sama — instal JRE yang lebih baru dan jalankan kembali update-alternatives.
Langkah 2: gunakan pengguna khusus, jangan pernah gunakan root
Server menjalankan kode plugin dan memproses input jaringan dari siapa pun yang dapat menjangkau port tersebut. Jika terjadi kesalahan, penyerang dengan hak akses root akan menguasai VPS Anda; penyerang dengan hak akses 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. Setiap perintah yang mengakses server setelah ini akan dijalankan sebagai pengguna ini.
Step 3: unduh server jar dari sumber resmi
Hanya ada dua tempat yang boleh memberikan server jar kepada Anda: halaman unduhan server resmi di minecraft.net untuk vanilla, dan halaman unduhan di papermc.io untuk Paper. "Download hub" pihak ketiga yang mengemas ulang server jar adalah saluran malware yang sudah lama ada — server jar adalah kode arbitrer yang akan Anda jalankan 24/7 pada mesin yang terhubung ke internet.
Salin tautan unduhan untuk build saat ini dari halaman resmi (URL berubah pada setiap versi dan build, sehingga menuliskan satu URL secara statis di sini akan kedaluwarsa), lalu:
cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'Hasil yang benar: sebuah server.jar berukuran sekitar 50 MB milik minecraft, yang dikonfirmasi dengan ls -lh /opt/minecraft/server.jar.
Step 4: menjalankan pertama kali, EULA, dan memberikan akses admin pada diri sendiri
Jalankan server secara interaktif satu kali sebelum menggunakan systemd — menjalankan pertama kali hanya memiliki dua tugas yang hanya bisa dilakukan dengan konsol langsung.
cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar noguiProses akan berhenti dalam hitungan detik — Paper membutuhkan waktu tambahan untuk menerapkan patch — dan log akan berakhir dengan baris yang dialami 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; ini adalah gerbang lisensi. Proses tersebut menulis eula.txt di samping file jar. Baca EULA yang ditautkan jika Anda belum membacanya, lalu aktifkan flag berikut:
sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txtJalankan kembali perintah java yang sama. Kali ini server akan membuat dunia — membutuhkan waktu satu atau dua menit pada booting pertama — dan berhenti pada:
[Server thread/INFO]: Done (9.204s)! For help, type "help"Anda sekarang memiliki konsol langsung. Gunakan untuk tugas kedua: ketik op YourMinecraftName (nama pengguna in-game Anda secara tepat) dan server akan memasukkan Anda ke dalam ops.json, sehingga nanti — saat tidak ada konsol yang terhubung — Anda dapat menjalankan setiap perintah admin dari dalam game. Kemudian ketik stop untuk menyimpan dan keluar dengan bersih.
Step 5: server.properties, dan alasan online-mode tetap true
Jalankan pertama kali juga menulis server.properties. Sebagian besar pengaturan default sudah tepat; baris-baris berikut adalah yang 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 terhadap server sesi Mojang, untuk membuktikan pemain memiliki akun tersebut. Mengaturnya ke false — opsi "cracked server" — berarti server menerima klaim identitas apa pun dari client: siapa pun dapat bergabung dengan nama apa pun, termasuk nama Anda. Karena ops dan whitelist berbasis nama, penyamar dapat masuk dengan izin operator Anda. Satu-satunya alasan sah untuk mengubahnya menjadi false adalah jika menggunakan proxy autentikasi seperti Velocity, yang memverifikasi pemain sendiri. Pada server normal, pengaturan ini harus tetap true.
view-distance adalah pengatur performa terbesar dalam file ini — penggunaan CPU dan RAM meningkat secara eksponensial terhadap nilainya. 8 adalah default VPS yang masuk akal; 10 adalah default vanilla dan jauh lebih berat.
white-list=true ditambah enforce-whitelist=true menutup server dari orang asing, yang menurut bagian keamanan di bawah ini bersifat wajib. Tambahkan pemain dengan /whitelist add TheirName di dalam game sebagai op.
Step 6: flag memori — mengapa -Xms dan -Xmx harus sama
JVM mengalokasikan heap di antara -Xms (ukuran awal) dan -Xmx (batas atas). Pada server game khusus, atur keduanya ke nilai yang sama: heap akan tetap mencapai batas atas, dan memperbesar ukuran secara bertahap hanya akan menambah beban garbage-collector saat 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 tersebut. JVM menambahkan overhead off-heap — thread stacks, JIT caches, direct buffers — sekitar setengah gigabyte atau lebih, dan Ubuntu sendiri membutuhkan ruang memori. Aturan praktisnya: -Xmx maksimal adalah RAM VPS dikurangi 1 GB. Jika melebihi batas, Anda akan mengalami salah satu dari dua kegagalan. Jika alokasi gagal di awal, server akan menolak untuk berjalan dengan pesan:
Error: Could not reserve enough space for object heapPesan tersebut bersifat langsung dan jelas. Versi yang lebih buruk adalah server berjalan dengan normal namun mati beberapa jam kemudian, saat heap penuh di bawah beban kerja dan kernel OOM killer memilih proses terbesar di sistem — yaitu JVM. Tidak ada yang muncul di log server; buktinya ada di sudo dmesg | grep -i oom, berupa baris seperti Out of memory: Killed process 1234 (java). Jika layanan Anda restart secara "acak", periksa bagian tersebut terlebih dahulu, dan turunkan -Xmx.
Untuk Paper, dokumentasi proyek menyarankan Aikar's flags — kumpulan G1GC yang telah dioptimalkan (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 dan belasan parameter lainnya) yang memperhalus jeda garbage-collection pada heap yang lebih besar. Buatlah baris perintah lengkap dari dokumentasi Paper; pada heap 2–4 GB peningkatannya kecil namun flag tersebut aman digunakan.
Step 7: unit systemd dengan Restart=on-failure
Server yang dijalankan secara manual akan mati saat sesi SSH Anda berakhir dan tetap mati 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 menunjukkan active (running), dan journal — yang sekarang berisi output konsol server — berakhir di baris Done lagi.
Ada dua pilihan sengaja dalam unit tersebut. Restart=on-failure menjalankan kembali server setelah crash tetapi tidak setelah stop yang bersih, sehingga pemeliharaan tetap memungkinkan. Dan TimeoutStopSec=120 lebih penting daripada kelihatannya: systemctl stop mengirimkan SIGTERM, server Minecraft menangkap sinyal tersebut dan menyimpan setiap world sebelum keluar, dan pada world yang besar proses penyimpanan tersebut membutuhkan waktu. Timeout default systemd dapat mengirimkan SIGKILL ke JVM saat proses penyimpanan berlangsung, yang merupakan penyebab utama file region korup. Berikan waktu dua menit.
Jika layanan mengalami flapping dan journal 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 ada sesuatu yang sudah menggunakan port 25565 — hampir selalu merupakan proses foreground sebelumnya yang masih berjalan di sesi SSH lain. Temukan proses tersebut dengan sudo ss -tlnp | grep 25565 dan hentikan salinan tersebut; jangan pernah menjalankan dua server pada satu port yang sama.
Step 8: buka 25565 pada kedua firewall
Minecraft Java hanya menggunakan TCP 25565 (UDP hanya digunakan untuk protokol query opsional, nonaktif secara default). Pada VPS:
sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enableItu adalah firewall pertama. Sebagian besar penyedia VPS menjalankan firewall tingkat jaringan kedua di panel kontrol, dan inilah yang sering terlupakan. Buka TCP 25565 di sana juga. Gejala jika hanya salah satu firewall yang terbuka sangat tidak spesifik: client akan tertahan pada "Connecting to the server..." dan gagal dengan Connection timed out: no further information — tidak ada penolakan, tidak ada error server, tidak ada catatan di journal, karena paket tidak pernah sampai. Verifikasi dari mesin di luar VPS menggunakan nc -vz your.server.ip 25565; succeeded berarti kedua firewall sudah terbuka, sedangkan status tertahan berarti setidaknya salah satu belum terbuka.
Saat Anda menggunakan ufw, server yang sama menjalankan SSH pada IP publik, dan log brute-force akan muncul dalam hitungan jam — atur Fail2ban untuk SSH pada Ubuntu 24.04 sebelum Anda lupa.
Sekarang hubungkan: Multiplayer, Direct Connection, masukkan IP server. Karena Anda sudah memberikan hak akses pada langkah 4, perintah dalam game dapat langsung digunakan — /whitelist add FriendName untuk setiap pemain, /gamemode creative jika itu adalah rencananya.
Step 9: whitelist, karena internet mendeteksi port 25565
Membiarkan server Minecraft terbuka ke internet adalah risiko nyata: pemindai massal terus-menerus memindai seluruh ruang IPv4 untuk port 25565 — proyek griefing amatir telah memetakan ratusan ribu server terbuka dengan cara ini — dan server tanpa whitelist akan menerima pengunjung tak diundang dalam hitungan hari, bahkan jam. Whitelist dari langkah 5 adalah solusinya: online-mode=true membuktikan identitas, sedangkan whitelist membatasi akses hanya untuk identitas yang Anda pilih. Kombinasi tersebut adalah seluruh model keamanan, dan sudah cukup untuk server teman.
Untuk akses konsol tanpa game — seperti backup otomatis atau cron job — aktifkan RCON di server.properties (enable-rcon=true, rcon.password yang kuat, port 25575) dan buat client mcrcon kecil dari sumber GitHub langsung di VPS; client ini tidak tersedia di repositori Ubuntu. Jangan buka port 25575 pada firewall apa pun: RCON mengirimkan kata sandi dalam bentuk teks biasa (cleartext), sehingga koneksi harus tetap terbatas pada loopback-only.
Step 10: backup yang tidak merusak dunia
Satu aturan utama: jangan pernah menyalin direktori dunia saat server sedang menulis data. File region ditulis ulang secara terus-menerus selama permainan berlangsung; sebuah tar yang berjalan bersamaan dengan proses penulisan akan menghasilkan arsip dengan chunk yang setengah tertulis. Saat Anda melakukan restorasi — momen di mana backup harus berfungsi — log akan penuh dengan error pemuatan chunk dan terrain akan berlubang. Ada dua metode untuk menghindari hal ini.
Stop-copy-start adalah metode yang sederhana, namun memerlukan 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 world_nether world_the_end
sudo systemctl start minecraft(Paper memisahkan dimensi menjadi world, world_nether, dan world_the_end; server vanilla menyimpan semuanya di world, jadi pindahkan dua dimensi lainnya ke sana.)
Save-off melakukan backup saat server berjalan: melalui RCON, jalankan save-off (hentikan autosaver), lalu save-all flush (paksa semua data ditulis ke disk dan tunggu), ambil file tar, lalu jalankan save-on. Ini adalah versi yang tepat untuk dijadwalkan di cron pada jam 5 pagi.
Bagaimanapun caranya, backup yang tersimpan di VPS yang sama dengan server bukanlah backup yang aman — scp atau rclone arsip tersebut keluar dari mesin, dan simpanlah lebih dari satu salinan. Karena Anda tidak akan memantau konsol saat terjadi kerusakan, pasang pengecekan eksternal pada port: Uptime Kuma di mesin lain yang melakukan pengecekan TCP terhadap port 25565 akan memberi tahu Anda bahwa server mati sebelum pemain Anda menyadarinya.
Plugins dan upgrade
Pada Paper, plugin adalah file jar yang dimasukkan ke dalam /opt/minecraft/plugins/ lalu diikuti dengan restart — itu saja proses instalasinya. Hanya ambil plugin dari halaman proyek resmi mereka (Hangar, Modrinth, SpigotMC). Alasannya sama dengan jar server: setiap plugin adalah kode arbitrer yang berjalan sebagai user minecraft.
Melakukan upgrade server adalah: stop, cadangkan (back up), ganti server.jar dengan build untuk versi Minecraft baru, lalu start. Ada dua hal yang perlu diwaspadai. Upgrade dunia bersifat satu arah — dunia yang dibuka oleh versi yang lebih baru tidak akan bisa dibuka di versi yang lebih lama, sehingga cadangan (backup) sangat diperlukan. Selain itu, plugin sering kali terlambat mengikuti rilis Minecraft baru selama beberapa hari atau minggu, jadi periksa kompatibilitas sebelum mencoba rilis pada hari pertama.
Jika Anda lebih memilih mengelola semua ini sebagai container — seperti pinning versi, penerimaan EULA, dan memory flags sebagai environment variables — image itzg/minecraft-server yang digunakan secara luas menjalankan server Paper yang sama di bawah Docker Compose pada VPS Anda dengan disiplin firewall dan backup yang identik.
FAQ
Berapa banyak RAM yang dibutuhkan server Minecraft?
2 GB cukup untuk vanilla dengan 2–5 pemain; 4 GB nyaman untuk server teman sekitar sepuluh pemain menggunakan Paper dengan beberapa plugin; modpack dan 20+ pemain membutuhkan 8 GB atau lebih. Berapapun ukuran VPS Anda, atur -Xmx maksimal total RAM dikurangi 1 GB — JVM menggunakan memori di luar heap, dan kelebihan alokasi akan menyebabkan Error: Could not reserve enough space for object heap atau OOM kill secara diam-diam.
Mengapa teman saya tidak bisa terhubung ke server Minecraft saya?
Client yang macet dan berakhir pada Connection timed out: no further information hampir selalu disebabkan oleh firewall, dan ada dua jenis: ufw pada VPS dan firewall jaringan penyedia layanan di panel kontrol. TCP 25565 harus terbuka di keduanya. Pastikan server benar-benar sedang listening dengan sudo ss -tlnp | grep 25565 pada mesin tersebut, lalu uji dari luar menggunakan nc -vz your.server.ip 25565.
Haruskah saya mengatur online-mode=false di server.properties?
Tidak. Dengan online-mode=false server akan melewati autentikasi Mojang sepenuhnya, sehingga siapa pun dapat bergabung dengan username apa pun — termasuk nama op, yang akan mewarisi izin mereka — serta menyebabkan skin dan UUID stabil menjadi rusak. Satu-satunya penggunaan yang sah adalah di belakang proxy autentikasi seperti Velocity yang memverifikasi pemain sendiri. Untuk server normal, biarkan tetap true.
Apakah Paper lebih baik daripada server Minecraft vanilla?
Untuk hampir semua orang, ya: Paper adalah jar drop-in yang memuat dunia vanilla, menerima client tanpa modifikasi, melakukan tick pada entitas dan memuat chunk jauh lebih efisien, serta menambahkan ekosistem plugin. Pengecualiannya adalah komunitas technical-redstone yang membutuhkan perilaku vanilla yang presisi, karena beberapa optimasi Paper mengubah hal tersebut. Pada VPS kecil, efisiensi Paper secara efektif memberikan tambahan RAM gratis.
Bagaimana cara mencadangkan dunia Minecraft tanpa merusaknya?
Jangan pernah mengarsipkan direktori dunia saat server sedang menulis ke dalamnya — salinan yang berjalan bersamaan dengan penulisan region-file akan menghasilkan chunk yang korup yang baru diketahui saat proses pemulihan. Hentikan server, tar direktori dunia, lalu jalankan kembali, atau biarkan server tetap berjalan dengan save-off, save-all flush, tar, save-on melalui RCON. Kemudian pindahkan arsip tersebut keluar dari VPS.