SSD Nodes Learn Hosting plans →
নির্দেশিকা Matt Connorদ্বারা Matt Connor

Ubuntu 24.04-এ Minecraft সার্ভার সেটআপ করার নিয়ম

Ubuntu 24.04 VPS-এ Paper Minecraft সার্ভার চালানোর পূর্ণাঙ্গ গাইড। Java 25 ইনস্টলেশন, systemd কনফিগারেশন, পোর্ট 25565 ফায়ারওয়াল সেটিংস এবং ডেটা ব্যাকআপের সঠিক নিয়ম জানুন।

আপনি যা তৈরি করছেন

একটি Minecraft Java Edition সার্ভার যা সবসময় সচল থাকবে: Ubuntu 24.04-এ Paper, যা systemd-এর অধীনে একটি ডেডিকেটেড minecraft ইউজার হিসেবে Restart=on-failure ব্যবহার করে চলবে। এতে whitelist চালু থাকবে, ufw-তে এবং আপনার প্রোভাইডারের নেটওয়ার্ক ফায়ারওয়ালে (যদি থাকে) পোর্ট 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: 2-5 জন খেলোয়াড়ের জন্য ভ্যানিলা (vanilla) সার্ভার চালাতে পারে, তবে ভিউ ডিস্টেন্স সীমিত রাখতে হবে। এটি খেলার উপযোগী, কিন্তু বাড়তি কোনো জায়গা নেই।
  • 4 GB: বন্ধুদের সার্ভারের জন্য এটি আদর্শ আকার: Paper ব্যবহার করে প্রায় দশজন খেলোয়াড় একসাথে খেলতে পারবে, সাথে কিছু প্লাগইন থাকবে এবং অপারেটিং সিস্টেমের জন্য পর্যাপ্ত মেমোরি অবশিষ্ট থাকবে।
  • 8 GB এবং তার বেশি: এটি মডপ্যাক এবং 20 জনের বেশি খেলোয়াড়ের জন্য উপযুক্ত। এই পর্যায়ে আপনাকে CPU-এর সিঙ্গেল-কোর গতির দিকে নজর দিতে হবে, কারণ গেমের মূল লুপটি একটি থ্রেডেই চলে।

খেলোয়াড়রা যত নতুন এলাকা অন্বেষণ করবে, ডিস্কে ওয়ার্ল্ডের আকার তত বাড়বে। একটি নিয়মিত ব্যবহৃত সারভাইভাল ওয়ার্ল্ড কয়েক গিগাবাইট পর্যন্ত হতে পারে, তাই ওয়ার্ল্ড এবং এর ব্যাকআপের জন্য পর্যাপ্ত জায়গা খালি রাখুন।

ভ্যানিলা (Vanilla) নাকি Paper? Paper হলো অফিসিয়াল jar ফাইলের একটি সরাসরি বিকল্প: একই ওয়ার্ল্ড, একই ক্লায়েন্ট এবং কোনো ক্লায়েন্ট-সাইড মডের প্রয়োজন হয় না। এটি সার্ভারের ধীরগতির অংশগুলো, যেমন চাঙ্ক লোডিং, এনটিটি টিকিং এবং হপারগুলোকে নতুন করে সাজায় এবং একটি প্লাগইন API যোগ করে। শুধুমাত্র তখনই ভ্যানিলা ব্যবহার করা উচিত যদি আপনার টেকনিক্যাল রেডস্টোন ফার্মের জন্য একদম নিখুঁত ভ্যানিলা মেকানিক্সের প্রয়োজন হয়, যা Paper-এর অপ্টিমাইজেশনের কারণে পরিবর্তিত হতে পারে। অন্য সবার জন্য, Paper প্রতি গিগাবাইটে অনেক বেশি খেলোয়াড় সাপোর্ট করে। নিচে দেওয়া সবকিছুই উভয় সার্ভারের জন্য কার্যকর।

ধাপ 1: Java 25 ইনস্টল করা

