راهنمای راهاندازی سرور Minecraft روی VPS با Ubuntu 24.04
آموزش گامبهگام اجرای Paper Minecraft روی Ubuntu 24.04 با Java 25. تنظیمات systemd، مدیریت پورت 25565 در ufw، بهینهسازی رم و روش صحیح تهیه نسخه پشتیبان بدون خرابی دنیا.
آنچه میسازید
یک سرور Minecraft Java Edition که همیشه در دسترس است: اجرای Paper روی Ubuntu 24.04، به عنوان یک کاربر اختصاصی minecraft تحت systemd با Restart=on-failure، فعال بودن whitelist، باز بودن پورت 25565 در ufw و فایروال شبکه ارائهدهنده (در صورت فعال بودن)، و تهیه نسخه پشتیبان به روشی که باعث خرابی دنیای بازی نشود. خود سرور شامل یک فایل jar و یک دستور java است؛ تمام تفاوت بین سروری که دوستانتان یک سال روی آن بازی میکنند و سروری که در همان آخر هفته اول از کار میافتد، در مدیریت پیرامون همین دستور نهفته است و این راهنما دقیقاً همین موارد را پوشش میدهد.
پیش از صرف هزینه، دو هشدار صادقانه: اول اینکه Minecraft حافظه زیادی مصرف میکند و عمدتاً تکرشتهای (single-threaded) است؛ یک VPS با 1 GB رم نمیتواند سرور قابلبازی ارائه دهد و یک هسته سریع، بهتر از چهار هسته کند است. دوم اینکه این راهنما مربوط به Java Edition است. بازیکنان Bedrock، کنسولها، گوشیها و اپلیکیشن 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 25
نسخه 26.1 بازی Minecraft و تمامی نسخههای پس از آن به Java 25 نیاز دارند؛ Java 21 تنها بازه قدیمیتر از 1.20 تا 1.21.11 را پوشش میدهد. توزیع Ubuntu 24.04 نسخه Java 25 را از طریق مخازن بهروزرسانی و امنیتی خود ارائه میدهد. نسخه کامل JRE را نصب کنید، نه نسخه -headless: راهنمای نصب Java برای Paper نسبت به استفاده از نسخههای headless هشدار میدهد، زیرا این نسخهها فاقد وابستگیهای مورد نیاز Paper هستند.
sudo apt update && sudo apt install -y openjdk-25-jre
java -versionنتیجه صحیح: خط اول باید openjdk version "25.0.x" را نشان دهد. اگر خروجی 21، 17 یا 11 باشد، یعنی یک JRE دیگر نصب شده و در حال اجراست؛ این مشکل را با sudo update-alternatives --config java برطرف کرده و گزینهای را انتخاب کنید که شامل java-25 باشد.
نادیده گرفتن این بررسی، منجر به بروز رایجترین خطای سرور Minecraft در جستجوهای گوگل میشود. با استفاده از Java 21، فایل 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 69.0),
this version of the Java Runtime only recognizes class file versions up to 65.0این اعداد نشاندهنده عدم تطابق هستند: نسخه فایل کلاس 69.0 مربوط به Java 25، نسخه 65.0 مربوط به Java 21 و نسخه 61.0 مربوط به Java 17 است. فارغ از اینکه چه جفتی را مشاهده میکنید، راهحل یکسان است: 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 ساعته روی سروری که به اینترنت متصل است اجرا کنید.
لینک دانلود نسخه فعلی را از صفحه رسمی کپی کنید (از آنجا که URL با هر نسخه و build تغییر میکند، قرار دادن یک لینک ثابت در اینجا باعث از کار افتادن آن میشود)، سپس:
cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'نتیجه صحیح: یک server.jar با حجم تقریبی 60 مگابایت که مالک آن 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، پشتههای ترد (thread stacks)، کشهای JIT و بافرهای مستقیم را اضافه میکند که حدود نیم گیگابایت یا بیشتر است؛ علاوه بر این، سیستمعامل Ubuntu نیز به فضا نیاز دارد. قاعده کلی این است: -Xmx حداکثر برابر با رم VPS منهای 1 گیگابایت باشد. اگر بیش از حد تخصیص دهید، با یکی از دو نوع شکست مواجه میشوید. اگر تخصیص در همان ابتدا شکست بخورد، سرور با خطای زیر اجرا نمیشود:
Error: Could not reserve enough space for object heapاین خطا صریح و فوری است. حالت بدتر این است که سرور بهدرستی اجرا شود اما ساعتها بعد، زمانی که Heap تحت بار پر میشود و OOM killer هسته سیستمعامل مجبور به قربانی کردن یک پردازش میشود، از کار بیفتد. این مکانیزم بر اساس امتیاز «بد بودن» (badness score) که عمدتاً به میزان مصرف حافظه و Swap بستگی دارد، عمل میکند؛ بنابراین در سیستمی که هدفش اجرای سرور بازی است، JVM محتملترین قربانی است. هیچ چیزی در لاگ سرور ظاهر نمیشود؛ شواهد در sudo dmesg | grep -i oom قرار دارد، خطی شبیه به Out of memory: Killed process 1234 (java). اگر سرویس شما «بهطور تصادفی» ریاستارت میشود، ابتدا آنجا را بررسی کنید و -Xmx را کاهش دهید.
برای Paper، این پروژه «پرچمهای Aikar» را نیز مستند کرده است؛ مجموعهای بهینهشده از G1GC (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 و دوازده مورد دیگر) که برای کاهش وقفههای Garbage Collection طراحی شدهاند. اینها دیگر توصیه پیشفرض نیستند: تولیدکننده اسکریپت شروع Paper میگوید در JVMهای مدرن (17، 21 یا بالاتر) ابتدا باید بدون هیچ پرچمی تست کنید و تنها در صورتی که مشکل GC دارید یا از نسخه قدیمی Minecraft یا Java استفاده میکنید، از پرچمهای Aikar استفاده کنید. در Java 25 با Heap بین 2 تا 4 گیگابایت، با دستور ساده بالا شروع کنید و تنها در صورتی که واقعاً شاهد لگ ناشی از GC بودید، آنها را اضافه کنید.
گام 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 روی هر دو فایروال
Minecraft Java فقط از TCP 25565 استفاده میکند (UDP فقط برای پروتکل پرسوجوی اختیاری است که بهصورت پیشفرض غیرفعال است). روی VPS:
sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enableاین فایروال اول است. بسیاری از ارائهدهندگان VPS یک فایروال دوم در سطح شبکه نیز در پنل مدیریت ارائه میدهند و وقتی یکی فعال است، همان چیزی است که کاربران فراموش میکنند. در SSD Nodes این مورد افزونه Advanced Firewall Groups است، یک قابلیت پولی که در هنگام خرید یا از داشبورد فعال میکنید (طرحهای Business VPS این گروههای فایروال را به عنوان ویژگی پیشفرض دارند)؛ اگر سرور شما یکی از اینها را دارد، پورت TCP 25565 را در آنجا نیز باز کنید. نشانه نبودن قانون در هر کدام از اینها بهطرز کلافهکنندهای مبهم است: کلاینت روی "Connecting to the server..." گیر میکند و با Connection timed out: no further information شکست میخورد؛ نه پیامی مبنی بر رد اتصال، نه خطای سرور و نه چیزی در journal، زیرا بستهها هرگز نرسیدهاند. از یک دستگاه خارج از VPS با nc -vz your.server.ip 25565 بررسی کنید؛ succeeded یعنی تمام فایروالهای مسیر باز هستند و گیر کردن معمولاً به این معنی است که یکی از آنها هنوز بستهها را مسدود میکند، اگرچه سروری که بیش از حد مشغول است و نمیتواند اتصالات را بپذیرد نیز ممکن است دچار timeout شود، پس با ss روی همان دستگاه تأیید کنید که سرور در حال گوش دادن است.
زمانی که در 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: پشتیبانگیریهایی که باعث خرابی دنیا نمیشوند
یک قانون کلی وجود دارد: هرگز دایرکتوری دنیا را در حالی که سرور در حال نوشتن روی آن است، کپی نکنید. فایلهای 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
sudo systemctl start minecraft(از نسخه 26.1 به بعد، Paper تمام سه بُعد را مانند نسخه vanilla درون world/dimensions/ نگه میدارد، بنابراین world کل دنیا را شامل میشود. سرورهای Paper که هنوز روی نسخه 1.21.11 یا قدیمیتر هستند، آنها را به world، world_nether و world_the_end تقسیم میکنند؛ آن دو مورد را نیز به دستور tar اضافه کنید.)
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، و شروع مجدد. دو نکته را مد نظر داشته باشید. ارتقای جهان (World) یکطرفه است؛ جهانی که با نسخه جدیدتر باز شود، دیگر در نسخه قدیمیتر قابل استفاده نخواهد بود، که این خود دلیلی دیگر برای اهمیت نسخههای پشتیبان است. همچنین، افزونهها اغلب چند روز یا چند هفته پس از انتشار نسخه جدید Minecraft بهروزرسانی میشوند، بنابراین پیش از اقدام برای ارتقا در روز اول انتشار، سازگاری آنها را بررسی کنید. انتقال از نسخه 1.21.11 به 26.1 یا بالاتر، علاوه بر نیاز به Java 25 (مرحله 1)، پوشههای Nether و End مربوط به Paper را به world/dimensions/ منتقل میکند.
اگر ترجیح میدهید تمام این موارد را در قالب یک کانتینر مدیریت کنید، با استفاده از قابلیتهایی نظیر تعیین نسخه (version pinning)، پذیرش EULA و تنظیم پرچمهای حافظه به عنوان متغیرهای محیطی، ایمیج پرکاربرد itzg/minecraft-server همان سرور Paper را تحت Docker Compose روی VPS با همان نظم در مدیریت فایروال و پشتیبانگیری اجرا میکند.
FAQ
سرور Minecraft به چه مقدار RAM نیاز دارد؟
مقدار 2 GB برای اجرای نسخه vanilla برای 2 تا 5 بازیکن کافی است؛ 4 GB برای یک سرور دوستانه با حدود ده بازیکن روی Paper به همراه چند پلاگین مناسب است؛ برای مادپکها و بیش از 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 منتقل کنید.