راهنمای راهاندازی سرور Minecraft روی VPS با Ubuntu 24.04
آموزش گامبهگام اجرای Paper Minecraft روی Ubuntu 24.04 با Java 21. تنظیم دقیق systemd، مدیریت پورت 25565 در فایروال، تخصیص بهینه RAM و روش صحیح پشتیبانگیری از world.
آنچه میسازید
یک سرور Minecraft Java Edition که پایدار میماند: Paper روی Ubuntu 24.04، که به عنوان یک کاربر اختصاصی minecraft تحت systemd با Restart=on-failure اجرا میشود، whitelist فعال است، پورت 25565 در هر دو فایروالی که بین بازیکنان شما و JVM قرار دارند باز است، و پشتیبانگیری به شکلی انجام میشود که دنیای بازی را که برای محافظت از آن ایجاد شده، دچار خرابی نکند. خود سرور شامل یک فایل jar و یک دستور java است؛ هر آنچه سروری را که دوستانتان یک سال روی آن بازی میکنند از سروری که در همان آخر هفته اول از کار میافتد متمایز میکند، حول همین دستور میچرخد و این راهنما دقیقاً همین موارد را پوشش میدهد.
پیش از آنکه هزینهای بپردازید، دو هشدار صادقانه: نخست، Minecraft تشنه حافظه است و عمدتاً تکرشتهای (single-threaded) عمل میکند: یک VPS با 1 GB رم نمیتواند سروری قابل بازی را اجرا کند و یک هسته سریع، چهار هسته کند را شکست میدهد. دوم، این نسخه Java Edition است. بازیکنان Bedrock، کنسولها، گوشیها و اپلیکیشن Windows Bedrock نمیتوانند به سرور Java متصل شوند؛ Bedrock به نرمافزار سرور متفاوتی روی پورت UDP 19132 یا پلاگین Geyser نیاز دارد که خارج از محدوده این راهنماست.
شما به یک VPS تازه با Ubuntu 24.04 KVM با دسترسی root یا sudo و حدود سی دقیقه زمان نیاز دارید.
تخمین منابع: سرور دوستان واقعاً به چه چیزی نیاز دارد
مقدار RAM فاکتور تعیینکننده است و ارقام واقعی کمتر از آن چیزی هستند که در انجمنهای modpack پیشنهاد میشود:
- 2 GB: برای اجرای نسخه vanilla با 2 تا 5 بازیکن و view distance متوسط کافی است. قابل بازی است، اما فضای خالی (headroom) وجود ندارد.
- 4 GB: اندازه مناسب برای سرور دوستان است: حدود 10 بازیکن همزمان روی Paper با تعدادی افزونه (plugin)، و فضای کافی برای سیستمعامل.
- 8 GB و بالاتر: قلمرو modpack و بیش از 20 بازیکن است. در این سطح باید به سرعت تکهستهای CPU نیز توجه کنید، زیرا حلقه اصلی بازی روی یک thread اجرا میشود.
با کاوش بازیکنان، حجم دنیای بازی روی دیسک نیز افزایش مییابد. یک دنیای survival که زیاد در آن گشتوگذار شده باشد، به چندین گیگابایت میرسد؛ بنابراین برای دنیای بازی و فایلهای پشتیبان (backups) آن فضای کافی در نظر بگیرید.
Vanilla یا Paper؟ Paper جایگزینی مستقیم برای فایل jar رسمی است: دنیاها و کلاینتها یکسان هستند و نیازی به نصب mod روی کلاینت نیست. این نرمافزار کندترین مسیرهای سرور، بارگذاری chunkها، پردازش entityها و hopperها را بازنویسی کرده و یک API برای افزونهها اضافه میکند. تنها دلیل برای اجرای نسخه vanilla، نیاز به مکانیکهای دقیق و بدون تغییر برای فارمهای redstone فنی است که بهینهسازیهای Paper ممکن است آنها را تغییر دهد؛ برای سایر کاربران، Paper به معنای بازیکنان بیشتر به ازای هر گیگابایت رم است. تمام موارد زیر برای هر دو نسخه کارایی دارند.
گام 1: نصب Java 21
نسخه Minecraft 1.20.5 و تمام نسخههای پس از آن (شامل تمامی نسخههای 1.21.x) به Java 21 نیاز دارند. توزیع Ubuntu 24.04 این نسخه را در مخازن پیشفرض خود ارائه میدهد و نسخه headless آن، کتابخانههای دسکتاپ که یک سرور هرگز به آنها نیاز ندارد را حذف میکند:
sudo apt update && sudo apt install -y openjdk-21-jre-headless
java -versionنتیجه صحیح: خط اول باید openjdk version "21.0.x" را نشان دهد. اگر نسخه 17 یا 11 نمایش داده شد، یعنی یک JRE دیگر نصب شده و اولویت دارد؛ این مشکل را با sudo update-alternatives --config java اصلاح کنید و گزینهای را انتخاب کنید که شامل java-21 باشد.
نادیده گرفتن این بررسی، منجر به رایجترین خطای سرور Minecraft در جستجوهای گوگل میشود. با Java 17، فایل jar سرور بلافاصله با خطای زیر متوقف میشود:
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.0این اعداد نشاندهنده عدم تطابق هستند: نسخه فایل کلاس 65.0 مربوط به Java 21، نسخه 61.0 مربوط به Java 17 و نسخه 60.0 مربوط به Java 16 است. هر جفتی که مشاهده کردید، راه حل یکسان است: JRE جدیدتر را نصب کرده و دوباره update-alternatives را اجرا کنید.
گام 2: یک کاربر اختصاصی، هرگز root
سرور کدهای افزونه را اجرا کرده و ورودیهای شبکه را از هر کسی که به پورت دسترسی دارد، پردازش میکند. اگر مشکلی پیش بیاید، نفوذی که با دسترسی root اجرا شود، کنترل کامل VPS شما را در دست میگیرد؛ اما نفوذی که با دسترسی minecraft اجرا شود، تنها محدود به یک دنیای بازی خواهد بود.
sudo adduser --system --group --home /opt/minecraft minecraft--system یک حساب کاربری بدون رمز عبور ایجاد میکند که امکان ورود از طریق SSH را ندارد و مسیر /opt/minecraft را به عنوان دایرکتوری خانگی و کاری خود در نظر میگیرد. از این مرحله به بعد، هر دستوری که با سرور در ارتباط است، باید با این کاربر اجرا شود.
گام 3: دانلود فایل jar سرور از منبع رسمی
فقط دو منبع مجاز برای دریافت فایل jar سرور وجود دارد: صفحه دانلود رسمی در minecraft.net برای نسخه vanilla و صفحه دانلود papermc.io برای نسخه Paper. سایتهای واسط که فایلهای jar سرور را بازنشر میکنند، منبعی قدیمی برای توزیع بدافزار هستند؛ فایل jar سرور در واقع کدی اجرایی است که قرار است آن را بهصورت 24/7 روی سروری که به اینترنت متصل است اجرا کنید.
لینک دانلود نسخه فعلی را از صفحه رسمی کپی کنید (از آنجا که URL با هر نسخه و build تغییر میکند، قرار دادن یک لینک ثابت در اینجا باعث منقضی شدن آن میشود)، سپس:
cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'نتیجه صحیح: یک server.jar با حجم تقریبی 50 مگابایت که مالک آن minecraft است و با دستور ls -lh /opt/minecraft/server.jar تأیید شده است.
گام 4: اجرای اولیه، توافقنامه EULA و اعطای دسترسی اپراتور به خود
پیش از آنکه به سراغ systemd بروید، سرور را یکبار بهصورت تعاملی اجرا کنید. اجرای اولیه تنها دو وظیفه دارد که کنسول زنده بهخوبی از پس آنها برمیآید.
cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar noguiاین برنامه ظرف چند ثانیه بسته میشود. Paper ابتدا چند لحظه صرف اعمال وصلههای خود میکند و لاگ با خطی که همه با آن مواجه میشوند به پایان میرسد:
[ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.این یک خطا نیست؛ بلکه یک سد قانونی برای پذیرش مجوز است. این اجرا فایلی به نام eula.txt را در کنار فایل jar ایجاد کرده است. اگر هنوز توافقنامه EULA را نخواندهاید، آن را مطالعه کنید و سپس پرچم آن را تغییر دهید:
sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txtهمان دستور java را دوباره اجرا کنید. این بار سرور شروع به تولید جهان (world) میکند که در اولین بوت یک یا دو دقیقه زمان میبرد و در نهایت در وضعیت زیر قرار میگیرد:
[Server thread/INFO]: Done (9.204s)! For help, type "help"اکنون شما یک کنسول زنده در اختیار دارید. از آن برای وظیفه دوم استفاده کنید: عبارت op YourMinecraftName (نام کاربری دقیق خود در بازی) را تایپ کنید. سرور نام شما را در ops.json ثبت میکند تا بعداً، زمانی که کنسولی متصل نیست، بتوانید تمام دستورات مدیریتی را از داخل بازی اجرا کنید. سپس عبارت stop را تایپ کنید تا سرور ذخیره شده و بهطور کامل بسته شود.
گام 5: فایل server.properties و دلیل فعال ماندن online-mode
اجرای اولیه، فایل server.properties را نیز ایجاد کرد. اکثر تنظیمات پیشفرض مناسب هستند؛ اما این خطوط مواردی هستند که باید آگاهانه درباره آنها تصمیم بگیرید:
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 باعث میشود سرور نام کاربری هر فردی که قصد ورود دارد را با سرورهای نشست Mojang تطبیق دهد تا ثابت شود بازیکن مالک حساب کاربری است. تنظیم آن روی false، که به عنوان سوئیچ "سرور کرکشده" شناخته میشود، به این معناست که سرور ادعای هر کلاینتی را درباره هویتش میپذیرد: هر کسی میتواند با هر نامی وارد شود، از جمله نام شما. از آنجایی که دسترسیهای اپراتور (ops) و لیست سفید (whitelist) بر اساس نام کاربری تعیین میشوند، یک فرد متقلب میتواند با هویت شما وارد شده و دسترسیهای مدیریتیتان را به دست بگیرد. تنها دلیل موجه برای غیرفعال کردن آن، استفاده از یک پروکسی احراز هویتکننده مانند Velocity است که خود وظیفه تأیید بازیکنان را بر عهده دارد. در یک سرور معمولی، این گزینه باید بدون استثنا فعال (true) بماند.
view-distance بزرگترین اهرم کنترل عملکرد در این فایل است؛ هزینه پردازنده و رم تقریباً با توان دوم این مقدار افزایش مییابد. عدد 8 برای یک VPS مقدار پیشفرض معقولی است؛ عدد 10 مقدار پیشفرض بازی اصلی (vanilla) است و فشار بهمراتب بیشتری وارد میکند.
white-list=true به همراه enforce-whitelist=true سرور را به روی افراد ناشناس میبندد که بخش امنیت در ادامه توضیح میدهد چرا این کار اختیاری نیست. بازیکنان را با دستور /whitelist add TheirName در داخل بازی به عنوان اپراتور اضافه کنید.
گام 6: فلگهای حافظه، چرا -Xms و -Xmx باید یکسان باشند
ماشین مجازی جاوا (JVM) حافظه Heap خود را بین -Xms (اندازه شروع) و -Xmx (سقف حافظه) تخصیص میدهد. در یک سرور اختصاصی بازی، این دو مقدار را روی یک عدد تنظیم کنید: Heap در هر صورت به سقف میرسد و افزایش تدریجی آن در حین بازی، فقط باعث ایجاد سربار اضافی برای Garbage Collector میشود. روی یک VPS با 4 گیگابایت رم، جفت مناسب به این صورت است:
/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui-Xmx نشاندهنده کل حافظه مصرفی توسط پردازش نیست. JVM سربارهای خارج از Heap (off-heap)، استکهای ترد، کشهای JIT و بافرهای مستقیم را اضافه میکند که حدود نیم گیگابایت یا بیشتر است؛ همچنین سیستمعامل Ubuntu نیز به فضای خالی نیاز دارد. قاعده کلی این است: -Xmx حداکثر برابر با رم VPS منهای 1 گیگابایت باشد. اگر بیش از این مقدار تخصیص دهید، با یکی از دو نوع شکست مواجه میشوید. اگر تخصیص حافظه در همان ابتدا شکست بخورد، سرور با خطای زیر اجرا نمیشود:
Error: Could not reserve enough space for object heapاین خطا صریح و فوری است. حالت ناخوشایندتر این است که سرور بهخوبی شروع به کار میکند اما ساعتها بعد، زمانی که Heap تحت فشار پر میشود، از کار میافتد؛ در این حالت OOM killer هسته سیستمعامل، بزرگترین پردازش موجود یعنی JVM را انتخاب و متوقف میکند. در لاگ سرور هیچ چیزی ثبت نمیشود؛ شواهد در sudo dmesg | grep -i oom قرار دارد، خطی مشابه Out of memory: Killed process 1234 (java). اگر سرویس شما «بهصورت تصادفی» ریاستارت میشود، ابتدا آنجا را بررسی کنید و مقدار -Xmx را کاهش دهید.
برای Paper، مستندات پروژه Aikar's flags را معرفی میکنند؛ مجموعهای بهینهشده از G1GC (شامل -XX:+UseG1GC -XX:MaxGCPauseMillis=200 و دوازده فلگ دیگر) که وقفههای Garbage-collection را در Heapهای بزرگتر کاهش میدهد. خط کامل را از مستندات Paper تولید کنید؛ روی Heapهای 2 تا 4 گیگابایتی، بهبود عملکرد ناچیز است اما استفاده از این فلگها بیخطر است.
گام 7: یک unit در systemd با تنظیم Restart=on-failure
سروری که بهصورت دستی اجرا شده باشد، با بستن نشست SSH شما متوقف میشود و پس از reboot نیز بالا نمیآید. فایل /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 -fنتیجه صحیح: status وضعیت active (running) را نشان میدهد و journal، که اکنون خروجی کنسول سرور را در خود دارد، دوباره به خط Done ختم میشود.
دو انتخاب آگاهانه در این unit وجود دارد. Restart=on-failure سرور را پس از crash بازمیگرداند اما پس از یک stop تمیز، آن را مجدداً اجرا نمیکند؛ بنابراین امکان نگهداری سیستم فراهم میماند. و TimeoutStopSec=120 اهمیت بیشتری از آنچه به نظر میرسد دارد: systemctl stop سیگنال SIGTERM را ارسال میکند، سرور Minecraft آن را دریافت کرده و پیش از خروج، تمام دنیاها را ذخیره میکند؛ در دنیاهای بزرگ، این ذخیرهسازی زمانبر است. timeout پیشفرض systemd ممکن است باعث شود JVM در میانه ذخیرهسازی با سیگنال SIGKILL متوقف شود که دقیقاً عامل خرابی فایلهای region است. به آن دو دقیقه زمان بدهید.
اگر سرویس دچار نوسان (flapping) شد و journal پیام زیر را نشان داد:
[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 را اشغال کرده است؛ این مورد تقریباً همیشه به دلیل اجرای قبلی شما در foreground در یک نشست SSH دیگر است. آن را با sudo ss -tlnp | grep 25565 پیدا کرده و متوقف کنید؛ هرگز دو سرور را روی یک پورت اجرا نکنید.
گام 8: باز کردن پورت 25565 روی هر دو فایروال
نسخه Java بازی Minecraft فقط از TCP 25565 استفاده میکند (پروتکل UDP صرفاً برای query اختیاری است و بهصورت پیشفرض غیرفعال است). روی VPS:
sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enableاین فایروال اول است. اکثر ارائهدهندگان VPS یک فایروال دوم در سطح شبکه در پنل کنترل خود دارند که معمولاً فراموش میشود. پورت TCP 25565 را در آنجا نیز باز کنید. نشانهٔ باز نکردن یکی از این دو فایروال بسیار مبهم است: کلاینت روی عبارت "Connecting to the server..." متوقف میشود و با خطای Connection timed out: no further information شکست میخورد؛ نه خبری از رد شدن اتصال (refusal) است، نه خطای سرور و نه هیچ موردی در journal، زیرا بستهها هرگز به مقصد نرسیدهاند. وضعیت را از دستگاهی خارج از VPS با دستور nc -vz your.server.ip 25565 بررسی کنید؛ خروجی succeeded به معنای باز بودن هر دو فایروال است و توقف (hang) به معنای بسته بودن حداقل یکی از آنهاست.
در حالی که در ufw هستید، به یاد داشته باشید که این سرور SSH را روی یک IP عمومی اجرا میکند و لاگهای ناشی از حملات brute-force ظرف چند ساعت شروع میشوند؛ پیش از آنکه فراموش کنید، Fail2ban را برای SSH روی Ubuntu 24.04 تنظیم کنید.
اکنون متصل شوید: به بخش Multiplayer بروید، Direct Connection را انتخاب کنید و IP سرور را وارد کنید. از آنجا که در گام 4 خود را op کردهاید، دستورات درون بازی بلافاصله کار میکنند؛ برای هر بازیکن از /whitelist add FriendName استفاده کنید و اگر قصد دارید، /gamemode creative را اجرا کنید.
گام 9: استفاده از whitelist، زیرا اینترنت پورت 25565 را پیدا میکند
باز گذاشتن یک سرور Minecraft به روی اینترنت یک ریسک تئوری نیست: اسکنرهای انبوه بهطور مداوم کل فضای IPv4 را برای یافتن پورت 25565 جستجو میکنند. پروژههای خرابکارانه آماتوری، صدها هزار سرور باز را از این طریق نقشهبرداری کردهاند و یک سرور بدون whitelist در عرض چند روز، و گاهی چند ساعت، بازدیدکنندگان ناخواندهای خواهد داشت. استفاده از whitelist که در گام 5 توضیح داده شد، راهحل این مشکل است: online-mode=true هویت را اثبات میکند و whitelist ورود را به هویتهایی که شما انتخاب کردهاید محدود میسازد. این ترکیب، کل مدل امنیتی را تشکیل میدهد و برای سرور دوستانه کافی است.
برای دسترسی به کنسول بدون ورود به بازی، تهیه نسخه پشتیبان اسکریپتی یا استفاده از cron job، قابلیت RCON را در server.properties فعال کنید (enable-rcon=true، یک rcon.password قوی، پورت 25575) و کلاینت کوچک mcrcon را از سورس GitHub آن مستقیماً روی VPS کامپایل کنید؛ این ابزار در مخازن Ubuntu موجود نیست. پورت 25575 را در هیچ فایروالی باز نکنید: RCON رمز عبور را به صورت متن ساده (cleartext) ارسال میکند، بنابراین باید فقط به صورت loopback در دسترس باشد.
گام 10: پشتیبانگیری بدون آسیب به دادههای جهان
یک قانون اصلی وجود دارد: هرگز دایرکتوری world را زمانی که سرور در حال نوشتن روی آن است، کپی نکنید. فایلهای Region بهطور مداوم در حین بازی بازنویسی میشوند؛ یک tar که همزمان با عملیات نوشتن اجرا شود، آرشیوی ایجاد میکند که شامل چانکهای ناقص است. هنگامی که بخواهید آن را بازیابی کنید—یعنی در همان لحظهای که پشتیبان باید کار کند—لاگ سرور پر از خطاهای بارگذاری چانک میشود و در نقشه حفرههایی ایجاد خواهد شد. دو روش برای جلوگیری از این مشکل وجود دارد.
روش توقف-کپی-اجرا سادهترین راه است، اما به قیمت یک دقیقه از دسترس خارج شدن سرور تمام میشود:
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 ابعاد مختلف را به world، world_nether و world_the_end تقسیم میکند؛ سرور vanilla همه چیز را در world نگه میدارد، بنابراین در آن حالت دو مورد دیگر را حذف کنید.)
روش Save-off امکان پشتیبانگیری در حین اجرای سرور را فراهم میکند: از طریق RCON دستور save-off (برای توقف ذخیرهسازی خودکار) و سپس save-all flush (برای اجبار به نوشتن همه چیز روی دیسک و انتظار برای اتمام آن) را ارسال کنید، سپس فایل tar را تهیه کرده و در نهایت دستور save-on را اجرا کنید. این همان نسخهای است که باید در cron برای ساعت 5 صبح تنظیم کنید.
در هر صورت، پشتیبانی که روی همان VPS سرور قرار دارد، پشتیبان محسوب نمیشود؛ آرشیوها را با scp یا rclone از سرور خارج کنید و بیش از یک نسخه نگه دارید. و از آنجا که قرار نیست هنگام بروز مشکل دائماً به کنسول خیره شوید، یک بررسی خارجی روی پورت تنظیم کنید: Uptime Kuma روی یک سیستم دیگر با انجام یک بررسی TCP روی پورت 25565، پیش از بازیکنان به شما اطلاع میدهد که سرور از دسترس خارج شده است.
افزونهها و ارتقا
در Paper، یک افزونه صرفاً یک فایل jar است که در /opt/minecraft/plugins/ قرار میگیرد و پس از آن با یک راهاندازی مجدد، نصب کامل میشود. افزونهها را فقط از صفحات رسمی پروژه (Hangar، Modrinth، SpigotMC) دریافت کنید؛ دلیل این کار مشابه فایل jar سرور است: هر افزونه کدی دلخواه است که با دسترسی کاربر minecraft اجرا میشود.
ارتقای سرور شامل این مراحل است: توقف سرور، تهیه نسخه پشتیبان، جایگزینی server.jar با نسخه جدید برای ورژن جدید Minecraft و سپس راهاندازی مجدد. دو نکته احتیاطی وجود دارد. ارتقای دنیاها یکطرفه است؛ دنیایی که با نسخه جدیدتر باز شود، دیگر در نسخه قدیمیتر باز نخواهد شد که این خود دلیلی دیگر برای اهمیت تهیه نسخه پشتیبان است. همچنین، افزونهها معمولاً با تأخیری چند روزه یا چند هفتهای نسبت به انتشار نسخه جدید Minecraft بهروز میشوند؛ بنابراین پیش از اقدام برای ارتقا در همان روز اول انتشار، سازگاری آنها را بررسی کنید.
اگر ترجیح میدهید تمام این موارد را در قالب یک کانتینر مدیریت کنید، مواردی مانند تعیین نسخه (version pinning)، پذیرش EULA و تنظیمات حافظه از طریق متغیرهای محیطی انجام میشوند. ایمیج پرکاربرد itzg/minecraft-server، همان سرور Paper را تحت Docker Compose روی VPS با رعایت دقیق همان اصول فایروال و پشتیبانگیری اجرا میکند.
FAQ
سرور Minecraft به چه مقدار RAM نیاز دارد؟
مقدار 2 GB برای اجرای نسخه vanilla برای 2 تا 5 بازیکن کافی است؛ 4 GB برای یک سرور دوستانه با حدود ده بازیکن روی Paper و چند پلاگین مناسب است؛ برای modpackها و بیش از 20 بازیکن، به 8 GB یا بیشتر نیاز دارید. صرفنظر از اندازه VPS، مقدار -Xmx را حداکثر برابر با کل RAM منهای 1 GB قرار دهید، زیرا JVM از حافظهای فراتر از heap استفاده میکند و زیادهروی در این مقدار منجر به Error: Could not reserve enough space for object heap یا OOM kill بیسروصدا میشود.
چرا دوستانم نمیتوانند به سرور Minecraft من متصل شوند؟
هنگ کردن کلاینت که به Connection timed out: no further information ختم میشود، تقریباً همیشه به معنای وجود مشکل در فایروال است و دو نوع فایروال وجود دارد: ufw روی VPS و فایروال شبکه ارائهدهنده شما در پنل کنترل. پورت TCP 25565 باید در هر دو باز باشد. با استفاده از sudo ss -tlnp | grep 25565 روی سرور تأیید کنید که برنامه واقعاً در حال گوش دادن است، سپس با nc -vz your.server.ip 25565 از خارج از شبکه تست کنید.
آیا باید online-mode=false را در server.properties تنظیم کنم؟
خیر. با online-mode=false سرور احراز هویت Mojang را بهطور کامل نادیده میگیرد، بنابراین هر کسی میتواند با هر نام کاربری، از جمله نام یک op، وارد شود و دسترسیهای او را به ارث ببرد؛ همچنین اسکینها و UUIDهای ثابت از کار میافتند. تنها استفاده مشروع از این گزینه، پشت یک پروکسی احراز هویتکننده مانند Velocity است که خودش بازیکنان را تأیید میکند. برای یک سرور معمولی، این گزینه باید true باقی بماند.
آیا Paper از سرور vanilla Minecraft بهتر است؟
برای تقریباً همه کاربران، بله: Paper یک فایل jar جایگزین است که دنیاهای vanilla را بارگذاری میکند، کلاینتهای اصلاحنشده را میپذیرد، پردازش entityها و بارگذاری chunkها را بسیار بهینهتر انجام میدهد و اکوسیستم پلاگین را اضافه میکند. استثنا، جوامع فنی redstone هستند که به رفتار دقیق و بیتبهبیت vanilla نیاز دارند، که برخی بهینهسازیهای Paper آن را تغییر میدهد. روی یک VPS کوچک، بهینهسازیهای Paper عملاً به معنای RAM اضافی رایگان است.
چگونه بدون خراب شدن، از دنیای Minecraft نسخه پشتیبان تهیه کنم؟
هرگز دایرکتوری دنیا را در حالی که سرور در حال نوشتن روی آن است آرشیو نکنید؛ کپی کردن همزمان با نوشتن یک region-file باعث ایجاد chunkهای خراب میشود که فقط هنگام بازیابی متوجه آن خواهید شد. یا سرور را متوقف کنید، دایرکتوریهای دنیا را tar کنید و دوباره آن را اجرا کنید، یا با استفاده از save-off، save-all flush، tar و save-on از طریق RCON آن را در حالت زنده نگه دارید. سپس آرشیو را از روی VPS منتقل کنید.