TürkiyeVPS

راه‌اندازی سرور ماینکرفت: گام به گام روی VPS لینوکس (Java Edition)

یک سرور Minecraft Java Edition برای بازی با دوستانتان را از صفر روی Ubuntu 24.04 راه‌اندازی کنید: Java 21، server.jar یا Paper، تنظیمات حافظه، فایروال، سرویس systemd و پشتیبان دنیا.

8 دقیقه مطالعه

وقتی سرور ماینکرفت خودتان را دارید، قوانین را خودتان تعیین می‌کنید: چه کسی می‌تواند وارد شود، کدام افزونه‌ها اجرا شوند و دنیا چه زمانی پشتیبان‌گیری شود. می‌توان روی رایانه خانگی هم سرور راه انداخت، اما با خاموش شدن رایانه بازی هم قطع می‌شود و باید با تنظیم port forwarding در مودم هم درگیر شوید. یک VPS لینوکسی شبانه‌روز روشن می‌ماند و یک آدرس IP ثابت دارد.

در این راهنما یک سرور Minecraft: Java Edition روی Ubuntu 24.04 راه‌اندازی می‌کنیم. Bedrock Edition (نسخه موبایل، کنسول و ویندوز) به نرم‌افزار سرور جداگانه‌ای نیاز دارد؛ مراحل این راهنما برای Java Edition است.

۱. Java 21 را نصب کنید

با SSH به سرور متصل شوید. Minecraft نسخه 1.20.5 و بالاتر دست‌کم به Java 21 نیاز دارد. این نسخه در مخازن Ubuntu 24.04 موجود است؛ چون سرور رابط گرافیکی ندارد، بسته «headless» کافی است:

sudo apt update && sudo apt upgrade -y
sudo apt install -y openjdk-21-jre-headless
java -version

در خروجی باید openjdk version "21... را ببینید. نسخه‌های آینده ماینکرفت ممکن است Java جدیدتری بخواهند. اگر هنگام اجرای سرور خطای UnsupportedClassVersionError گرفتید، نسخه Java مورد نیاز را در یادداشت‌های انتشار بررسی کنید و با apt search openjdk ببینید چه نسخه‌هایی در مخزن وجود دارد.

اگر با خط فرمان تازه آشنا شده‌اید، ابتدا مقاله دستورهای پایه لینوکس را بخوانید.

۲. یک کاربر جداگانه بسازید

سرور را با root اجرا نکنید. اگر در یک افزونه یا نرم‌افزار سرور حفره‌ای پیدا شود، مهاجم باید فقط به فایل‌های همین کاربر دسترسی پیدا کند:

sudo adduser --system --group --home /opt/minecraft minecraft
sudo -u minecraft mkdir -p /opt/minecraft/server

۳. فایل سرور را دانلود کنید

دو گزینه رایج وجود دارد:

  • سرور رسمی (vanilla): سرور دست‌نخورده‌ای که Mojang منتشر می‌کند. به صفحه «Download Minecraft: Java Edition Server» در minecraft.net بروید و پیوند server.jar را کپی کنید. چون این پیوند با هر نسخه تغییر می‌کند، اینجا نشانی ثابتی نمی‌دهیم.
  • Paper: نرم‌افزار سروری که از papermc.io دانلود می‌شود، بهبودهای کارایی دارد و می‌تواند افزونه‌های Bukkit/Spigot را اجرا کند. اگر افزونه می‌خواهید یا با افزایش تعداد بازیکنان کارایی برایتان مهم است، بیشتر افراد Paper را انتخاب می‌کنند. پیوند نسخه دلخواه را از صفحه دانلود Paper کپی کنید.

فایل را با پیوندی که کپی کرده‌اید دانلود کنید و با نام server.jar ذخیره کنید:

cd /opt/minecraft/server
sudo -u minecraft wget -O server.jar "KOPYALADIGINIZ_BAGLANTI"

به جای KOPYALADIGINIZ_BAGLANTI پیوندی را که کپی کرده‌اید قرار دهید.

۴. اجرای نخست و EULA

سرور را یک بار به صورت دستی اجرا کنید. در نخستین اجرا فایل‌های لازم را می‌سازد و چون EULA پذیرفته نشده، بسته می‌شود:

sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar nogui

پس از خواندن توافق‌نامه مجوز کاربر نهایی ماینکرفت (EULA)، آن را بپذیرید:

sudo -u minecraft sed -i 's/eula=false/eula=true/' eula.txt

۵. تنظیمات حافظه: -Xms و -Xmx

-Xmx حداکثر حافظه‌ای را که Java می‌تواند مصرف کند تعیین می‌کند و -Xms حافظه‌ای را که در شروع کار رزرو می‌کند. در سرورها رایج است که هر دو را برابر قرار دهند. نکته مهم این است که همه RAM سرور را به ماینکرفت ندهید: حدود ۱ تا ۱٫۵ گیگابایت برای سیستم‌عامل و سربار خود Java کنار بگذارید. برای مثال، روی سروری با ۴ گیگابایت RAM مقدار -Xms2G -Xmx2G یا حداکثر -Xms3G -Xmx3G معقول است.

