AlmaLinux ve Rocky Linux üzerinde Minecraft sunucu kurulumu, dnf ile Java 25 sağlamak, ayrıcalıksız bir minecraft kullanıcısı açmak, sunucu jar’ını /opt/minecraft/server altına yerleştirmek, firewalld’de 25565/TCP portunu açmak ve bir systemd servisiyle sunucuyu kalıcı hale getirmekten oluşur. İki dağıtım da aynı RHEL tabanını kullandığı için aşağıdaki komutların hiçbiri arada değişmez.
RHEL tabanlı bir sistemde Debian/Ubuntu alışkanlıklarını doğrudan uygulamaya çalışmak en sık yapılan hatadır. Paket yöneticisi apt değil dnf, güvenlik duvarı UFW değil firewalld, üstelik SELinux varsayılan olarak Enforcing modda çalışıyor. Bu rehber tam olarak bu üç farkı hedef alıyor.
Tüm dağıtımları kapsayan genel bakış için Linux ve Ubuntu üzerinde Minecraft sunucu kurulumu sayfasına, apt tabanlı bir sistem kullanıyorsanız Debian üzerinde kurulum sayfasına bakabilirsiniz.
AlmaLinux mu Rocky Linux mu? Hangisini seçmeli#
İkisi de Red Hat Enterprise Linux kaynağından üretilen, ücretsiz ve uzun destekli dağıtımlardır. Paket adları, dizin yapısı, servis yönetimi ve güvenlik araçları aynıdır. Minecraft sunucusu açısından aralarında ölçülebilir bir performans farkı yoktur; hangisine alışkınsanız onu kullanın. Bu sayfadaki tüm komutlar iki sistemde de birebir çalışır.
adduser, Debian’daki gibi soru soran etkileşimli bir araç değildir; doğrudan useradd komutuna bağlı bir kısayoldur. Bu yüzden aşağıda parametreleri açıkça verilmiş useradd kullanıyoruz.Donanım gereksinimleri#
Minecraft’ın ana tick döngüsü tek çekirdek üzerinde çalışır. Çekirdek sayısını artırmak TPS’i yükseltmez; belirleyici olan çekirdek başına saat hızıdır. Bu nedenle yüksek frekanslı AMD Ryzen 9 tabanlı bir yüksek frekanslı VDS tercih edin. Dünya dosyalarının okuma/yazma gecikmesi doğrudan oyun içi takılmaya dönüştüğü için disk tarafında NVMe SSD şarttır.
| Sunucu tipi | RAM | İşlemci | Disk | JVM heap |
|---|---|---|---|---|
| 2-10 oyuncu, vanilla veya hafif eklentili | 8 GB | Ryzen 9 3900X ve üzeri | 50 GB NVMe | -Xms6G -Xmx6G |
| 10-30 oyuncu, eklentili Paper | 12 GB | Ryzen 9 7900X | 75 GB NVMe | -Xms10G -Xmx10G |
| 30-60 oyuncu, minigame veya çok dünyalı | 16 GB | Ryzen 9 7900X | 100 GB NVMe | -Xms14G -Xmx14G |
| Forge / Fabric modpack | 16-32 GB | Ryzen 9 7950X | 100 GB+ NVMe | -Xms14G / -Xms28G |
| 60+ oyuncu veya proxy’li sunucu ağı | 32 GB ve üzeri | Ryzen 9 7950X | 200 GB NVMe | -Xms28G -Xmx28G |
Heap değerini paketinizin toplam RAM’inin 2 GB altında tutuyoruz. JVM heap dışında da bellek kullanır: metaspace, iş parçacığı yığınları ve doğrudan ayrılan tamponlar. Bu payı bırakmazsanız işletim sistemi OOM killer ile sunucuyu öldürür.
Sunucuyu hazırlama: SSH, kullanıcı ve depolar#
Sunucuya SSH ile bağlanın; bağlantı ve anahtar yönetimi için SSH ile sunucuya bağlanma rehberi işinizi görür. Bağlandıktan sonra sistemi güncelleyip gerekli araçları kurun:
sudo dnf update -y
sudo dnf install -y epel-release
sudo dnf install -y wget curl tar unzip jq tmux nano policycoreutils-python-utils
epel-release paketi ek depoyu açar; screen gibi araçlar yalnızca orada bulunur. tmux temel depolarda hazır geldiği için yeni kurulumlarda onu tercih etmenizi öneririz. Terminal çoklayıcı kullanımı için screen ve tmux ile sunucuyu arka planda çalıştırma sayfasına bakın.
-
Ayrıcalıksız bir servis kullanıcısı açın#
Sunucuyu root ile çalıştırmak, tek bir kötü eklentinin tüm makineyi ele geçirmesi demektir. Parola girişi olmayan bir sistem kullanıcısı oluşturun:
sudo useradd -r -m -d /opt/minecraft -s /bin/bash minecraft sudo mkdir -p /opt/minecraft/server sudo chown -R minecraft:minecraft /opt/minecraft id minecraft -
Saat dilimini ayarlayın#
Log satırlarındaki saatlerin işe yaraması için sunucunun zaman dilimini düzeltin:
sudo timedatectl set-timezone Europe/Istanbul timedatectl -
SELinux durumunu görün#
Kuruluma başlamadan önce hangi modda olduğunuzu bilin; ileride sorun yaşarsanız buraya döneceksiniz:
getenforce sestatus
Java 25 kurulumu (dnf ve Temurin)#
Minecraft 26.1 ve sonrası Java 25 zorunlu kılar. 26.2 “Chaos Cubed” de aynı şekilde Java 25 ister. Eski bir Java ile jar’ı çalıştırmaya kalkarsanız sunucu UnsupportedClassVersionError ile açılmadan kapanır. Sürüm eşleşmesi şöyle:
| Minecraft sürümü | Gerekli Java | Durum |
|---|---|---|
| 26.1, 26.1.1, 26.1.2, 26.2 | Java 25 | Güncel |
| 1.20.5 – 1.21.11 | Java 21 | Destekleniyor |
| 1.17 – 1.20.4 | Java 17 | Eski |
| 1.16.5 ve öncesi | Java 8 | Çok eski |
Hangi sürümün neden gerektiğini Minecraft sunucusu için hangi Java sürümü gerekir sayfasında ayrıntılı anlatıyoruz. Önce deponuzda paket var mı diye bakın:
dnf list available "java-25-openjdk*"
Sonuç dönerse kurulum tek satır: sudo dnf install -y java-25-openjdk-headless. Sisteminizde birden fazla JDK varsa varsayılanı seçmek için sudo alternatives --config java kullanın. Paket bulunamıyorsa ya da sürümü kendi elinizde tutmak istiyorsanız Eclipse Temurin arşivini kurun.
-
Eclipse Temurin JDK 25LTS · Önerilenİndir
-
Amazon Corretto 25 (alternatif JDK)İndir
-
Paper 26.2 sunucu jarÖnerilenİndir
Bağlantılar resmî kaynaklara gider. Üçüncü taraf sitelerden jar indirmeyin.
Temurin arşivini elle kurma#
Adoptium sayfasından “Linux x64 / JDK” için .tar.gz bağlantısını kopyalayın ve şu adımları izleyin:
cd /tmp
wget -O temurin25.tar.gz "KOPYALADIGINIZ_TAR_GZ_ADRESI"
sudo mkdir -p /opt/java
sudo tar -xzf temurin25.tar.gz -C /opt/java
sudo ln -sfn /opt/java/jdk-25.0.4+7 /opt/java/current
sudo alternatives --install /usr/bin/java java /opt/java/current/bin/java 2500
java -version
Sembolik bağ sayesinde ileride yeni bir Java sürümüne geçerken yalnızca ln -sfn satırını tekrarlamanız yeterli olur; start.sh içindeki yolu değiştirmeniz gerekmez. Dağıtım bazlı tüm Java kurulum yolları için Linux’a Java 25 kurulumu sayfasına bakın.
Paper 26.2 jar’ını indirme ve başlatma betiği#
Vanilla jar yerine Paper kullanın: aynı oyun içeriğini belirgin biçimde daha yüksek TPS ile sunar ve eklenti desteği getirir. Paper’ın build numarası sık değiştiğinden dosya adını sabitlemeyip resmî Fill API’sinden en güncel yapıyı çekmek en temiz yöntemdir:
sudo -u minecraft -s
cd /opt/minecraft/server
URL=$(curl -s https://fill.papermc.io/v3/projects/paper/versions/26.2/builds/latest | jq -r '.downloads."server:default".url')
wget -O paper.jar "$URL"
ls -lh paper.jar
Şimdi başlatma betiğini yazın. Aşağıdaki bayrak seti PaperMC’nin resmî olarak önerdiği Aikar’s Flags setidir ve 26.x sunucularında hâlâ geçerlidir. 8 GB’lık bir pakette heap -Xms6G -Xmx6G olmalıdır:
#!/bin/bash
cd /opt/minecraft/server
exec /opt/java/current/bin/java \
-Xms6G -Xmx6G \
--add-modules=jdk.incubator.vector \
-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M \
-XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 \
-XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 \
-XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 \
-jar paper.jar --nogui
chmod +x /opt/minecraft/server/start.sh
./start.sh
sed -i 's/eula=false/eula=true/' /opt/minecraft/server/eula.txt
./start.sh
İlk çalıştırma eula.txt dosyasını üretip kapanır; ikinci çalıştırmada dünya oluşur ve konsolda Done satırını görürsünüz. 12 GB’ın üzerinde heap kullanacaksanız Aikar setinde G1NewSizePercent=40, G1MaxNewSizePercent=50, G1HeapRegionSize=16M ve InitiatingHeapOccupancyPercent=20 değerlerine geçin. Bayrakların tamamının ne işe yaradığını RAM ayarları ve JVM flag’leri sayfasında bulabilirsiniz.
-XX:+UseZGC yazın; -XX:+ZGenerational bayrağı Java 25’te obsolete’tir.firewalld ile 25565 portunu açma#
AlmaLinux ve Rocky Linux’ta güvenlik duvarı firewalld ile yönetilir. Kural eklerken --permanent parametresini unutursanız ilk yeniden başlatmada kural kaybolur ve oyuncular bağlanamaz.
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-port=25565/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
Bedrock istemcilerini Geyser ile kabul edecekseniz 19132/UDP portunu da açın. RCON kullanıyorsanız 25575 portunu herkese açmak yerine yalnızca kendi IP adresinize izin veren bir zengin kural yazın:
sudo firewall-cmd --permanent --add-port=19132/udp
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="SIZIN_IP_ADRESINIZ" port port="25575" protocol="tcp" accept'
sudo firewall-cmd --reload
Sunucunun portu gerçekten dinleyip dinlemediğini sudo ss -tulpn | grep 25565 ile doğrulayabilirsiniz. Zone mantığı ve daha ileri kural yazımı için sunucu güvenlik duvarı yapılandırması sayfasına bakın.
SELinux ile çalışmak (kapatmadan)#
AlmaLinux ve Rocky Linux’ta SELinux varsayılan olarak Enforcing modda gelir. İyi haber şu: hedefli (targeted) politikada, kendi yazdığınız bir systemd servisi için tanımlı bir politika bulunmadığından süreç kısıtlanmamış alanda çalışır. Bu yüzden /opt/minecraft altında standart bir kurulumda SELinux genellikle hiç engel çıkarmaz.
Yine de dosyaları başka bir makineden kopyaladıysanız veya /tmp üzerinden taşıdıysanız etiketler bozulabilir. Doğru refleks SELinux’u kapatmak değil, etiketleri onarmaktır:
sudo restorecon -Rv /opt/minecraft
sudo ausearch -m AVC -ts recent
sudo semanage port -l | grep 25565
İlk komut dosya bağlamlarını politikanın beklediği hâle döndürür. İkincisi son dakikalarda üretilmiş erişim reddi kayıtlarını listeler; bir sorun varsa nedenini burada okursunuz. Üçüncüsü, portun politika içinde tanımlı olup olmadığını gösterir.
Pratikte SELinux’un iş çıkardığı üç durum var. Birincisi, sunucu dosyalarını /root altında oluşturup sonra /opt içine taşımak: taşınan dosyalar eski bağlamını korur, restorecon bunu düzeltir. İkincisi, sunucu dizinini /home altına koymak; bu durumda ev dizini bağlamları devreye girer ve harici erişimlerde reddedilme görebilirsiniz. Üçüncüsü, kendi yazdığınız yardımcı betikleri /tmp içinden çalıştırmak. Üçünün de çözümü aynı: dosyaları /opt/minecraft altında tutun ve şüphelendiğinizde etiketleri onarın.
ls -Z /opt/minecraft/server
sudo ausearch -m AVC -ts today | grep -i minecraft
setenforce 0 ya da /etc/selinux/config içinde SELINUX=disabled yazmak sorunu çözmez, yalnızca gizler ve sunucunuzun tüm zorunlu erişim denetimi katmanını kaldırır. Herkese açık bir Minecraft sunucusunda bu ciddi bir güvenlik kaybıdır.systemd servisi ile 7/24 çalıştırma#
SSH oturumu kapandığında sunucunun da kapanmaması için servis tanımlayın:
sudo nano /etc/systemd/system/minecraft.service
[Unit]
Description=Minecraft Paper Sunucusu
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft/server
ExecStart=/opt/minecraft/server/start.sh
Restart=on-failure
RestartSec=15s
LimitNOFILE=1048576
KillSignal=SIGINT
TimeoutStopSec=90
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
systemctl status minecraft --no-pager
journalctl -u minecraft -f
KillSignal=SIGINT satırı Paper’ın düzgün kapanmasını, dolayısıyla dünyanın kaydedilmesini sağlar. Servisi tmux oturumu içinde çalıştırmak ya da RCON açmak isterseniz systemd servisi ile otomatik başlatma sayfasındaki iki yöntemi inceleyin.
server.properties, eklentiler ve yedekleme#
Sunucu ilk kez açıldıktan sonra ayarları düzenleyin. Aşağıdaki değerler 8-12 GB’lık bir sunucu için makul bir başlangıç noktasıdır:
server-port=25565
motd=§bBatihost §fMinecraft Sunucusu
max-players=40
online-mode=true
view-distance=8
simulation-distance=6
enable-command-block=false
network-compression-threshold=256
Anahtarların tamamı ve etkileri için server.properties ayarları tam listesi sayfasına bakın. Eklentileri /opt/minecraft/server/plugins klasörüne atıp sunucuyu yeniden başlatmanız yeterlidir; ayrıntılar plugin kurulumu rehberinde.
Dünya klasörü geri getirilemeyecek tek veridir, günlük yedek alın:
sudo -u minecraft mkdir -p /opt/minecraft/backups
sudo -u minecraft tee /opt/minecraft/backup.sh >/dev/null <<'EOF'
#!/bin/bash
TARIH=$(date +%Y-%m-%d_%H%M)
cd /opt/minecraft/server
tar -czf /opt/minecraft/backups/dunya_$TARIH.tar.gz world world_nether world_the_end
find /opt/minecraft/backups -name "dunya_*.tar.gz" -mtime +7 -delete
EOF
sudo chmod +x /opt/minecraft/backup.sh
sudo -u minecraft crontab -e
# Dosyanın sonuna ekleyin:
30 4 * * * /opt/minecraft/backup.sh
Yedeği aynı diskte tutmak yeterli değildir; en az bir kopyayı başka bir makinede saklayın. Strateji için Minecraft sunucu yedekleme rehberine göz atın. Güvenlik güncellemelerini otomatikleştirmek isterseniz:
sudo dnf install -y dnf-automatic
sudo systemctl enable --now dnf-automatic.timer
systemctl list-timers dnf-automatic --no-pager
Sunucuyu test etme ve izleme#
Servis ayağa kalktıktan sonra üç kontrolü sırayla yapın. Önce portun dinlendiğini doğrulayın, sonra logun son satırlarına bakın, en sonunda oyun istemcisiyle bağlanın:
sudo ss -tulpn | grep 25565
systemctl is-active minecraft
tail -n 20 /opt/minecraft/server/logs/latest.log
ss çıktısında 0.0.0.0:25565 görüyorsanız sunucu tüm arayüzlerden bağlantı bekliyor demektir. Yalnızca 127.0.0.1 görünüyorsa server.properties içindeki server-ip satırı doldurulmuştur; boşaltıp servisi yeniden başlatın.
Kaynak kullanımını izlemek için ek bir araç kurmanıza gerek yok. systemd-cgtop servis bazında CPU ve bellek tüketimini gösterir; journalctl ise konsol çıktısının tamamını tutar. Bellek baskısını anlamak istiyorsanız:
systemd-cgtop --order=memory
free -h
journalctl -u minecraft --since "1 hour ago" --no-pager | grep -i "can't keep up"
Son komut, sunucunun tick süresini yetiştiremediği anları listeler. Bu uyarı sık tekrarlıyorsa önce view-distance değerini düşürün, sonra eklenti listenizi gözden geçirin; sorun sürüyorsa daha yüksek saat hızlı bir işlemciye geçmek gerekir.
RHEL tabanlı sistemlerde sık karşılaşılan sorunlar#
- No match for argument: screen
screenana depolarda yok.sudo dnf install -y epel-releaseile EPEL’i ekleyin ya da temel depolarda hazır gelentmuxkullanın.- adduser soru sormadan kullanıcı oluşturdu
- RHEL tabanlı sistemlerde
adduser,useradd’in kısayoludur. Ev dizini, kabuk ve sistem kullanıcısı seçeneklerini parametrelerle kendiniz vermelisiniz. - java: command not found (servis içinde)
- systemd kabuk profillerini okumaz.
start.shiçinde Java’yı/opt/java/current/bin/javagibi tam yolla çağırın. - Oyuncular bağlanamıyor, sunucu açık
- Kuralı
--permanentolmadan eklemiş olabilirsiniz.firewall-cmd --list-allçıktısında 25565/tcp görünmüyorsa kuralı yeniden ekleyip--reloadyapın. - Servis başlıyor, hemen kapanıyor
journalctl -u minecraft -n 80 --no-pagerçıktısına bakın. En sık nedenler: EULA kabul edilmemiş, port başka bir süreç tarafından tutuluyor ya da dosya sahipliğiminecraftkullanıcısında değil.
sudo chown -R minecraft:minecraft /opt/minecraft. Root olarak indirdiğiniz bir jar’ı servis kullanıcısı okuyamayacağı için bu adım kurulumların yarısında gerekiyor.Kendiniz mi kuracaksınız, hazır paket mi?#
Her şeyi elle kurmak size tam kontrol verir; bunun için Türkiye lokasyonlu, Ryzen 9 tabanlı bir VDS paketi yeterlidir. SELinux, firewalld ve systemd yönetimiyle uğraşmak istemiyorsanız panel üzerinden birkaç dakikada açılan hazır Minecraft sunucu paketleri Java sürümü, port ve yedekleme işlerini sizin yerinize halleder.
Özetle#
AlmaLinux ve Rocky Linux üzerinde Minecraft sunucu kurulumu altı adımdan oluşuyor: useradd -r ile ayrıcalıksız bir kullanıcı açmak, dnf veya Temurin arşivinden Java 25 kurmak, Paper 26.2 jar’ını /opt/minecraft/server altına indirmek, Aikar bayraklarıyla bir start.sh yazmak, firewall-cmd --permanent --add-port=25565/tcp ile portu açmak ve systemd servisiyle sunucuyu kalıcı hâle getirmek.
RHEL tabanının üç farkını aklınızda tutun: paket yöneticisi dnf, güvenlik duvarı firewalld, güvenlik katmanı SELinux. Bu üçünü Debian alışkanlıklarıyla değil kendi araçlarıyla yönetirseniz kurulum sorunsuz ilerler. Donanımda 8 GB RAM, yüksek saat hızlı Ryzen 9 ve NVMe SSD alt sınırınız olsun; heap değerini paketin 2 GB altında tutun.