گرمای تابستان — همه‌چیز آب می‌شود، حتی قیمت‌های ما.−25%−۲۵٪ روی هر پلن سالانه، تا ۳۱ اوتدیدن پلن‌ها
EQVPS

راه‌اندازی یک سرور ماین‌کرافت روی VPS

5 مرداد 1405 · 5 دقیقه مطالعه · EQVPS Team

این همراهِ عملیِ صفحه‌ی VPS برای سرور بازی ماست. آن صفحه درباره‌ی این است که کدام پلن جور درمی‌آید؛ این یکی درباره‌ی این است که واقعاً سرور را برپا کنید — Paper، یک سرویس درست‌وحسابی systemd، پیکربندی‌ای که RAM را برایتان صرفه‌جویی می‌کند، فایروال و پشتیبان‌ها. تا پایان یک سرور ماین‌کرافت خواهید داشت که از یک کرش جان به‌در می‌برد، از یک ریبوت جان به‌در می‌برد و بی‌سروصدا تمام جعبه‌تان را نمی‌بلعد.

یک نکته‌ی صادقانه پیش از شروع: محدودیت‌های CPU و RAM از صفحه‌ی مورد کاربرد هنوز پابرجاست. Paper روی پلن Small یا Medium برای یک جمع دوستانه عالی است. یک مجموعه‌ی ۱۵۰-ماژولی برای یک جامعه‌ی بزرگ چیزی نیست که این پلن‌ها برایش ساخته شده باشند، و هیچ مقدار پیکربندی این را درست نمی‌کند. حالا که این روشن شد، بیایید بسازیم.

۱. نصب Java

Paper روی Java اجرا می‌شود. یک JDK بدون رابط گرافیکی نصب کنید — برای یک نسخه‌ی جاری ماین‌کرافت این یعنی Java 21:

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

اگر نسخه‌ی ماین‌کرافت شما قدیمی‌تر است، همان Java‌ای را که می‌خواهد نصب کنید (نسخه‌ی 17 برای دوره‌ی 1.18-1.20). لاگ‌های سرور اگر نسخه اشتباه باشد بلندبلند شکایت می‌کنند.

۲. راه‌اندازی پوشه‌ی سرور و Paper

سرور را با کاربر خودش اجرا کنید، نه root — اگر روزی چیزی خراب شد، می‌خواهید شعاع انفجار کوچک باشد.

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

فایل jar مربوط به Paper را برای نسخه‌ی ماین‌کرافت خود دانلود کنید (نشانی را از صفحه‌ی دانلودشان بردارید) و آن را با نام server.jar ذخیره کنید:

sudo -u minecraft wget -O server.jar "PASTE_PAPER_DOWNLOAD_URL_HERE"

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

sudo -u minecraft java -Xms1G -Xmx3G -jar server.jar --nogui
# بلافاصله متوقف می‌شود و از شما می‌خواهد EULA را بپذیرید
sudo -u minecraft sed -i 's/eula=false/eula=true/' eula.txt

مقدار -Xmx3G سقف هیپ JVM است. روی پلن Small با ۴ گیگابایت، حدود ۳ گیگابایت برای JVM به سیستم‌عامل فضای تنفس می‌دهد. آن را برابر کل RAM نگذارید — JVM ورای هیپ سربار دارد و قاتل OOM چانه نمی‌زند.

۳. تنظیم server.properties برای صرفه‌جویی در RAM

اینجا جایی است که مجانی برای خودتان کارایی می‌خرید. server.properties را باز کنید و تنظیم کنید:

view-distance=8
simulation-distance=6
max-players=10

واقعیت تک‌رشته‌ای را به یاد داشته باشید: tick ماین‌کرافت روی یک هسته تکیه دارد. اگر TPS افت کند، RAM بیشتر کمکی نمی‌کند — کاهش simulation-distance و سقف موب‌ها کمک می‌کند.

۴. اجرا به‌عنوان یک سرویس systemd

این همان بخشی است که «یک jar که یک‌بار اجرا کردم» را به «یک سرور» تبدیل می‌کند. فایل /etc/systemd/system/minecraft.service را بسازید:

[Unit]
Description=Minecraft Paper Server
After=network.target