دادن حافظه بیش از نیاز هم خوب نیست؛ جمع‌آوری‌کننده زباله (garbage collector) باید فضای بزرگ‌تری را پاک کند و ممکن است لگ‌های لحظه‌ای بیشتر شود.

۶. تنظیمات پایه server.properties

فایل /opt/minecraft/server/server.properties فایل اصلی تنظیمات سرور است:

sudo -u minecraft nano /opt/minecraft/server/server.properties

سطرهایی که باید اول بررسی کنید:

motd=Arkadaslarla Minecraft
max-players=10
online-mode=true
white-list=true
enforce-whitelist=true
difficulty=normal
view-distance=10
simulation-distance=8
  • motd: توضیحی که در فهرست سرورها نمایش داده می‌شود.
  • online-mode=true: باعث می‌شود بازیکنان با یک حساب واقعی ماینکرفت احراز هویت شوند. اگر آن را false کنید، هر کسی می‌تواند با هر نام کاربری (از جمله نام شما) وارد شود؛ آن را خاموش نکنید.
  • white-list و enforce-whitelist: فقط بازیکنانی که شما اجازه داده‌اید می‌توانند وارد شوند. اگر قصد راه‌اندازی سرور عمومی ندارید، این مؤثرترین محافظت است.
  • view-distance و simulation-distance: تعیین می‌کنند چند chunk در اطراف هر بازیکن بارگذاری شود. اگر سرور تحت فشار است، این‌ها نخستین مقادیری هستند که باید کم کنید.

بازیکنان را از کنسول سرور با دستور whitelist add OyuncuAdi به فهرست سفید اضافه می‌کنید. در ادامه می‌بینیم چگونه به کنسول دستور بفرستید.

۷. پورت را در فایروال باز کنید

Minecraft Java Edition به طور پیش‌فرض از پورت 25565/TCP استفاده می‌کند:

sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enable

مطمئن شوید قاعده SSH را پیش از دستور ufw enable اضافه کرده‌اید؛ وگرنه ممکن است اتصال شما قطع شود. برای امنیت کلی سرور، مراحل راهنمای امنیت سرور لینوکس را هم انجام دهید.

۸. سرویس systemd: اجرای دائمی بدون screen

اجرا در screen یا tmux برای آزمایش کافی است، اما وقتی سرور راه‌اندازی مجدد شود، بازی خودبه‌خود اجرا نمی‌شود. با systemd هم اجرای خودکار و هم خاموش شدن درست را خواهیم داشت. برای فرستادن دستور به کنسول هم از یک FIFO (لوله نام‌دار) استفاده می‌کنیم؛ ورودی سرور به این فایل وصل می‌شود.

ابتدا واحد سوکت:

sudo nano /etc/systemd/system/minecraft.socket
[Unit]
Description=Minecraft konsol girisi

[Socket]
ListenFIFO=/run/minecraft.stdin
SocketUser=minecraft
SocketGroup=minecraft
SocketMode=0660

[Install]
WantedBy=sockets.target

سپس واحد سرویس:

sudo nano /etc/systemd/system/minecraft.service
[Unit]
Description=Minecraft Java sunucusu
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft/server
Sockets=minecraft.socket
StandardInput=socket
StandardOutput=journal
StandardError=journal
ExecStart=/usr/bin/java -Xms2G -Xmx2G -jar server.jar nogui
ExecStop=/bin/sh -c 'if kill -0 $MAINPID 2>/dev/null; then echo stop > /run/minecraft.stdin; while kill -0 $MAINPID 2>/dev/null; do sleep 1; done; fi'
TimeoutStopSec=120
SuccessExitStatus=0 1 143
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

اگر سرور هنوز در حال اجرا باشد، سطر ExecStop دستور stop را به آن می‌فرستد و صبر می‌کند تا دنیا ذخیره شود و فرایند بسته شود. به این ترتیب هنگام اجرای systemctl stop یا راه‌اندازی مجدد سرور، دنیا نیمه‌ذخیره رها نمی‌شود. سطر StandardOutput=journal مهم است: چون ورودی را به FIFO وصل کرده‌ایم، باید صراحتاً بگوییم خروجی در ژورنال ثبت شود.

سرویس‌ها را فعال و اجرا کنید:

sudo systemctl daemon-reload
sudo systemctl enable --now minecraft.socket minecraft.service
systemctl status minecraft

برای فرستادن دستور به کنسول و دنبال کردن خروجی:

echo "whitelist add OyuncuAdi" | sudo tee /run/minecraft.stdin > /dev/null
journalctl -u minecraft -f

به همین روش می‌توانید همه دستورهای کنسول مانند say، op یا save-all را بفرستید.

۹. از دنیا پشتیبان بگیرید