Minecraft 26.1 এবং এর পরবর্তী প্রতিটি রিলিজের জন্য Java 25 প্রয়োজন; Java 21 শুধুমাত্র পুরনো 1.20 থেকে 1.21.11 লাইন পর্যন্ত সাপোর্ট করে। Ubuntu 24.04 তাদের আপডেট এবং সিকিউরিটি রিপোজিটরির মাধ্যমে Java 25 সরবরাহ করে। সম্পূর্ণ JRE ইনস্টল করুন, -headless বিল্ড নয়: Paper-এর Java ইনস্টল গাইড 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

এই সংখ্যাগুলো অমিল নির্দেশ করে: class file version 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-এর অফিসিয়াল ডাউনলোড পেজ এবং Paper-এর জন্য papermc.io-এর ডাউনলোড পেজ। তৃতীয় পক্ষের "ডাউনলোড হাব" থেকে সার্ভার jar ফাইল সংগ্রহ করা ঝুঁকিপূর্ণ, কারণ এগুলো ম্যালওয়্যার ছড়ানোর একটি দীর্ঘস্থায়ী মাধ্যম। একটি সার্ভার jar ফাইল মূলত নির্বিচারে কোড চালানোর মতো, যা আপনি ইন্টারনেটের সাথে যুক্ত একটি সার্ভারে 24/7 চালাবেন।

অফিসিয়াল পেজ থেকে বর্তমান বিল্ডের ডাউনলোড লিঙ্কটি কপি করুন (URL প্রতিটি ভার্সন এবং বিল্ডের সাথে পরিবর্তিত হয়, তাই এখানে কোনো নির্দিষ্ট লিঙ্ক দেওয়া হলো না), তারপর:

cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'

সঠিক ফলাফল: প্রায় 60 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 টাইপ করুন।

ধাপ 5: server.properties এবং কেন online-mode সবসময় true রাখতে হয়

প্রথমবার চালানোর সময় 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 know

online-mode=true সার্ভারকে প্রতিটি সংযোগকারী ব্যবহারকারীর নাম Mojang-এর সেশন সার্ভারের সাথে যাচাই করতে বাধ্য করে, যা প্রমাণ করে যে প্লেয়ারের অ্যাকাউন্টের মালিকানা বৈধ। এটিকে false-এ সেট করা, যা "cracked server" টগল হিসেবে পরিচিত, তার মানে হলো সার্ভার যেকোনো ক্লায়েন্টের দেওয়া পরিচয়কেই সত্য বলে ধরে নেবে: যে কেউ যেকোনো নামে সার্ভারে ঢুকতে পারবে, আপনার নামসহ। যেহেতু ops এবং whitelist নামের ওপর ভিত্তি করে কাজ করে, তাই একজন ছদ্মবেশী আপনার অপারেটর পারমিশন নিয়ে সার্ভারে ঢুকে পড়তে পারে। এটি false রাখার একমাত্র বৈধ কারণ হলো Velocity-এর মতো কোনো অথেন্টিকেটিং প্রক্সির পেছনে থাকা, যা নিজেই প্লেয়ারদের যাচাই করে। সাধারণ সার্ভারে এটি সবসময় true রাখতে হয়, কোনো ব্যতিক্রম ছাড়াই।

view-distance হলো এই ফাইলের সবচেয়ে বড় পারফরম্যান্স নিয়ন্ত্রক, এর CPU এবং RAM খরচ এর বর্গের সাথে সমানুপাতিক হারে বাড়ে। VPS-এর জন্য 8 একটি যুক্তিসঙ্গত ডিফল্ট মান; 10 হলো ভ্যানিলা ডিফল্ট যা লক্ষণীয়ভাবে বেশি ভারী।

white-list=true এবং enforce-whitelist=true সার্ভারকে অপরিচিতদের জন্য বন্ধ করে দেয়, যা নিচের নিরাপত্তা বিভাগে ঐচ্ছিক নয় বলে উল্লেখ করা হয়েছে। ইন-গেম /whitelist add TheirName কমান্ড ব্যবহার করে প্লেয়ারদের op হিসেবে যোগ করুন।

