VPS üzerinde Minecraft sunucusu nasıl kurulur
Ubuntu 24.04 üzerinde Paper Minecraft sunucusu kurulumu: Java 21, systemd yapılandırması, 25565 port ayarları ve güvenli yedekleme yöntemleri hakkında rehber.
Ne inşa ediyorsunuz
Kesintisiz çalışan bir Minecraft Java Edition sunucusu: Ubuntu 24.04 üzerinde Paper, systemd altında Restart=on-failure ile ayrılmış bir minecraft kullanıcısı olarak çalışır. Oyuncular ile JVM arasındaki her iki güvenlik duvarında da 25565 portu açıktır, whitelist aktiftir ve yedekleme işlemi korunan dünyayı bozmayacak şekilde yapılır. Sunucunun kendisi bir jar dosyası ve bir java komutundan ibarettir; arkadaşlarınızın bir yıl boyunca oynadığı bir sunucu ile ilk hafta sonu çöken bir sunucu arasındaki fark bu komutun çevresindeki ayarlardır ve bu rehber bu konuyu kapsar.
Para harcamadan önce iki önemli uyarı. Birincisi, Minecraft bellek tüketimi yüksektir ve çoğunlukla tek çekirdek (single-threaded) çalışır: 1 GB VPS ile oynanabilir bir sunucu çalıştırılamaz; hızlı bir çekirdek, dört yavaş çekirdekten daha iyidir. İkincisi, bu Java Edition sürümüdür. Bedrock oyuncuları —konsollar, telefonlar, Windows Bedrock uygulaması— bir Java sunucusuna katılamaz; Bedrock için UDP 19132 portunda farklı bir sunucu yazılımı veya bu rehberin kapsamı dışında olan Geyser eklentisi gereklidir.
Root veya sudo yetkisine sahip yeni bir Ubuntu 24.04 KVM VPS ve yaklaşık otuz dakikaya ihtiyacınız var.
Boyutlandırma: Bir arkadaş sunucusunun gerçek ihtiyaçları
En önemli değer RAM miktarıdır; gerçek rakamlar mod paketi forumlarının öne sürdüğünden daha düşüktür:
- 2 GB, düşük görüş mesafesinde 2–5 oyuncu için vanilla sürümü çalıştırır. Oynanabilir ancak pay bırakmaz.
- 4 GB, konforlu bir arkadaş sunucusu boyutudur: Paper üzerinde birkaç eklenti ile aynı anda yaklaşık on oyuncu barındırabilir ve işletim sistemi için yeterli alan bırakır.
- 8 GB ve üzeri, mod paketleri ve 20+ oyuncu kapasitesi içindir; bu durumda tek çekirdek CPU hızına da dikkat edilmelidir, çünkü ana oyun döngüsü tek bir thread üzerinde çalışır.
Oyuncular keşif yaptıkça dünya disk üzerinde de büyür — çok gezilmiş bir survival dünyası birkaç gigabayta ulaşabilir — bu nedenle hem dünya hem de yedekler için boş alan bırakılmalıdır.
Vanilla mı yoksa Paper mı? Paper, resmi jar dosyasının doğrudan yerine kullanılabilen bir alternatiftir: dünyalar ve istemciler aynıdır, istemci tarafında mod gerektirmez. En yavaş sunucu yollarını — chunk yükleme, entity ticking, hoppers — yeniden yazar ve bir eklenti API'si ekler. Vanilla kullanmanın tek nedeni, Paper optimizasyonlarının değiştirebileceği teknik redstone çiftlikleri için birebir vanilla mekaniklerine ihtiyaç duymaktır; diğer herkes için Paper, gigabayt başına daha fazla oyuncu demektir. Aşağıdaki tüm seçenekler her ikisi için de geçerlidir.
Adım 1: Java 21 kurulumu
Minecraft 1.20.5 ve sonraki tüm sürümler (tüm 1.21.x sürümleri) Java 21 gerektirir. Ubuntu 24.04, bu sürümü varsayılan depolarda sunar. Headless sürüm, bir sunucunun kullanmayacağı masaüstü kütüphanelerini içermez:
sudo apt update && sudo apt install -y openjdk-21-jre-headless
java -versionDoğru sonuç: ilk satır openjdk version "21.0.x" şeklinde okunmalıdır. Eğer 17 veya 11 okunuyorsa, başka bir JRE yüklüdür ve önceliklidir; sudo update-alternatives --config java ile bu durumu düzeltin ve java-21 içeren girişi seçin.
Bu kontrolün atlanması, daha sonra en çok aranan Minecraft sunucu hatasına neden olur. Java 17 kullanıldığında, sunucu jar dosyası şu hata ile anında kapanır:
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.0Sayılar uyumsuzluğu açıklar: class file version 65.0 Java 21, 61.0 Java 17, 60.0 ise Java 16'dır. Görülen eşleşme ne olursa olsun çözüm aynıdır: daha yeni JRE sürümünü yükleyin ve update-alternatives komutunu tekrar çalıştırın.
Adım 2: root yerine özel bir kullanıcı kullanın
Sunucu, ilgili porta erişebilen herkesin gönderdiği eklenti kodlarını çalıştırır ve ağ girişlerini ayrıştırır. Bir güvenlik ihlali durumunda, root yetkisiyle çalışan bir süreç VPS'in tamamını ele geçirir; minecraft yetkisiyle çalışan bir süreç ise sadece oyun dünyasını ele geçirir.
sudo adduser --system --group --home /opt/minecraft minecraft--system, SSH üzerinden oturum açamayan ve ana dizini ile çalışma dizini /opt/minecraft olan, şifresiz bir hesap oluşturur. Bu noktadan sonra sunucuya yapılan tüm işlemler bu kullanıcı yetkileriyle yürütülür.
Step 3: sunucu jar dosyasını resmi kaynaktan indirin
Sunucu jar dosyası yalnızca iki kaynaktan temin edilmelidir: vanilla sürüm için minecraft.net adresindeki resmi sunucu indirme sayfası veya Paper için papermc.io adresindeki indirme sayfası. Sunucu jar dosyalarını yeniden paketleyen üçüncü taraf "indirme merkezleri" uzun süredir devam eden bir kötü amaçlı yazılım kanalıdır; sunucu jar dosyası, internete açık bir makinede 7/24 çalıştırılacak olan rastgele bir koddur.
Resmi sayfadan güncel sürümün indirme bağlantısını kopyalayın (URL her sürüm ve yapılandırma ile değiştiği için buraya sabitlenemez), ardından:
cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'Doğru sonuç: ls -lh /opt/minecraft/server.jar ile doğrulanmış, minecraft tarafından sağlanan yaklaşık 50 MB boyutunda bir server.jar.
Adım 4: ilk çalıştırma, EULA ve yetki alma
Sistem servislerini (systemd) yapılandırmadan önce sunucuyu bir kez interaktif olarak çalıştırın — ilk çalıştırma yalnızca canlı bir konsol ile düzgün yapılabilecek iki işleme sahiptir.
cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar noguiSunucu birkaç saniye içinde kapanır — Paper yamaları uygulamak için biraz ek süre harcar — ve günlük (log) herkesin karşılaştığı şu satırla sona erer:
[ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.Bu bir hata değildir; bir lisans kontrolüdür. Çalıştırma işlemi jar dosyasının yanına eula.txt dosyasını yazmıştır. Eğer henüz okumadıysanız bağlantılı EULA'yı okuyun, ardından şu bayrağı (flag) ekleyin:
sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txtAynı java komutunu tekrar çalıştırın. Bu sefer dünya oluşturulur — ilk açılışta bir veya iki dakika sürer — ve şu aşamada durur:
[Server thread/INFO]: Done (9.204s)! For help, type "help"Artık canlı bir konsola sahipsiniz. İkinci işlem için bunu kullanın: op YourMinecraftName (oyun içindeki tam kullanıcı adınız) yazın ve sunucu sizi ops.json dosyasına kaydetsin; böylece daha sonra — konsol bağlı değilken — her admin komutunu oyun içinden çalıştırabilirsiniz. Ardından, kaydetmek ve düzgünce çıkmak için stop yazın.
Adım 5: server.properties ve online-mode neden true olarak kalmalıdır
İlk çalıştırma aynı zamanda server.properties dosyasını da oluşturmuştur. Varsayılan ayarların çoğu uygundur; ancak şu satırlar üzerinde bilinçli karar verilmesi gerekir:
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, sunucunun her katılan kullanıcı adını Mojang oturum sunucuları ile doğrulamasını sağlar; bu sayede oyuncunun hesaba sahip olduğu kanıtlanır. Bu ayarın false (cracked server seçeneği) olarak ayarlanması, sunucunun istemciden gelen kimlik bilgilerini doğrudan kabul etmesi anlamına gelir: Herhangi biri, sizin isminiz de dahil olmak üzere, istediği isimle katılabilir. Operatör yetkileri ve whitelist listeleri isimlere dayalı olduğu için, bir taklitçi sizin operatör yetkilerinizle sisteme giriş yapabilir. Bu ayarın false olarak ayarlanması için tek geçerli sebep, oyuncuları kendisi doğrulayan Velocity gibi bir kimlik doğrulama proxy'si kullanılmasıdır. Normal bir sunucuda bu ayar true olarak kalmalıdır.
view-distance, dosyadaki en büyük performans değişkenidir; CPU ve RAM maliyeti yaklaşık olarak bu değerin karesiyle orantılı artar. 8 değeri makul bir VPS varsayılanıdır; 10 ise vanilla varsayılanıdır ve belirgin şekilde daha fazla kaynak tüketir.
white-list=true ve enforce-whitelist=true, sunucuyu yabancılara kapatır; aşağıdaki güvenlik bölümü bunun isteğe bağlı olmadığını savunmaktadır. Oyuncuları oyun içinden bir op aracılığıyla /whitelist add TheirName komutuyla ekleyebilirsiniz.
Step 6: memory flags — -Xms ve -Xmx değerleri neden aynı olmalıdır
JVM, heap alanını -Xms (başlangıç boyutu) ile -Xmx (üst sınır) arasında tahsis eder. Özel bir oyun sunucusunda bu değerleri aynı yapın: heap zaten üst sınıra ulaşacaktır ve kademeli olarak büyütmek oyun sırasında garbage-collector yüküne neden olur. 4 GB kapasiteli bir VPS için uygun eşleşme şudur:
/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui-Xmx, sürecin kullandığı toplam bellek değildir. JVM; thread stack'leri, JIT cache'leri ve direct buffer'lar gibi off-heap yükler ekler; bu miktar yaklaşık yarım GB veya daha fazladır. Ayrıca Ubuntu işletim sisteminin de alana ihtiyacı vardır. Temel kural: -Xmx, en fazla VPS RAM miktarı eksi 1 GB olmalıdır. Bu sınırı aşarsanız iki hata türünden biriyle karşılaşırsınız. Eğer tahsis işlemi en başta başarısız olursa, sunucu şu hata ile başlamayı reddeder:
Error: Could not reserve enough space for object heapBu hata açık ve anlıktır. Daha sorunlu olan versiyon ise sunucunun sorunsuz başlaması ancak saatler sonra, yük altında heap dolduğunda gerçekleşir; kernel'ın OOM killer mekanizması sistemdeki en büyük süreç olan JVM'i seçer. Sunucu günlüğünde hiçbir şey görünmez; kanıtlar sudo dmesg | grep -i oom içerisindedir, örneğin Out of memory: Killed process 1234 (java) gibi bir satır. Eğer servisiniz "rastgele" yeniden başlıyorsa, önce orayı kontrol edin ve -Xmx değerini düşürün.
Paper projesi, Aikar's flags olarak bilinen ayarlanmış bir G1GC setini (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 ve diğerleri) belgelerinde sunar; bu ayarlar büyük heap'lerde garbage-collection duraklamalarını yumuşatır. Tam komut satırını Paper dokümantasyonundan oluşturun; 2–4 GB heap üzerinde kazanç sınırlıdır ancak bu flag'ler zararsızdır.
Adım 7: Restart=on-failure içeren bir systemd ünitesi
Manuel olarak başlatılan bir sunucu, SSH oturumu kapandığında kapanır ve yeniden başlatma sonrası devreye girmez. /etc/systemd/system/minecraft.service dosyasını oluşturun:
[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 -fDoğru sonuç: status, active (running) çıktısını verir ve sunucu konsol çıktısını içeren journal, tekrar Done satırında sona erer.
Bu ünitede iki bilinçli seçim yapılmıştır. Restart=on-failure, sunucuyu bir çökme sonrası geri getirir ancak temiz bir stop işlemi sonrası geri getirmez; böylece bakım işlemleri mümkün kalır. TimeoutStopSec=120 ise göründüğünden daha önemlidir: systemctl stop, SIGTERM sinyali gönderir; Minecraft sunucusu bu sinyali yakalar ve çıkış yapmadan önce tüm dünyaları kaydeder. Büyük bir dünyada bu kayıt işlemi zaman alır. Systemd'nin varsayılan zaman aşımı, JVM'yi kayıt işlemi sırasında SIGKILL ile sonlandırabilir; region dosyalarının bozulma sebebi tam olarak budur. Süreyi iki dakika olarak ayarlayın.
Eğer servis sürekli yeniden başlıyorsa (flapping) ve journal şu çıktıyı veriyorsa:
[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?25565 portu halihazırda başka bir süreç tarafından kullanılmaktadır. Bu durum genellikle başka bir SSH oturumunda çalışan eski bir foreground sürecinden kaynaklanır. Süreci sudo ss -tlnp | grep 25565 ile bulun ve durdurun; tek bir port üzerinde asla iki sunucu çalıştırmayın.
Step 8: Her iki güvenlik duvarında da 25565 portunu açın
Minecraft Java sadece TCP 25565 kullanır (UDP sadece isteğe bağlı query protokolüdür ve varsayılan olarak kapalıdır). VPS üzerinde:
sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enableBu birinci güvenlik duvarıdır. Çoğu VPS sağlayıcısı, kontrol panelinde ağ düzeyinde ikinci bir güvenlik duvarı çalıştırır ve genellikle unutulan budur. Orada da TCP 25565 portunu açın. İki güvenlik duvarından sadece birinin açık olması durumu belirsiz hatalara yol açar: istemci "Connecting to the server..." aşamasında takılır ve Connection timed out: no further information hatası verir; bağlantı reddedilmez, sunucu hatası oluşmaz ve journal kayıtlarında hiçbir şey görünmez çünkü paketler sunucuya ulaşmaz. VPS dışındaki bir makineden nc -vz your.server.ip 25565 ile doğrulama yapın; succeeded her iki güvenlik duvarının da açık olduğu anlamına gelir, takılma ise en az birinin kapalı olduğunu gösterir.
ufw yapılandırması yaparken, aynı makine üzerinden SSH üzerinden herkese açık bir IP üzerinden erişim sağlanmaktadır ve brute-force log kalabalığı birkaç saat içinde başlar; unutmadan önce Ubuntu 24.04 üzerinde SSH için Fail2ban kurulumu işlemini gerçekleştirin.
Şimdi bağlanın: Multiplayer, Direct Connection, sunucu IP adresi. 4. adımda kendinizi yetkilendirdiğiniz için oyun içi komutlar hemen çalışacaktır — her oyuncu için /whitelist add FriendName, eğer planınız buysa /gamemode creative.
Adım 9: İnternet 25565 portunu taradığı için whitelist (beyaz liste) kullanımı
Bir Minecraft sunucusunu internete açık bırakmak teorik bir risk değildir: Kitlesel tarayıcılar, tüm IPv4 alanını sürekli olarak 25565 portu için tarar. Amatör saldırı projeleri, bu yöntemle yüz binlerce açık sunucuyu haritalandırmıştır. Whitelist kullanılmayan bir sunucuya, günler hatta bazen saatler içinde istenmeyen ziyaretçiler girer. Adım 5'teki whitelist bu sorunu çözer: online-mode=true kimliği doğrular, whitelist ise girişi yalnızca sizin seçtiğiniz kimliklerle kısıtlar. Bu ikili güvenlik modeli, arkadaş sunucuları için yeterlidir.
Oyun dışında konsol erişimi sağlamak için —otomatik yedeklemeler veya cron job işlemleri gibi— server.properties içinde RCON özelliğini etkinleştirin (enable-rcon=true, güçlü bir rcon.password, port 25575) ve GitHub kaynak kodundan VPS üzerinde küçük bir mcrcon istemcisi oluşturun; bu paket Ubuntu depolarında bulunmaz. Herhangi bir firewall üzerinde 25575 portunu açmayın: RCON şifreyi açık metin olarak gönderir, bu nedenle bağlantı yalnızca loopback üzerinden kalmalıdır.
Step 10: Veri bozulmasına yol açmayan yedeklemeler
Tek kural: Sunucu veri yazarken dünya dizinini asla kopyalamayın. Bölge dosyaları oyun sırasında sürekli olarak yeniden yazılır; yazma işlemiyle çakışan bir tar, yarım yazılmış chunk içeren bir arşiv oluşturur. Yedeklemeyi geri yüklediğiniz o kritik anda, log dosyaları chunk yükleme hatalarıyla dolar ve arazide boşluklar oluşur. Bu durumu önlemek için iki yöntem mevcuttur.
Stop-copy-start yöntemi basittir ancak bir dakikalık kesintiye neden olur:
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, boyutları world, world_nether ve world_the_end olarak ayırır; vanilla sunucular her şeyi world içinde tutar, bu nedenle diğer ikisini de oraya taşıyın.)
Save-off yöntemi canlı veriyi yedekler: RCON üzerinden save-off (otomatik kaydetmeyi durdur) ve ardından save-all flush (tüm veriyi diske yazmaya zorla ve bekle) komutlarını uygulayın, tar dosyasını alın ve sonra save-on komutunu çalıştırın. Bu yöntem, saat 05:00'de cron ile çalıştırılacak olan sürümdür.
Her iki durumda da, yedek dosyasının sunucuyla aynı VPS üzerinde durması gerçek bir yedekleme değildir; arşivleri scp veya rclone ile sunucu dışına aktarın ve birden fazla yedek bulundurun. Bir sorun oluştuğunda konsolu izlemediğiniz için, port üzerinde harici bir kontrol mekanizması kurun: Başka bir makinede çalışan ve 25565 portuna TCP kontrolü yapan Uptime Kuma, sunucunun çöktüğünü oyunculardan önce size bildirir.
Eklentiler ve güncellemeler
Paper üzerinde bir eklenti kurmak, bir jar dosyasını /opt/minecraft/plugins/ dizinine atmak ve sunucuyu yeniden başlatmaktan ibarettir. Eklentileri yalnızca resmi proje sayfalarından (Hangar, Modrinth, SpigotMC) edinin. Bunun sebebi, her eklentinin minecraft kullanıcısı yetkileriyle çalışan rastgele kodlar içermesidir.
Sunucuyu güncelleme süreci şöyledir: durdur, yedek al, server.jar dosyasını yeni Minecraft sürümü için uygun olan sürümle değiştir, başlat. İki önemli husus bulunmaktadır. Dünya güncellemeleri tek yönlüdür; yeni bir sürümle açılan bir dünya, eski bir sürümde açılamaz. Bu durum yedeklerin önemini artırır. Ayrıca eklentiler, yeni bir Minecraft sürümünden günler veya haftalar sonra güncellenebilir; bu nedenle yeni bir sürüm çıktığında hemen yükleme yapmadan önce uyumluluğu kontrol edin.
Eğer tüm bu işlemleri bir konteyner olarak yönetmek isterseniz —sürüm sabitleme, EULA kabulü ve bellek bayraklarının ortam değişkenleri olarak kullanılması— yaygın olarak kullanılan itzg/minecraft-server imajı, aynı Paper sunucusunu VPS üzerinde Docker Compose kullanarak aynı güvenlik duvarı ve yedekleme disipliniyle çalıştırır.
FAQ
Minecraft sunucusu ne kadar RAM'e ihtiyaç duyar?
Vanilla sürüm için 2-5 oyuncu için 2 GB yeterlidir; Paper kullanarak birkaç eklentiyle çalışan yaklaşık on kişilik bir arkadaş sunucusu için 4 GB uygundur; mod paketleri ve 20'den fazla oyuncu için 8 GB veya daha fazlası gereklidir. VPS boyutu ne olursa olsun, -Xmx değerini toplam RAM miktarından en fazla 1 GB eksik olacak şekilde ayarlayın; JVM, heap dışında da bellek kullanır ve bu sınırı aşmak Error: Could not reserve enough space for object heap veya sessiz bir OOM kill ile sonuçlanır.
Arkadaşlarım Minecraft sunucuma neden bağlanamıyor?
Connection timed out: no further information ile sonuçlanan bir istemci donması neredeyse her zaman bir güvenlik duvarı sorununa işaret eder ve iki adet güvenlik duvarı vardır: VPS üzerindeki ufw ve sağlayıcınızın kontrol panelindeki ağ güvenlik duvarı. Her ikisinde de TCP 25565 portu açık olmalıdır. Sunucunun makine üzerinde sudo ss -tlnp | grep 25565 ile dinleme yaptığını doğrulayın, ardından dışarıdan nc -vz your.server.ip 25565 ile test edin.
server.properties dosyasında online-mode=false ayarı yapılmalı mı?
Hayır. online-mode=false ile sunucu Mojang kimlik doğrulamasını tamamen atlar; bu durumda herkes herhangi bir kullanıcı adı ile (yetkileri devralmak üzere bir adminin adı dahil) katılabilir, skinler ve kararlı UUID'ler bozulur. Tek geçerli kullanım senaryosu, oyuncuları kendisi doğrulayan Velocity gibi bir kimlik doğrulama proxy'si arkasında çalışmaktır. Normal bir sunucu için bu ayar true olarak kalmalıdır.
Paper, vanilla Minecraft sunucusundan daha mı iyidir?
Neredeyse herkes için evet: Paper, vanilla dünyaları yükleyen, modifiye edilmemiş istemcileri kabul eden, varlıkları (entities) ve chunkları çok daha verimli işleyen ve eklenti ekosistemini sunan bir jar dosyasıdır. İstisna, bazı Paper optimizasyonlarının değiştirdiği, bit-tam (bit-exact) vanilla davranışı gerektiren teknik-redstone topluluklarıdır. Küçük bir VPS üzerinde Paper'ın verimliliği, pratik olarak ücretsiz ek RAM sağlar.
Minecraft dünyasını bozmadan nasıl yedeklerim?
Sunucu veri yazarken dünya dizinini asla arşivlemeyin; bir bölge dosyasının (region-file) yazılmasıyla yarışan bir kopya, geri yükleme sırasında fark edebileceğiniz bozuk chunklar oluşturur. Ya sunucuyu durdurun, dünya dizinlerini tarleyin ve sunucuyu tekrar başlatın ya da save-off, save-all flush, tar ve RCON üzerinden save-on kullanarak sunucuyu canlı tutun. Ardından arşivi VPS dışına taşıyın.