داده‌های دنیا در پوشه world داخل پوشه سرور قرار دارند. Paper ابعاد Nether و End را جداگانه در پوشه‌های world_nether و world_the_end نگه می‌دارد. برای گرفتن پشتیبان سازگار در حالی که سرور روشن است، ذخیره خودکار را موقتاً خاموش کنید، داده‌ها را روی دیسک بنویسید، بایگانی کنید و ذخیره را دوباره روشن کنید:

sudo mkdir -p /var/backups/minecraft
echo "save-off" | sudo tee /run/minecraft.stdin > /dev/null
echo "save-all flush" | sudo tee /run/minecraft.stdin > /dev/null
sleep 15
sudo tar czf /var/backups/minecraft/dunya-$(date +%F-%H%M).tar.gz -C /opt/minecraft/server world world_nether world_the_end
echo "save-on" | sudo tee /run/minecraft.stdin > /dev/null

در سرور vanilla فقط پوشه world وجود دارد؛ پس دو پوشه دیگر را از سطر tar حذف کنید. می‌توانید این دستورها را در یک اسکریپت بگذارید و برای پشتیبان روزانه به crontab کاربر root اضافه کنید. پشتیبان‌ها را به طور منظم بیرون از سرور هم کپی کنید؛ پشتیبانی که فقط روی همان دیسک باشد، هنگام بروز مشکل دیسک نجاتتان نمی‌دهد.

چه مقدار RAM و پردازنده لازم است؟

دادن عدد دقیق دشوار است؛ تعداد افزونه‌ها، مساحت کاوش‌شده، مزرعه‌هایی که ساخته می‌شوند و فاصله دید مستقیماً بر نیاز به حافظه اثر می‌گذارند. به عنوان یک برآورد تقریبی برای شروع:

  • ۲ تا ۵ بازیکن، بدون افزونه: اختصاص ۲ گیگابایت به ماینکرفت معمولاً کافی است (در مجموع ۳ تا ۴ گیگابایت RAM روی سرور).
  • ۵ تا ۱۵ بازیکن یا چند افزونه: اختصاص ۳ تا ۴ گیگابایت راحت‌تر است.
  • مادپک‌ها یا سرورهای شلوغ‌تر: ممکن است ۶ گیگابایت یا بیشتر لازم باشد.

حلقه اصلی بازی در سرور ماینکرفت عمدتاً روی یک هسته پردازنده اجرا می‌شود؛ بنابراین کارایی تک‌هسته و پایداری منابع از تعداد هسته‌ها مهم‌تر است. یک VDS که منابعش با دیگران به اشتراک گذاشته نمی‌شود، در سرورهای شلوغ تجربه یکنواخت‌تری ارائه می‌دهد. اگر نمی‌خواهید درگیر نصب شوید، به پکیج‌های سرور بازی ما نگاهی بیندازید: با vCPU از نوع AMD EPYC 7642، حافظه DDR4 ECC و دیسک NVMe ارائه می‌شوند و پس از پرداخت، تیم ما سرور را راه‌اندازی کرده و به شما تحویل می‌دهد.

سوالات متداول

آیا بازیکنان Bedrock Edition می‌توانند وارد این سرور شوند؟

به طور مستقیم نه؛ Java و Bedrock از پروتکل‌های متفاوتی استفاده می‌کنند. اگر از Paper استفاده می‌کنید، افزونه‌ای مانند Geyser می‌تواند امکان اتصال بازیکنان Bedrock به سرور Java را فراهم کند. برای این کار باید پورت UDP مورد استفاده Bedrock را هم در فایروال باز کنید.

سرور خطای «Unable to access jarfile» می‌دهد؛ چرا؟

نام فایل یا پوشه اشتباه است. با ls -l /opt/minecraft/server بررسی کنید که فایل server.jar آنجا باشد و در همان پوشه‌ای قرار داشته باشد که در WorkingDirectory سرویس systemd آمده است.

بازیکنان نمی‌توانند وصل شوند؛ کجا را بررسی کنم؟

ابتدا با systemctl status minecraft مطمئن شوید سرویس در حال اجراست و با sudo ufw status ببینید قاعده 25565/tcp وجود دارد. اگر فهرست سفید فعال است، مطمئن شوید بازیکن را اضافه کرده‌اید و بازیکن از همان نسخه ماینکرفتِ سرور استفاده می‌کند.

چگونه سرور را به نسخه جدید ماینکرفت به‌روز کنم؟

ابتدا از دنیا پشتیبان بگیرید، سپس سرور را با sudo systemctl stop minecraft متوقف کنید، فایل server.jar جدید را به جای قبلی دانلود کنید و سرویس را دوباره اجرا کنید. اگر از افزونه استفاده می‌کنید، از قبل بررسی کنید که با نسخه جدید سازگار باشند.

آیا اتصال با نام دامنه ممکن است؟

بله. وقتی برای دامنه خود یک رکورد A بسازید که به آدرس IP سرور VPS اشاره کند، بازیکنان می‌توانند به جای IP با نشانی‌ای مانند mc.ornek.com وصل شوند. چون پورت پیش‌فرض 25565 است، نیازی به نوشتن پورت ندارند.