ধাপ 6: মেমরি ফ্ল্যাগ, কেন -Xms এবং -Xmx সমান হওয়া উচিত

JVM তার হিপ মেমরিকে -Xms (শুরুর আকার) এবং -Xmx (সর্বোচ্চ সীমা)-এর মধ্যে বরাদ্দ করে। একটি ডেডিকেটেড গেম সার্ভারে, এই দুটি মান একই সেট করুন: হিপ মেমরি এমনিতেই সর্বোচ্চ সীমায় পৌঁছাবে, এবং খেলার সময় ধাপে ধাপে এটি বাড়াতে গেলে গার্বেজ কালেক্টরের ওপর বাড়তি চাপ পড়ে। 4 জিবি র‍্যামের একটি VPS-এর জন্য সঠিক মান হলো:

/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui

-Xmx মানেই প্রসেসটির মোট ব্যবহৃত মেমরি নয়। JVM-এর হিপের বাইরেও কিছু ওভারহেড থাকে, যেমন থ্রেড স্ট্যাক, JIT ক্যাশ, ডাইরেক্ট বাফার, যা প্রায় আধা গিগাবাইট বা তার বেশি হতে পারে, এছাড়া Ubuntu-এর নিজের জন্যও মেমরি প্রয়োজন। সাধারণ নিয়ম হলো: -Xmx-এর মান সর্বোচ্চ VPS র‍্যাম থেকে 1 জিবি বিয়োগ করে নির্ধারণ করুন। এর বেশি হলে দুটি সমস্যার একটি হতে পারে। যদি বরাদ্দের শুরুতেই ব্যর্থ হয়, তবে সার্ভার চালু হবে না এবং এই ত্রুটি দেখাবে:

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 জিবি হিপের ক্ষেত্রে এর সুবিধা খুব সামান্য হলেও এই ফ্ল্যাগগুলো ক্ষতিকর নয়।

ধাপ 7: Restart=on-failure সহ একটি systemd unit

ম্যানুয়ালি চালু করা কোনো সার্ভার আপনার 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.target
sudo 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 করতে পারে, যা মূলত রিজিয়ন ফাইলগুলোকে করাপ্ট করে ফেলে। তাই দুই মিনিট সময় দিন।

যদি সার্ভিসটি ফ্ল্যাপ করে এবং জার্নালে এটি দেখায়:

