Ubuntu 24.04-এ Minecraft সার্ভার সেটআপ করার নিয়ম
Ubuntu 24.04 VPS-এ Paper সার্ভার তৈরির পূর্ণাঙ্গ গাইড। Java 21 কনফিগারেশন, systemd সার্ভিস, 25565 পোর্ট ওপেন করা এবং নিরাপদ ব্যাকআপ নেওয়ার সঠিক পদ্ধতি এখানে বিস্তারিত দেওয়া হলো।
আপনি যা তৈরি করছেন
একটি Minecraft Java Edition সার্ভার যা সবসময় সচল থাকবে: Ubuntu 24.04-এ Paper, যা systemd-এর অধীনে একটি ডেডিকেটেড minecraft ব্যবহারকারী হিসেবে চলবে এবং সাথে থাকবে Restart=on-failure। এতে হোয়াইটলিস্ট চালু থাকবে, আপনার প্লেয়ার এবং JVM-এর মাঝে থাকা উভয় ফায়ারওয়ালেই 25565 পোর্ট খোলা থাকবে এবং এমনভাবে ব্যাকআপ নেওয়া হবে যাতে তা ওয়ার্ল্ড ফাইলকে ক্ষতিগ্রস্ত না করে। সার্ভারটি মূলত একটি jar ফাইল এবং একটি java কমান্ডের সমষ্টি; আপনার বন্ধুরা এক বছর ধরে খেলবে নাকি প্রথম সপ্তাহেই সার্ভার বন্ধ হয়ে যাবে, তার পার্থক্য গড়ে দেয় এই কমান্ডের চারপাশের কনফিগারেশনগুলোই, আর এই গাইডটি ঠিক সেগুলো নিয়েই।
টাকা খরচ করার আগে দুটি সতর্কবার্তা। প্রথমত, Minecraft প্রচুর মেমোরি ব্যবহার করে এবং এটি মূলত সিঙ্গেল-থ্রেডেড: 1 GB RAM-এর VPS-এ খেলার উপযোগী সার্ভার চালানো সম্ভব নয় এবং চারটি ধীরগতির কোরের চেয়ে একটি দ্রুতগতির কোর বেশি কার্যকর। দ্বিতীয়ত, এটি Java Edition। Bedrock প্লেয়ার, কনসোল, ফোন বা Windows Bedrock অ্যাপ ব্যবহারকারীরা Java সার্ভারে যুক্ত হতে পারবে না; Bedrock-এর জন্য UDP 19132 পোর্টে ভিন্ন সার্ভার সফটওয়্যার অথবা Geyser প্লাগইন প্রয়োজন, যা এই গাইডের আওতাভুক্ত নয়।
আপনার প্রয়োজন একটি নতুন Ubuntu 24.04 KVM VPS, যাতে root বা sudo অ্যাক্সেস আছে এবং প্রায় ত্রিশ মিনিট সময়।
সাইজিং: বন্ধুদের সার্ভারের জন্য আসলে কী প্রয়োজন
RAM হলো সবচেয়ে গুরুত্বপূর্ণ বিষয়, এবং বাস্তবসম্মত প্রয়োজনীয়তা মডপ্যাক ফোরামের পরামর্শের চেয়ে কম:
- 2 GB: ভ্যানিলা (vanilla) সার্ভারে 2-5 জন খেলোয়াড়ের জন্য মাঝারি ভিউ ডিস্টেন্সে এটি কাজ করে। এটি খেলার উপযোগী, তবে অতিরিক্ত কোনো জায়গা নেই।
- 4 GB: বন্ধুদের সার্ভারের জন্য এটি আরামদায়ক সাইজ: Paper-এ প্রায় দশজন খেলোয়াড় এবং কিছু প্লাগইন একসাথে চলতে পারে, সাথে অপারেটিং সিস্টেমের জন্যও পর্যাপ্ত জায়গা থাকে।
- 8 GB এবং তার বেশি: এটি মডপ্যাক এবং 20 জনের বেশি খেলোয়াড়ের জন্য উপযুক্ত। এক্ষেত্রে আপনার সিঙ্গেল-কোর CPU স্পিডের দিকেও নজর দেওয়া উচিত, কারণ গেমের মূল লুপটি একটি থ্রেডে চলে।
খেলোয়াড়রা গেমের জগত অন্বেষণ করার সাথে সাথে ডিস্কে ওয়ার্ল্ডের আকার বাড়তে থাকে। একটি বহুল ব্যবহৃত সারভাইভাল ওয়ার্ল্ড কয়েক গিগাবাইট পর্যন্ত হতে পারে, তাই ওয়ার্ল্ড এবং এর ব্যাকআপের জন্য পর্যাপ্ত জায়গা খালি রাখুন।
ভ্যানিলা নাকি Paper? Paper হলো অফিসিয়াল jar ফাইলের একটি সরাসরি বিকল্প: একই ওয়ার্ল্ড, একই ক্লায়েন্ট, কোনো ক্লায়েন্ট-সাইড মডের প্রয়োজন নেই। এটি সার্ভারের ধীরগতির পাথ, চাঙ্ক লোডিং, এনটিটি টিকিং, হপার অপ্টিমাইজ করে এবং একটি প্লাগইন API যুক্ত করে। শুধুমাত্র যদি আপনার টেকনিক্যাল রেডস্টোন ফার্মের জন্য বিট-এক্স্যাক্ট ভ্যানিলা মেকানিক্সের প্রয়োজন হয়, যা Paper-এর অপ্টিমাইজেশনের কারণে পরিবর্তিত হতে পারে, কেবল তখনই ভ্যানিলা ব্যবহার করুন; অন্য সবার জন্য, Paper প্রতি গিগাবাইটে বেশি খেলোয়াড় সাপোর্ট করে। নিচে দেওয়া সবকিছুই উভয় সার্ভারের জন্য কার্যকর।
ধাপ 1: Java 21 ইনস্টল করা
Minecraft 1.20.5 এবং এর পরবর্তী প্রতিটি রিলিজের (সব 1.21.x ভার্সন) জন্য Java 21 প্রয়োজন। Ubuntu 24.04 এর ডিফল্ট রিপোজিটরিতে এটি পাওয়া যায় এবং এর হেডলেস বিল্ডটি এমন সব ডেস্কটপ লাইব্রেরি বাদ দেয় যা সার্ভারে কখনোই ব্যবহৃত হয় না:
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 ফাইল শুধুমাত্র দুটি জায়গা থেকে সংগ্রহ করা উচিত: ভ্যানিলা (vanilla) সার্ভারের জন্য minecraft.net-এর অফিসিয়াল ডাউনলোড পেজ এবং পেপার (Paper)-এর জন্য papermc.io-এর ডাউনলোড পেজ। তৃতীয় পক্ষের "ডাউনলোড হাব" যারা সার্ভার jar ফাইলগুলো পুনরায় প্যাকেজ করে, সেগুলো দীর্ঘকাল ধরে ম্যালওয়্যার ছড়ানোর মাধ্যম হিসেবে ব্যবহৃত হয়ে আসছে। একটি সার্ভার jar হলো নির্বিচারে কোড যা আপনি ইন্টারনেট-মুখী একটি বক্সে 24/7 চালানোর প্রস্তুতি নিচ্ছেন।
অফিসিয়াল পেজ থেকে বর্তমান বিল্ডের ডাউনলোড লিঙ্কটি কপি করুন (URL প্রতিটি ভার্সন এবং বিল্ডের সাথে পরিবর্তিত হয়, তাই এখানে একটি নির্দিষ্ট লিঙ্ক দেওয়া হলে তা অকেজো হয়ে যাবে), তারপর:
cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'সঠিক ফলাফল: প্রায় 50 MB সাইজের একটি server.jar, যার মালিক minecraft এবং যা ls -lh /opt/minecraft/server.jar দিয়ে নিশ্চিত করা হয়েছে।
ধাপ 4: প্রথমবার চালানো, EULA, এবং নিজেকে op করা
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.এটি কোনো ত্রুটি নয়; এটি একটি লাইসেন্স গেট। এই রানটি jar ফাইলের পাশে eula.txt তৈরি করেছে। যদি আপনি এখনো না পড়ে থাকেন তবে লিঙ্ক করা EULA-টি পড়ুন, তারপর ফ্ল্যাগটি পরিবর্তন করুন:
sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txtএকই java কমান্ডটি পুনরায় চালান। এবার এটি ওয়ার্ল্ড জেনারেট করবে, যা প্রথমবার বুট হওয়ার সময় এক বা দুই মিনিট সময় নিতে পারে এবং শেষে এই অবস্থায় স্থির হবে:
[Server thread/INFO]: Done (9.204s)! For help, type "help"আপনার কাছে এখন একটি লাইভ কনসোল আছে। দ্বিতীয় কাজটির জন্য এটি ব্যবহার করুন: op YourMinecraftName (আপনার সঠিক ইন-গেম ইউজারনেম) টাইপ করুন। সার্ভার আপনাকে ops.json ফাইলে লিখে রাখবে, যাতে পরবর্তীতে যখন কোনো কনসোল সংযুক্ত থাকবে না, তখন আপনি গেমের ভেতর থেকেই যেকোনো অ্যাডমিন কমান্ড চালাতে পারেন। এরপর নিরাপদে সেভ করে বের হওয়ার জন্য stop টাইপ করুন।
Step 5: server.properties, and why online-mode stays true
The first run also wrote server.properties. Most defaults are fine; these lines are the ones worth deciding deliberately:
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 makes the server verify every joining username against Mojang's session servers, proving the player owns the account. Setting it to false, the "cracked server" toggle, means the server takes any client's word for who they are: anyone can join as any name, including yours, and since ops and whitelists are keyed by name, an impersonator walks in with your operator permissions. The only legitimate reason it is ever false is behind an authenticating proxy like Velocity, which verifies players itself. On a normal server it stays true, full stop.
view-distance is the biggest performance lever in the file, CPU and RAM cost scale roughly with its square. 8 is a sensible VPS default; 10 is the vanilla default and noticeably heavier.
white-list=true plus enforce-whitelist=true closes the server to strangers, which the security section below argues is not optional. Add players with /whitelist add TheirName in-game as an op.
ধাপ 6: মেমরি ফ্ল্যাগ, কেন -Xms এবং -Xmx সমান হওয়া উচিত
JVM তার হিপ মেমরিকে -Xms (শুরুর আকার) এবং -Xmx (সর্বোচ্চ সীমা)-এর মধ্যে বরাদ্দ করে। একটি ডেডিকেটেড গেম সার্ভারে, এই দুটি মান সমান রাখুন: হিপ মেমরি এমনিতেই সর্বোচ্চ সীমায় পৌঁছে যাবে, এবং খেলার সময় ধাপে ধাপে এটি বৃদ্ধি করলে গার্বেজ-কালেক্টরের ওপর বাড়তি চাপ পড়ে। 4 GB RAM-এর একটি VPS-এর জন্য সঠিক জোড়াটি হলো:
/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui-Xmx হলো প্রসেসটির মোট ব্যবহৃত মেমরি নয়। JVM এর সাথে হিপ-বহির্ভূত ওভারহেড, থ্রেড স্ট্যাক, JIT ক্যাশ, ডাইরেক্ট বাফার হিসেবে প্রায় আধা গিগাবাইট বা তার বেশি মেমরি যোগ করে এবং Ubuntu-এর নিজের জন্যও জায়গার প্রয়োজন হয়। কাজের নিয়মটি হলো: -Xmx-এর মান সর্বোচ্চ VPS RAM থেকে 1 GB বিয়োগ করে নির্ধারণ করুন। এর বেশি হলে দুটি সমস্যার একটি হতে পারে। যদি বরাদ্দের শুরুতেই ব্যর্থ হয়, তবে সার্ভারটি চালু হতে অস্বীকার করবে এবং এই বার্তাটি দেখাবে:
Error: Could not reserve enough space for object 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 এবং আরও এক ডজন ফ্ল্যাগ)। এটি বড় হিপ মেমরিতে গার্বেজ-কালেকশনের বিরতিকে মসৃণ করে। Paper-এর ডকুমেন্টেশন থেকে সম্পূর্ণ লাইনটি তৈরি করুন; 2–4 GB হিপ মেমরিতে এর সুবিধা সামান্য হলেও এই ফ্ল্যাগগুলো ক্ষতিকর নয়।
ধাপ 7: Restart=on-failure সহ একটি systemd ইউনিট
ম্যানুয়ালি চালু করা একটি সার্ভার আপনার SSH সেশন বন্ধ হওয়ার সাথে সাথে বন্ধ হয়ে যায় এবং রিবুট করার পরেও তা চালু হয় না। /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) প্রদর্শন করবে এবং জার্নাল, যা এখন সার্ভার কনসোলের আউটপুট ধারণ করে, তা পুনরায় Done লাইনে শেষ হবে।
এই ইউনিটে দুটি সুচিন্তিত সিদ্ধান্ত নেওয়া হয়েছে। Restart=on-failure ক্র্যাশের পর সার্ভারকে পুনরায় চালু করে, কিন্তু স্বাভাবিক stop এর পর নয়, যাতে রক্ষণাবেক্ষণ করা সম্ভব হয়। এবং TimeoutStopSec=120 দেখতে যতটা সাধারণ মনে হয় তার চেয়ে অনেক বেশি গুরুত্বপূর্ণ: systemctl stop একটি SIGTERM পাঠায়, Minecraft সার্ভার এটি গ্রহণ করে এবং বন্ধ হওয়ার আগে প্রতিটি ওয়ার্ল্ড সেভ করে, আর বড় ওয়ার্ল্ডের ক্ষেত্রে এই সেভ হতে সময় লাগে। Systemd-এর ডিফল্ট টাইমআউট JVM-কে সেভ চলাকালীন SIGKILL করতে পারে, যা মূলত রিজিয়ন ফাইল নষ্ট হওয়ার কারণ। তাই একে দুই মিনিট সময় দিন।
যদি সার্ভিসটি বারবার চালু ও বন্ধ হতে থাকে (flapping) এবং জার্নালে এটি দেখা যায়:
[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 পোর্টটি দখল করে রেখেছে, যা সাধারণত অন্য কোনো 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 প্রোভাইডার কন্ট্রোল প্যানেলে একটি দ্বিতীয়, নেটওয়ার্ক-লেভেল ফায়ারওয়াল চালায় এবং মানুষ সাধারণত এটিই ভুলে যায়। সেখানেও TCP 25565 ওপেন করুন। দুটির মধ্যে একটিতে পোর্ট ওপেন না থাকলে যে লক্ষণ দেখা দেয় তা বেশ বিভ্রান্তিকর: ক্লায়েন্ট "Connecting to the server..." অবস্থায় আটকে থাকে এবং Connection timed out: no further information এর মাধ্যমে ব্যর্থ হয়, কোনো রিফিউজাল বা সার্ভার এরর দেখায় না, জার্নালেও কিছু থাকে না, কারণ প্যাকেটগুলো কখনোই পৌঁছায় না। VPS-এর বাইরে থাকা অন্য কোনো মেশিন থেকে nc -vz your.server.ip 25565 দিয়ে যাচাই করুন; succeeded আসার অর্থ হলো উভয় ফায়ারওয়ালই ওপেন আছে, আর যদি হ্যাং হয়ে থাকে তবে বুঝতে হবে অন্তত একটি ফায়ারওয়াল ওপেন নেই।
ufw-তে কাজ করার সময় মনে রাখবেন, একই বক্সে পাবলিক IP-তে SSH চলছে এবং কয়েক ঘণ্টার মধ্যেই ব্রুট-ফোর্স লগ নয়েজ শুরু হয়ে যাবে, তাই ভুলে যাওয়ার আগেই Ubuntu 24.04-এ SSH-এর জন্য Fail2ban সেট আপ করুন।
এখন কানেক্ট করুন: Multiplayer, Direct Connection, তারপর সার্ভার IP দিন। যেহেতু আপনি ধাপ 4-এ নিজেকে op করেছেন, তাই ইন-গেম কমান্ডগুলো সাথে সাথেই কাজ করবে, প্রতিটি প্লেয়ারের জন্য /whitelist add FriendName ব্যবহার করুন, অথবা পরিকল্পনা অনুযায়ী /gamemode creative ব্যবহার করুন।
ধাপ 9: হোয়াইটলিস্ট ব্যবহার করুন, কারণ ইন্টারনেট পোর্ট 25565 খুঁজে বের করে
একটি Minecraft সার্ভার ইন্টারনেটের জন্য উন্মুক্ত রাখা কোনো তাত্ত্বিক ঝুঁকি নয়: ম্যাস স্ক্যানারগুলো ক্রমাগত পুরো IPv4 স্পেস জুড়ে পোর্ট 25565 অনুসন্ধান করে। শখের বশে গ্রিফিং (griefing) করা প্রজেক্টগুলো এভাবে লক্ষ লক্ষ উন্মুক্ত সার্ভারের ম্যাপ তৈরি করেছে। একটি হোয়াইটলিস্টবিহীন সার্ভারে কয়েক দিনের মধ্যে, এমনকি কয়েক ঘণ্টার মধ্যেই অনাকাঙ্ক্ষিত ভিজিটর চলে আসে। ধাপ 5-এর হোয়াইটলিস্টই এর সমাধান: online-mode=true পরিচয় নিশ্চিত করে এবং হোয়াইটলিস্ট আপনার নির্বাচিত পরিচয়গুলো ছাড়া অন্যদের প্রবেশাধিকার সীমাবদ্ধ করে। এই দুটি বিষয়ই হলো সম্পূর্ণ নিরাপত্তা মডেল এবং বন্ধুদের সার্ভারের জন্য এটিই যথেষ্ট।
গেম ছাড়া কনসোল অ্যাক্সেস, স্ক্রিপ্টেড ব্যাকআপ এবং ক্রন জব (cron job)-এর জন্য server.properties-এ RCON সক্রিয় করুন (enable-rcon=true, একটি শক্তিশালী rcon.password, পোর্ট 25575)। এরপর VPS-এর ভেতরেই এর GitHub সোর্স থেকে ছোট mcrcon ক্লায়েন্টটি বিল্ড করুন; এটি Ubuntu-এর রিপোজিটরিতে নেই। কোনো ফায়ারওয়ালে 25575 পোর্টটি খুলবেন না: RCON পাসওয়ার্ডটি প্লেইনটেক্সটে পাঠায়, তাই এটি শুধুমাত্র লুপব্যাক (loopback)-এর মধ্যেই সীমাবদ্ধ রাখা উচিত।
ধাপ 10: এমন ব্যাকআপ যা ওয়ার্ল্ড ফাইল নষ্ট করে না
একটিই নিয়ম: সার্ভার যখন ওয়ার্ল্ড ডিরেক্টরিতে লিখছে, তখন সেটি কপি করবেন না। গেম চলাকালীন রিজিয়ন ফাইলগুলো ক্রমাগত নতুন করে লেখা হয়; একটি tar যদি রাইট অপারেশনের সাথে পাল্লা দেয়, তবে এমন একটি আর্কাইভ তৈরি হবে যাতে অর্ধেক লেখা চাঙ্ক থাকবে। পরবর্তীতে যখন আপনি এটি রিস্টোর করবেন—ঠিক যে মুহূর্তে ব্যাকআপটি কাজ করার কথা—তখন লগ ফাইল চাঙ্ক-লোডিং এরর দিয়ে ভরে যাবে এবং টেরেইনে গর্ত দেখা দেবে। দুটি পদ্ধতি অনুসরণ করলে এটি এড়ানো যায়।
Stop-copy-start পদ্ধতিটি সহজ, তবে এতে এক মিনিটের জন্য সার্ভার ডাউন রাখতে হয়:
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-এ বিভক্ত করে; একটি ভ্যানিলা সার্ভার সবকিছু world-এর ভেতরে রাখে, তাই সেখানে অন্য দুটি বাদ দিন।)
Save-off পদ্ধতিটি লাইভ ব্যাকআপের জন্য ব্যবহৃত হয়: RCON-এর মাধ্যমে save-off কমান্ড দিন (অটোসেভার বন্ধ করার জন্য), তারপর save-all flush দিন (সবকিছু ডিস্কে সেভ হওয়া পর্যন্ত অপেক্ষা করুন), এরপর tar ফাইলটি নিন এবং সবশেষে save-on কমান্ড দিন। এটি সেই সংস্করণ যা আপনি ভোর 5টায় cron-এ সেট করে রাখতে পারেন।
যে পদ্ধতিই ব্যবহার করুন না কেন, সার্ভার যে VPS-এ চলছে সেখানে ব্যাকআপ রাখা মানেই ব্যাকআপ নয়। scp বা rclone ব্যবহার করে আর্কাইভগুলো সার্ভারের বাইরে সরিয়ে নিন এবং একাধিক কপি রাখুন। যেহেতু কোনো সমস্যা হলে আপনি কনসোলের দিকে তাকিয়ে থাকবেন না, তাই পোর্টের ওপর একটি এক্সটারনাল চেক বসান: অন্য একটি বক্সে Uptime Kuma ব্যবহার করে 25565 পোর্টে একটি TCP চেক করুন। এটি আপনার খেলোয়াড়দের জানার আগেই আপনাকে জানিয়ে দেবে যে সার্ভার ডাউন হয়েছে।
প্লাগইন এবং আপগ্রেড
Paper-এ, একটি প্লাগইন হলো একটি jar ফাইল যা /opt/minecraft/plugins/ ডিরেক্টরিতে রাখতে হয় এবং এরপর সার্ভার রিস্টার্ট করতে হয়, ইনস্টলেশন প্রক্রিয়াটি এতটুকুই। শুধুমাত্র তাদের অফিসিয়াল প্রজেক্ট পেজ (Hangar, Modrinth, SpigotMC) থেকে প্লাগইন সংগ্রহ করুন। সার্ভার jar ফাইলের ক্ষেত্রে যে কারণটি প্রযোজ্য, এখানেও তাই: প্রতিটি প্লাগইন হলো একটি আর্বিট্রারি কোড যা minecraft ইউজার হিসেবে রান করে।
সার্ভার আপগ্রেড করার প্রক্রিয়াটি হলো: সার্ভার বন্ধ করা, ব্যাকআপ নেওয়া, server.jar ফাইলটিকে নতুন Minecraft ভার্সনের বিল্ড দিয়ে প্রতিস্থাপন করা এবং পুনরায় সার্ভার চালু করা। দুটি বিষয়ে সতর্ক থাকবেন। ওয়ার্ল্ড আপগ্রেড একমুখী, অর্থাৎ নতুন ভার্সনে একবার ওপেন করা ওয়ার্ল্ড পুরনো ভার্সনে আর ওপেন হবে না, তাই এক্ষেত্রে ব্যাকআপ অত্যন্ত জরুরি। এছাড়া, নতুন Minecraft রিলিজ হওয়ার পর প্লাগইনগুলো আপডেট হতে প্রায়ই কয়েক দিন বা সপ্তাহ সময় নেয়, তাই প্রথম দিনেই নতুন ভার্সনে যাওয়ার আগে প্লাগইনগুলোর সামঞ্জস্যতা (compatibility) যাচাই করে নিন।
আপনি যদি এই সবকিছু একটি কন্টেইনার হিসেবে ম্যানেজ করতে চান, যেখানে ভার্সন পিনিং, EULA গ্রহণ এবং মেমোরি ফ্ল্যাগগুলো এনভায়রনমেন্ট ভেরিয়েবল হিসেবে থাকবে, তবে বহুল ব্যবহৃত itzg/minecraft-server ইমেজটি ব্যবহার করতে পারেন। এটি একই Paper সার্ভারকে আপনার VPS-এ Docker Compose এর মাধ্যমে রান করে এবং এতে ফায়ারওয়াল ও ব্যাকআপের নিয়মগুলো একই থাকে।
FAQ
একটি Minecraft সার্ভারের জন্য কতটুকু RAM প্রয়োজন?
2-5 জন খেলোয়াড়ের ভ্যানিলা (vanilla) সার্ভারের জন্য 2 GB RAM যথেষ্ট; প্রায় দশজন বন্ধুর সার্ভারের জন্য Paper এবং কিছু প্লাগইনসহ 4 GB RAM আরামদায়ক; মডপ্যাক এবং 20 জনের বেশি খেলোয়াড়ের জন্য 8 GB বা তার বেশি RAM প্রয়োজন। VPS-এর আকার যাই হোক না কেন, -Xmx-কে মোট RAM থেকে 1 GB বিয়োগ করে সেট করুন, কারণ JVM হিপের বাইরেও মেমরি ব্যবহার করে এবং এর বেশি হলে Error: Could not reserve enough space for object heap ত্রুটি দেখা দেয় অথবা সিস্টেম নীরবে OOM কিল (OOM kill) করে দেয়।
আমার বন্ধুরা কেন আমার Minecraft সার্ভারে সংযোগ করতে পারছে না?
ক্লায়েন্ট হ্যাং হয়ে Connection timed out: no further information ত্রুটি দেখা দেওয়ার অর্থ প্রায় সবসময়ই ফায়ারওয়াল সংক্রান্ত সমস্যা, এবং এখানে দুটি ফায়ারওয়াল থাকে: VPS-এ থাকা ufw এবং আপনার প্রোভাইডারের কন্ট্রোল প্যানেলে থাকা নেটওয়ার্ক ফায়ারওয়াল। উভয় ক্ষেত্রেই TCP 25565 পোর্টটি খোলা থাকতে হবে। সার্ভারটি প্রকৃতপক্ষে লিসেন (listen) করছে কিনা তা নিশ্চিত করতে বক্সে sudo ss -tlnp | grep 25565 কমান্ডটি চালান, তারপর বাইরে থেকে nc -vz your.server.ip 25565 দিয়ে পরীক্ষা করুন।
আমার কি server.properties ফাইলে online-mode=false সেট করা উচিত?
না। online-mode=false সেট করলে সার্ভার Mojang অথেন্টিকেশন পুরোপুরি এড়িয়ে যায়, ফলে যে কেউ যেকোনো ইউজারনেম ব্যবহার করে সার্ভারে যোগ দিতে পারে। এতে একজন অপারেটরের নাম ব্যবহার করে তার পারমিশন হাতিয়ে নেওয়া সম্ভব এবং স্কিন ও স্থিতিশীল UUID কাজ করা বন্ধ করে দেয়। এর একমাত্র বৈধ ব্যবহার হলো Velocity-এর মতো কোনো অথেন্টিকেটিং প্রক্সির পেছনে, যা নিজেই খেলোয়াড়দের যাচাই করে। সাধারণ সার্ভারের ক্ষেত্রে এটি true থাকাই উচিত।
ভ্যানিলা Minecraft সার্ভারের চেয়ে কি Paper ভালো?
প্রায় সবার জন্যই উত্তরটি হলো হ্যাঁ: Paper একটি ড্রপ-ইন জার (jar) ফাইল যা ভ্যানিলা ওয়ার্ল্ড লোড করে, আনমডিফাইড ক্লায়েন্ট গ্রহণ করে, এনটিটি টিক (tick) এবং চাঙ্ক (chunk) লোড করার ক্ষেত্রে অনেক বেশি দক্ষ এবং এতে প্লাগইন ইকোসিস্টেম যুক্ত করার সুবিধা রয়েছে। শুধুমাত্র টেকনিক্যাল-রেডস্টোন কমিউনিটির ক্ষেত্রে ব্যতিক্রম হতে পারে, যাদের বিট-এক্স্যাক্ট ভ্যানিলা আচরণ প্রয়োজন, যা Paper-এর কিছু অপ্টিমাইজেশনের কারণে পরিবর্তিত হতে পারে। ছোট VPS-এর ক্ষেত্রে, Paper-এর দক্ষতা কার্যত বাড়তি RAM পাওয়ার মতোই কার্যকর।
সার্ভার করাপ্ট না করে কীভাবে Minecraft ওয়ার্ল্ডের ব্যাকআপ নেব?
সার্ভার যখন ওয়ার্ল্ড ডিরেক্টরিতে ডেটা লিখছে, তখন কখনোই তা আর্কাইভ করবেন না। রিজিয়ন-ফাইল (region-file) রাইট করার সময় কপি করার চেষ্টা করলে চাঙ্ক করাপ্ট হয়ে যেতে পারে, যা আপনি রিস্টোর করার সময় বুঝতে পারবেন। হয় সার্ভার বন্ধ করে ওয়ার্ল্ড ডিরেক্টরিগুলো tar করুন এবং পুনরায় চালু করুন, অথবা RCON-এর মাধ্যমে save-off, save-all flush, tar, save-on ব্যবহার করে সার্ভার চালু রেখেই ব্যাকআপ নিন। এরপর আর্কাইভটি VPS থেকে সরিয়ে নিন।