[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft/server
ExecStart=/usr/bin/java -Xms1G -Xmx3G -jar server.jar --nogui
Restart=on-failure
RestartSec=10
SuccessExitStatus=0 143

[Install]
WantedBy=multi-user.target

خط Restart=on-failure همان خطی است که اهمیت دارد — اگر JVM کرش کند، systemd آن را در ده ثانیه برمی‌گرداند. SuccessExitStatus=... 143 جلوی این را می‌گیرد که systemd یک خاموشیِ عادیِ SIGTERM را شکست بپندارد. فعال و روشنش کنید:

sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
sudo systemctl status minecraft
sudo journalctl -u minecraft -f   # لاگ زنده

حالا هنگام بوت شروع می‌شود، هنگام کرش دوباره راه می‌افتد و لاگ‌ها به journald می‌روند.

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

ماین‌کرافت به‌طور پیش‌فرض روی TCP 25565 گوش می‌دهد. فقط همان را باز کنید:

sudo ufw allow 25565/tcp
sudo ufw enable

آدرس IP سرور را به دوستانتان بدهید (و :25565 را اگر پورت را عوض کردید). چیزی را که لازم ندارید باز نکنید — کل نکته‌ی اجرای جعبه‌ی خودتان این است که شما تصمیم می‌گیرید چه چیزی قابل دسترس باشد.

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

همان کاری که مردم تا روزی که آرزو می‌کنند کاش نکرده بودند از آن می‌گذرند. یک اسکریپت ساده:

#!/bin/bash
cd /opt/minecraft/server
TS=$(date +%Y%m%d-%H%M)
tar czf /opt/minecraft/backups/world-$TS.tar.gz world world_nether world_the_end

آن را از کرون اجرا کنید و — این نیمه‌ی مهم است — آرشیو را از روی سرور کپی کنید، به object storage یا ماشین دیگری. پشتیبانی روی همان دیسکِ دنیا با دیسک می‌میرد. اگر دنیایتان مهم است، پیش از tar در کنسول سرور save-off و save-all را اجرا کنید تا هرگز میان نوشتن اسنپ‌شات نگیرید.

کل ماجرا همین است

Java، Paper، پیکربندی تنظیم‌شده، یک سرویس systemd که خودکار راه‌اندازی می‌شود، یک پورت فایروال و پشتیبان‌هایی که جای دیگری زندگی می‌کنند. این یک سرور ماین‌کرافت است که مثل یک سرور رفتار می‌کند.

اگر هنوز جعبه‌ای ندارید: یک پلن انتخاب کنیدSmall (۸ دلار) برای یک گروه کوچک، Medium (۱۲ دلار) اگر به سمت ده بازیکن می‌روید — با USDC یا USDT بپردازید (بدون KYC، بدون مدارک) و در حدود ۶۰ ثانیه root خواهید داشت. سپس این صفحه را قدم‌به‌قدم پیش بروید. و یادآوری صادقانه برای آخرین بار: این راه‌اندازی درست برای vanilla یا Paper با دوستان است. یک مجموعه‌ماژول سنگین برای یک جامعه‌ی بزرگ به سخت‌افزار متفاوتی نیاز دارد، و ما ترجیح می‌دهیم این را اول از ما بشنوید.

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

به کدام نسخه‌ی Java نیاز دارم؟

نسخه‌های اخیر ماین‌کرافت Java 17 یا جدیدتر می‌خواهند؛ تازه‌ترین‌ها Java 21 می‌خواهند. بیلد OpenJDK‌ای را نصب کنید که نسخه‌ی ماین‌کرافت شما می‌طلبد — یک‌بار اجرای سرور به‌روشنی می‌گوید اگر نسخه‌ی Java اشتباه باشد. از یک JRE/JDK بدون رابط گرافیکی (headless) استفاده کنید تا یک پشته‌ی دسکتاپی که هرگز به‌کار نمی‌برید را نیاورید.

چطور سرور را بعد از خروج از حساب کاربری روشن نگه دارم؟

آن را به‌عنوان یک سرویس systemd اجرا کنید. این به شما دستورهای start/stop/status، لاگ از راه journalctl، راه‌اندازی خودکار در صورت کرش کردن JVM و شروع هنگام بوت را می‌دهد — به‌مراتب بهتر از یک نشست screen که باید یادتان بماند دوباره به آن وصل شوید. فایل سرویس در همین راهنماست.

چقدر RAM به JVM بدهم؟

‏-Xmx را کمی زیر کل RAM پلنتان بگذارید تا سیستم‌عامل مقداری برایش بماند — روی پلن Small با ۴ گیگابایت، حدود ۳ گیگابایت برای JVM معقول است. ‏-Xmx را برابر کل RAM نگذارید؛ سیستم‌عامل و سربار خود JVM به فضای تنفس نیاز دارند وگرنه توسط قاتل OOM کشته می‌شوید.

چطور از دنیا پشتیبان بگیرم؟

سرور را متوقف کنید (یا اول save-off/save-all را اجرا کنید)، پوشه‌ی دنیا را tar کنید و آرشیو را از روی جعبه کپی کنید — به object storage یا سرور دیگری. آن را روی یک کرون بگذارید. پشتیبانی که روی همان دیسکِ دنیا نشسته باشد پشتیبان نیست؛ با دیسک می‌میرد.

← بازگشت به وبلاگ← پلن‌ها و قیمت‌ها

نظرات

هنوز نظری نیست. اولین نفر باشید.

یک نظر بگذارید

نظرات پیش از نمایش بررسی می‌شوند.