[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 প্রোভাইডার কন্ট্রোল প্যানেলে দ্বিতীয় একটি নেটওয়ার্ক-লেভেল ফায়ারওয়াল অফার করে, এবং যখন এটি সক্রিয় থাকে, তখন ব্যবহারকারীরা প্রায়ই এটি ভুলে যান। SSD Nodes-এর ক্ষেত্রে এটি হলো Advanced Firewall Groups অ্যাড-অন, যা চেকআউটের সময় বা ড্যাশবোর্ড থেকে নেওয়া একটি পেইড এক্সট্রা; যদি আপনার সার্ভারে এটি থাকে, তবে সেখানেও TCP 25565 ওপেন করুন। যেকোনো একটিতে রুল না থাকার লক্ষণটি অত্যন্ত বিভ্রান্তিকর: ক্লায়েন্ট "Connecting to the server..."-এ আটকে থাকে এবং Connection timed out: no further information এর মাধ্যমে ব্যর্থ হয়, কোনো রিফিউজাল বা সার্ভার এরর দেখায় না, জার্নালেও কিছু থাকে না, কারণ প্যাকেটগুলো কখনোই সার্ভারে পৌঁছায় না। VPS-এর বাইরে অন্য কোনো মেশিন থেকে nc -vz your.server.ip 25565 ব্যবহার করে যাচাই করুন; succeeded মানে হলো পথের প্রতিটি ফায়ারওয়াল ওপেন আছে, আর হ্যাং হওয়ার অর্থ সাধারণত কোনো একটি ফায়ারওয়াল প্যাকেট ড্রপ করছে, যদিও সার্ভার খুব ব্যস্ত থাকলে কানেকশন নিতে দেরি হতে পারে, তাই সার্ভার বক্সে ss চালিয়ে নিশ্চিত হোন যে সার্ভারটি লিসেন করছে।

ufw-তে থাকা অবস্থায়, একই বক্সে SSH পাবলিক IP-তে চলছে, এবং কয়েক ঘণ্টার মধ্যেই ব্রুট-ফোর্স লগের নয়েজ শুরু হয়ে যাবে, তাই ভুলে যাওয়ার আগেই 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 যদি রাইট অপারেশনের সাথে পাল্লা দেয়, তবে এমন একটি আর্কাইভ তৈরি হবে যার অর্ধেক অংশ অসম্পূর্ণ। যখন আপনি এটি রিস্টোর করবেন—অর্থাৎ ঠিক সেই মুহূর্তে যখন ব্যাকআপটি কাজ করা জরুরি—তখন লগ ফাইলটি চাঙ্ক-লোডিং এরর (chunk-loading errors) দিয়ে ভরে যাবে এবং গেমের ম্যাপে গর্ত দেখা দেবে। এই সমস্যা এড়াতে দুটি পদ্ধতি অনুসরণ করুন।

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
sudo systemctl start minecraft

(26.1 ভার্সন থেকে, Paper ভ্যানিলা সার্ভারের মতোই তিনটি ডাইমেনশনকে 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 কমান্ড দিন। ভোর 5টার দিকে cron job-এ চালানোর জন্য এটিই উপযুক্ত পদ্ধতি।

যেকোনো পদ্ধতিই হোক, সার্ভার যে VPS-এ চলছে সেখানে ব্যাকআপ রাখা মানে প্রকৃত ব্যাকআপ নয়। scp অথবা rclone ব্যবহার করে আর্কাইভগুলো সার্ভার থেকে সরিয়ে নিন এবং একাধিক কপি রাখুন। যেহেতু সার্ভারে কোনো সমস্যা হলে আপনি সবসময় কনসোলের দিকে তাকিয়ে থাকবেন না, তাই পোর্টের ওপর একটি এক্সটারনাল চেক বসান: অন্য কোনো বক্সে থাকা Uptime Kuma ব্যবহার করে 25565 পোর্টে TCP চেক করুন। এতে আপনার প্লেয়াররা জানার আগেই আপনি বুঝতে পারবেন যে সার্ভার ডাউন হয়েছে।

প্লাগইন এবং আপগ্রেড

Paper-এ একটি প্লাগইন ইনস্টল করার অর্থ হলো একটি jar ফাইলকে /opt/minecraft/plugins/ ডিরেক্টরিতে রাখা এবং তারপর সার্ভার রিস্টার্ট করা; ইনস্টলেশন প্রক্রিয়াটি কেবল এটুকুই। প্লাগইনগুলো শুধুমাত্র তাদের অফিসিয়াল প্রজেক্ট পেজ (Hangar, Modrinth, SpigotMC) থেকেই সংগ্রহ করুন। এর কারণ সার্ভার jar ফাইলের মতোই, প্রতিটি প্লাগইন minecraft ব্যবহারকারীর অধীনে নির্বিচারে কোড চালানোর ক্ষমতা রাখে।

সার্ভার আপগ্রেড করার পদ্ধতি হলো: সার্ভার বন্ধ করা, ব্যাকআপ নেওয়া, server.jar ফাইলটিকে নতুন Minecraft ভার্সনের বিল্ড দিয়ে প্রতিস্থাপন করা এবং পুনরায় সার্ভার চালু করা। এখানে দুটি বিষয়ে সতর্ক থাকতে হবে। ওয়ার্ল্ড আপগ্রেড একমুখী; নতুন ভার্সনে একবার কোনো ওয়ার্ল্ড ওপেন করলে তা আর পুরনো ভার্সনে খোলা যাবে না, তাই এক্ষেত্রে ব্যাকআপ অত্যন্ত জরুরি। এছাড়া, নতুন Minecraft রিলিজ হওয়ার পর প্লাগইনগুলো আপডেট হতে প্রায়ই কয়েক দিন বা সপ্তাহ সময় লাগে, তাই প্রথম দিনেই নতুন ভার্সনে যাওয়ার আগে প্লাগইনগুলোর সামঞ্জস্যতা যাচাই করে নিন। 1.21.11 থেকে 26.1 বা তার পরবর্তী ভার্সনে যাওয়ার জন্য Java 25 (ধাপ 1) প্রয়োজন এবং এটি Paper-এর Nether ও End ফোল্ডারগুলোকে world/dimensions/ ডিরেক্টরিতে সরিয়ে নেয়।

আপনি যদি এই সবকিছু একটি কন্টেইনারের মাধ্যমে পরিচালনা করতে চান, যেখানে ভার্সন পিনিং, EULA গ্রহণ এবং মেমরি ফ্ল্যাগগুলো এনভায়রনমেন্ট ভেরিয়েবল হিসেবে থাকবে, তবে বহুল ব্যবহৃত itzg/minecraft-server ইমেজটি ব্যবহার করতে পারেন। এটি আপনার VPS-এ Docker Compose ব্যবহার করে একই Paper সার্ভার চালায় এবং এতে ফায়ারওয়াল ও ব্যাকআপের নিয়মগুলো একইভাবে কার্যকর থাকে।

FAQ

একটি Minecraft সার্ভারের জন্য কতটুকু RAM প্রয়োজন?

2-5 জন খেলোয়াড়ের জন্য ভ্যানিলা (vanilla) সার্ভারে 2 GB RAM যথেষ্ট; প্রায় দশজন বন্ধুর সার্ভারে Paper এবং কিছু প্লাগইন ব্যবহারের জন্য 4 GB আরামদায়ক; মডপ্যাক এবং 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 দেখালে সাধারণত এর অর্থ হলো ফায়ারওয়ালের সমস্যা: 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 ফাইল যা ভ্যানিলা ওয়ার্ল্ড লোড করে, আনমডিফাইড ক্লায়েন্ট গ্রহণ করে, এনটিটি (entity) টিক এবং চাঙ্ক (chunk) লোড করার ক্ষেত্রে অনেক বেশি দক্ষ, এবং এটি প্লাগইন ইকোসিস্টেম যোগ করে। ব্যতিক্রম হলো টেকনিক্যাল-রেডস্টোন কমিউনিটি, যাদের বিট-এক্স্যাক্ট ভ্যানিলা আচরণ প্রয়োজন, যা Paper-এর কিছু অপ্টিমাইজেশন পরিবর্তন করে ফেলে। একটি ছোট VPS-এ, Paper-এর দক্ষতা কার্যত বাড়তি RAM পাওয়ার মতোই।

সার্ভার করাপ্ট না করে কীভাবে Minecraft ওয়ার্ল্ড ব্যাকআপ নেব?

সার্ভার যখন ওয়ার্ল্ড ডিরেক্টরিতে লিখছে, তখন কখনোই তা আর্কাইভ করবেন না; রিজিয়ন-ফাইল (region-file) রাইট করার সময় কপি করলে চাঙ্ক করাপ্ট হয়ে যেতে পারে যা আপনি কেবল রিস্টোর করার সময়ই বুঝতে পারবেন। হয় সার্ভার বন্ধ করে ওয়ার্ল্ড ডিরেক্টরিগুলো tar করুন এবং আবার চালু করুন, অথবা save-off, save-all flush, tar এবং RCON-এর মাধ্যমে save-on ব্যবহার করে সার্ভার লাইভ রেখেই ব্যাকআপ নিন। এরপর আর্কাইভটি VPS থেকে সরিয়ে ফেলুন।