- VPS'te Minecraft sunucusu kurmadan önce bilmeniz gerekenler
- VPS seçerken CPU ve RAM hesabı
- İlk hazırlık: kullanıcı, güncellemeler ve SSH
- Java sürümünü kurmak
- Paper sunucu dosyalarını yerleştirme
- RAM ayarı, görüş mesafesi ve performans
- systemd ile servisi kalıcı çalıştırma
- Firewall ve Minecraft portu
- Alan adıyla bağlanmak ve DNS kontrolü
- Whitelist, OP ve eklenti kurulumu
- Yedekleme olmadan sunucu kuruldu sayılmaz
- İzleme ve sık karşılaşılan sorunlar
- Kurulumdan sonra son kontroller
- Sık Sorulan Sorular
VPS’te Minecraft sunucusu kurmadan önce bilmeniz gerekenler
Minecraft sunucusu ilk oyuncular bağlanana kadar olduğundan daha kolay görünür. Dosyalar yerindedir, port açıktır, konsol da sakindir. Sonra birkaç kişi farklı yönlere keşfe çıkar; CPU kullanımı, RAM tüketimi, disk gecikmesi ve ağ kararlılığı aynı anda kendini göstermeye başlar.
Bu nedenle VPS Minecraft sunucusu kurarken oyun dosyasından önce kaynak planlamasına bakıyorum. Aşağıdaki adımlarda Ubuntu Server 24.04 LTS ve Minecraft Java Edition 1.21.x için Paper kullanacağım. Paper, vanilla sunucuya göre performans ayarları ve eklenti desteği açısından pratik bir seçim. Vanilla kullanacaksanız sunucu JAR dosyasıyla başlatma komutu değişir; kullanıcı, firewall ve yedekleme adımları aynı kalır.
VPS seçerken CPU ve RAM hesabı
Minecraft işlemci hızına duyarlı bir oyun sunucusu. Tek bir dünyanın ana oyun döngüsü, çok çekirdekli bir işlemciden beklediğiniz kadar yararlanmayabilir. Bu yüzden yalnızca sağlayıcının “8 vCPU” ifadesine bakmayın; CPU paylaşım politikasını, işlemci neslini ve disk türünü de sorun.
| Oyuncu ve kullanım | Önerilen RAM | Not |
|---|---|---|
| 2-5 oyuncu, az eklenti | 2 GB | Yeni dünya ve düşük görüş mesafesiyle mümkün |
| 5-10 oyuncu, Paper | 4 GB | Küçük arkadaş sunucusu için dengeli başlangıç |
| 10-20 oyuncu, eklentili | 6-8 GB | Harita üretimi ve eklenti sayısı yakından izlenmeli |
| Mod paketi veya yoğun dünya | 8 GB ve üzeri | Modların kendi bellek gereksinimleri ayrıca hesaplanmalı |
Bu değerler garanti değil, başlangıç noktasıdır. Oyuncu sayısı kadar dünya üretimi, görüş mesafesi, mob sayısı ve eklentilerin davranışı da belirleyici olur. VPS’te başka servisler çalışıyorsa Minecraft’a ayrılacak RAM’i fiziksel belleğin tamamı gibi düşünmeyin.
4 GB RAM’li bir VPS’te işletim sistemi, SSH, monitoring ve dosya önbelleği için en az 700-1000 MB bırakırım. Java heap’ini -Xmx3G yapıp makinenin tamamını oyuna vermek, kısa vadede yüksek rakam gösterse de swap kullanımını artırabilir. Swap eksikse VPS’te Swap Alanı Oluşturma ve Linux Bellek Yönetimi yazısındaki yaklaşım işinize yarayabilir; swap’i RAM yerine koymayın.
İlk hazırlık: kullanıcı, güncellemeler ve SSH
VPS’e root olarak bağlanıp her komutu doğrudan çalıştırmak kolaydır. Bir eklenti yanlış izinle dosya silerse hangi sürecin ne yaptığını ayırmak zorlaşır. Minecraft’ı ayrı bir kullanıcıyla çalıştırmak, gereksiz yetkileri sınırlayan basit bir başlangıçtır.
ssh root@SUNUCU_IP
apt update && apt full-upgrade -y
apt install -y sudo
adduser --disabled-password --gecos "" minecraft
usermod -aG sudo minecraft
hostnamectl set-hostname mc-01
Buradaki mc-01 değerini kendi sunucu adınızla değiştirin. Production prompt’larım kırmızı, test makinelerim farklı hostname kullanıyor. Bir keresinde yanlış sunucuda rm -rf komutuna çok yaklaşmıştım; terminalde beliren hostname son anda durmamı sağladı. O günden beri hostname kontrolünü alışkanlık değil, işlem öncesi kontrol olarak görüyorum.
SSH anahtarıyla giriş yapıyorsanız yeni kullanıcıya anahtarınızı kopyalayın:
ssh-copy-id minecraft@SUNUCU_IP
Yeni kullanıcıyla açılan oturumu test etmeden root SSH erişimini kapatmayın. Bağlantının çalıştığından emin olduktan sonra /etc/ssh/sshd_config içinde root ve parola girişini sınırlandırabilirsiniz:
PermitRootLogin no
PasswordAuthentication no
Değişiklikten önce yapılandırmayı doğrulayın:
sshd -t && systemctl reload ssh
SSH portunu değiştirmek tek başına güvenlik değildir. Ben fail2ban ve nftables kullanmayı, logları okuyarak hangi saldırının gerçekten geldiğini görmeyi tercih ediyorum. Minecraft portunu internete açacağımız için Linux Sunucu Güvenliği için Zorunlu 10 Temel Adım yazısındaki temel kontrolleri de atlamayın.
Java sürümünü kurmak
Minecraft sürümüyle Java sürümünün eşleşmesi gerekir. 1.20.5 ve sonrası sürümlerde Java 21, benim kullandığım Paper sürümlerinde güvenli başlangıç noktası oldu. Dağıtım depolarındaki OpenJDK paketini tercih ediyorum; üçüncü taraf kurulum betiğini root olarak çalıştırmak yerine paket yöneticisinin iz bırakması daha rahat.
apt install -y openjdk-21-jre-headless curl wget unzip ufw
java -version
Çıktıda Java 21 görmelisiniz. Örneğin openjdk version "21.0.x" satırı beklenir. Sunucunuz Minecraft 1.20.4 veya daha eski bir sürüm çalıştıracaksa Java 17 gerekebilir; JAR dosyasının ve Paper dokümantasyonunun istediği sürümü kontrol edin.
JRE sunucuyu çalıştırmak için yeterlidir. Derleme yapmayacağımız için tam JDK kurmak bu kurulumda gerekli değil.
Paper sunucu dosyalarını yerleştirme
Şimdi Minecraft kullanıcısına geçip çalışma dizinini oluşturuyorum. Dizin yapısını baştan düzenli kurmak, sürüm değişikliği ve yedekleme sırasında zaman kazandırır.
su - minecraft
mkdir -p /home/minecraft/server
cd /home/minecraft/server
wget -O paper.jar 'PAPER_DOWNLOAD_URL'
ls -lh paper.jar
PAPER_DOWNLOAD_URL yerine Paper’ın resmi indirme sayfasında seçtiğiniz Minecraft sürümüne ait bağlantıyı koyun. URL’yi burada sabitlemiyorum; Paper sürümleri değişiyor. Rastgele bir JAR indirmek yerine yayımlanan dosyanın SHA-256 değerini kontrol edin.
sha256sum paper.jar
Çıktıyı Paper’ın yayımladığı hash ile karşılaştırın. Değer eşleşmiyorsa dosyayı çalıştırmayın. Bu kontrol birkaç saniye sürer.
İlk başlatma sırasında EULA dosyası oluşturulacağı için sunucu hemen kapanabilir:
cd /home/minecraft/server
java -Xms2G -Xmx3G -jar paper.jar --nogui
Sunucu ilk çalışmada eula.txt oluşturur ve EULA kabul edilmediği için kapanır. Dosyayı okuyup kabul ediyorsanız değeri değiştirin:
sed -i 's/^eula=false$/eula=true/' eula.txt
EULA’yı kabul etmeden önce metni okuyun. Ardından başlatma komutunu yeniden çalıştırarak dünyanın oluşmasını bekleyin. Harita ilk açılışta üretildiği için disk ve CPU kullanımı kısa süreliğine yükselir.
RAM ayarı, görüş mesafesi ve performans
-Xms başlangıç heap’ini, -Xmx ise Java’nın kullanabileceği üst sınırı belirler. Küçük bir VPS’te ikisini aynı yapmak şart değil. İşletim sistemi için çok az RAM bırakıyorsanız büyük başlangıç heap’i sistemi sıkıştırabilir.
4 GB RAM’li bir makinede çoğunlukla -Xms2G -Xmx3G ile başlarım. 8 GB RAM’de eklenti ve oyuncu sayısına göre 5-6 GB ayırabilirim. Heap’i büyütmek her performans sorununu çözmez. Ana işlemci çekirdeği chunk üretiminde yetişemiyorsa 12 GB heap de TPS değerini sihirli biçimde düzeltmez.
server.properties içinde başlangıç için şu değerleri kullanabilirsiniz:
view-distance=8
simulation-distance=6
online-mode=true
motd=Arkadaslarin Minecraft Sunucusu
max-players=10
view-distance oyuncuya gönderilen chunk alanını, simulation-distance ise canlıların ve redstone gibi mekaniklerin etkin olduğu alanı etkiler. İki değeri gereksiz yere yükseltmek, özellikle küçük VPS’lerde işlemci yükünü artırır. Önce makul bir değerle başlayıp gerçek oyuncu davranışına göre ayarlayın.
Performans sorununda önce ölçüm yapın. Paper konsolundaki tick sürelerini, işletim sistemi yükünü ve oyuncu hareketini birlikte inceleyin. Sadece RAM kullanımına bakarak “bellek yetmiyor” demek, vardiyalarda sık gördüğüm yanlış teşhislerden biri.
systemd ile servisi kalıcı çalıştırma
SSH oturumunu açık bırakıp java komutunu terminalden çalıştırmak test için uygundur, canlı sunucu için değil. SSH bağlantısı koptuğunda oturumu korumak için tmux kullanılabilir. Yeniden başlatma, servis durumu ve log takibi için systemd daha düzenli bir çözüm.
Root yetkisiyle servis dosyasını oluşturun:
exit
vim /etc/systemd/system/minecraft.service
[Unit]
Description=Minecraft Paper Server
After=network-online.target
Wants=network-online.target
[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/home/minecraft/server
ExecStart=/usr/bin/java -Xms2G -Xmx3G -jar paper.jar --nogui
Restart=on-failure
RestartSec=10
TimeoutStopSec=60
[Install]
WantedBy=multi-user.target
User=minecraft satırı kritik. Servis root olarak çalışmadığı için sunucu içindeki bir açık işletim sisteminin tamamına doğrudan erişim sağlamaz. Tam bir güvenlik sınırı değildir; gereksiz yetkiyi yine de ortadan kaldırır.
systemctl daemon-reload
systemctl enable --now minecraft
systemctl status minecraft --no-pager
Durum çıktısında active (running) görmelisiniz. Sorun varsa servisi tekrar tekrar başlatmayın; önce loga bakın:
journalctl -u minecraft -n 100 --no-pager
journalctl -u minecraft -f
Kernel güncellemesinden sonra açılmayan bir sunucuda rescue mode ve chroot ile uğraşırken snapshot’ın değerini yeniden öğrenmiştim. Minecraft tarafında da Java veya eklenti değişikliğinden önce VPS snapshot’ı almak iyi bir sigorta. Sigorta, hasar olduktan sonra değil, önce işe yarar.
Firewall ve Minecraft portu
Minecraft Java Edition varsayılan olarak TCP 25565 portunu kullanır. UFW ile yalnızca gerekli trafiği açın:
ufw default deny incoming
ufw default allow outgoing
ufw allow OpenSSH
ufw allow 25565/tcp
ufw enable
ufw status verbose
SSH portunuz standart değilse OpenSSH yerine gerçek portu yazın. Firewall’u etkinleştirmeden önce mevcut SSH oturumunuzu kapatmadan yeni bir bağlantıyı doğrulayın. Aksi halde kendinizi VPS’ten dışarıda bırakabilirsiniz.
Bedrock oyuncuları bağlanacaksa Java sunucusu tek başına yeterli değildir. GeyserMC gibi bir köprü ve çoğunlukla UDP portu gerekir. Yalnızca Java Edition hedefliyorsanız gereksiz UDP kuralı açmayın.
Alan adıyla bağlanmak ve DNS kontrolü
Oyunculara IP adresi vermek yerine bir alt alan adı kullanmak daha rahat olur. DNS’te mc.ornek.com için VPS IPv4 adresine bir A kaydı ekleyin. IPv6 kullanıyorsanız AAAA kaydının da doğru sunucuya gittiğini kontrol edin; yanlış AAAA kaydı bazı oyuncuların bağlanamamasına yol açabilir.
dig +short A mc.ornek.com
dig +short AAAA mc.ornek.com
DNS sorunlarında önce panele değil terminale giderim. dig +short beklediğiniz IP’yi vermiyorsa Minecraft ayarını kurcalamanın faydası yok. Port varsayılan değilse oyuncuların mc.ornek.com:25570 gibi tam adres kullanması gerekir. SRV kaydıyla portu gizlemek mümkün olsa da ilk kurulumda A kaydı daha basit.
Whitelist, OP ve eklenti kurulumu
Sunucu ilk açıldığında kendinizi OP yapmak için konsola şu komutları yazabilirsiniz:
op OYUNCU_ADI
whitelist on
whitelist add OYUNCU_ADI
save-all
Sunucuyu internete açtığınız anda whitelist kullanmak, tanımadığınız oyuncuların dünyaya girmesini engeller. OP yetkisini yalnızca ihtiyaç duyan hesaplara verin. Eklenti yöneticileri de root değildir; kötü veya güncel olmayan bir eklenti yine dosya sistemine zarar verebilir. Kaynağı belirsiz JAR dosyalarını canlı sunucuda denemeyin.
Paper eklentileri /home/minecraft/server/plugins dizinine kopyalanır:
install -d -o minecraft -g minecraft /home/minecraft/server/plugins
systemctl stop minecraft
cp eklenti.jar /home/minecraft/server/plugins/
chown minecraft:minecraft /home/minecraft/server/plugins/eklenti.jar
systemctl start minecraft
Bu komutları root yetkisiyle çalıştırın. Birden fazla eklentiyi aynı anda eklemek yerine tek tek ekleyin; sorun çıkarsa hangi değişikliğin sebep olduğunu bilirsiniz. Konteyner tabanlı yönetim istiyorsanız VPS’te Docker Kurulumu ve İlk Konteyneri Çalıştırma yazısındaki yöntemi inceleyebilirsiniz. Docker kullanmak Java, disk ve yedekleme sorumluluğunu ortadan kaldırmaz.
Yedekleme olmadan sunucu kuruldu sayılmaz
Minecraft dünyası oyuncuların saatlerini içerir. Sunucu çalışıyor diye verinin güvende olduğunu varsaymayın. Disk arızası, yanlış eklenti, bozuk chunk veya yetkisini kötüye kullanan bir oyuncu dünyayı kullanılmaz hale getirebilir.
En azından dünya klasörlerini düzenli yedekleyin. Yedek sırasında veri tutarlılığı için konsoldan kaydetme ve kısa durdurma tercih edilebilir:
systemctl stop minecraft
tar -czf /var/backups/minecraft-$(date +%F).tar.gz
-C /home/minecraft/server world world_nether world_the_end server.properties whitelist.json ops.json
systemctl start minecraft
Bu örnek yerel yedek oluşturur. Aynı VPS’in diskine yazılan dosya, VPS tamamen kaybolduğunda sizi kurtarmaz. Harici depolamaya rsync veya borgbackup ile kopyalayın. Yedek dosyasını bir kez oluşturup hiç geri yüklememek, benim için test edilmemiş yedektir. Ayda bir geçici bir dizine açıp dünyanın gerçekten okunabildiğini kontrol edin.
Otomatik yedek için cron kullanılabilir; zamanlamayı iki kez kontrol edin. Bir cron satırına fazladan yıldız koyduğum bir dönemde yedek script’i her dakika çalışmış, ardından posta kuyruğu büyümüştü. Küçük bir sözdizimi hatası, sunucu yönetiminde beklenenden pahalı olabilir.
İzleme ve sık karşılaşılan sorunlar
Uptime Kuma yalnızca sunucunun portuna bağlantıyı kontrol eder; oyun performansının iyi olduğunu göstermez. CPU, RAM, disk kullanımı ve disk gecikmesini node_exporter ile Prometheus’a gönderip Grafana’da izlemek daha açıklayıcıdır. Ev lab’ımda bir fan arızası sırasında sıcaklık grafiği basamak basamak yükselmişti. Sorunu oyuncular söylemeden önce grafik haber verdi.
Disk doluluğunu kontrol etmek için:
df -h
ncdu -x /home/minecraft/server
ncdu -x başka dosya sistemlerine geçmeden gerçek tüketimi gösterir. Dünya klasörü beklenmedik biçimde büyüyorsa harita üretimini, log dosyalarını ve eklenti cache’lerini inceleyin.
Servis çalışıyor ama bağlantı yoksa:
systemctl status minecraft --no-pager
ss -ltnp | grep 25565
ufw status
mtr -rwzbc 20 mc.ornek.com
ss çıktısında Java sürecinin portu dinlediğini görmelisiniz. Port dinleniyor, firewall açık ve DNS doğru olduğu halde gecikme varsa mtr ile ağ yolunu inceleyin. Her paket kaybı Minecraft sunucusundan kaynaklanmaz; bazı ara yönlendiriciler ICMP paketlerini kısıtlayabilir.
Oyuncular “lag var” dediğinde TPS, CPU ve ağ gecikmesini birbirinden ayırın. Görüş mesafesini düşürmek işlemci yükünü azaltabilir; yüksek ping sorununu çözmez. RAM’i artırmak da bozuk bir eklentinin oluşturduğu entity kalabalığını ortadan kaldırmaz.
Kurulumdan sonra son kontroller
- Java sürümü, Minecraft ve Paper sürümüyle uyumlu mu?
- Sunucu root yerine
minecraftkullanıcısıyla mı çalışıyor? systemctl enable minecraftile yeniden başlatma sonrası otomatik açılacak mı?- UFW yalnızca SSH ve gerekli Minecraft portunu mu açıyor?
- Whitelist etkin mi, OP hesapları sınırlı mı?
- Harici konuma alınan ve geri yüklemesi test edilen bir yedek var mı?
- CPU, RAM, disk ve servis durumu için alarm tanımlı mı?
Bu soruların hepsine “evet” diyemiyorsanız sunucuyu oyunculara duyurmak için biraz bekleyin. Ben de bazen “şimdilik çalışıyor” diyerek izleme ve yedekleme kısmını sonraya bırakıyorum; sonra küçük bir bakım işi gece vardiyasına dönüşüyor.
Sık Sorulan Sorular
Minecraft sunucusu için kaç GB RAM gerekir?
Az eklentili 2-5 oyunculu bir Java sunucusu için 2 GB ile başlanabilir, fakat işletim sistemi için de bellek bırakılmalıdır. Oyuncu sayısı, modlar, görüş mesafesi ve dünya üretimi arttıkça 4 GB veya daha fazlası gerekebilir.
VPS’te Minecraft sunucusu için hangi Java sürümü kullanılmalı?
Minecraft 1.20.5 ve daha yeni sürümlerde genellikle Java 21, daha eski sürümlerde çoğunlukla Java 17 kullanılır. Kesin sürümü Paper’ın ilgili sürüm notları ve sunucu başlatma çıktısıyla doğrulayın.
Minecraft sunucusuna alan adı nasıl bağlanır?
Alt alan adınız için VPS IPv4 adresine bir A kaydı ekleyebilirsiniz. Sunucu 25565 dışında bir port kullanıyorsa oyuncular portu adresin sonuna yazmalı veya uygun bir SRV kaydı tanımlanmalıdır.
Sunucuyu kapatmadan yedek almak mümkün mü?
Mümkün, fakat dünya verisi yazılırken alınan kopya tutarsız olabilir. Küçük sunucularda save-all sonrası kısa bir durdurma en güvenli yöntemdir; daha gelişmiş kurulumlarda dosya sistemi snapshot’ı ve geri yükleme testi kullanılabilir.
Benim için kurulumun bittiği an, oyuncunun bağlandığı an değil; sunucunun yeniden başladıktan sonra kendiliğinden açıldığı ve yedeğin gerçekten geri döndüğü andır. Bu iki testi yapmadan IP adresini arkadaş grubuna göndermiyorum.
Türkçe
English
فارسی
Русский