SSD Nodes Learn
गाइड Matt Connorलेखक: Matt Connor · अपडेट किया गया: 2026-07-24

VPS पर Minecraft server कैसे चलाएं

Ubuntu 24.04 VPS पर Paper Minecraft setup करें। Java 21, systemd unit, port 25565 और RAM sizing के साथ server को stable बनाने का सही तरीका यहाँ सीखें।

आप क्या बना रहे हैं

एक Minecraft Java Edition server जो हमेशा चालू रहे: Ubuntu 24.04 पर Paper, systemd के तहत एक dedicated minecraft user के रूप में, Restart=on-failure के साथ। players और JVM के बीच मौजूद दोनों firewalls में port 25565 खुला होना चाहिए, whitelist चालू होनी चाहिए, और backups इस तरह से लिए जाने चाहिए जिससे world corrupt न हो। server स्वयं केवल एक jar file और एक java command है; वह चीज़ जो आपके friends के एक साल तक खेलने वाले server को पहले weekend में बंद होने वाले server से अलग करती है, वह इसी command के इर्द-गिर्द है, और यह guide उसी के बारे में है।

पैसे खर्च करने से पहले दो महत्वपूर्ण चेतावनियाँ। पहली, Minecraft को बहुत अधिक memory की आवश्यकता होती है और यह मुख्य रूप से single-threaded है: 1 GB VPS पर playable server नहीं चलेगा, और एक fast core चार slow cores से बेहतर है। दूसरी, यह Java Edition है। Bedrock players — consoles, phones, Windows Bedrock app — Java server में join नहीं कर सकते; Bedrock के लिए UDP 19132 पर अलग server software, या Geyser plugin की आवश्यकता होती है, जो इस guide के दायरे में नहीं है।

आपको root या sudo एक्सेस के साथ एक fresh Ubuntu 24.04 KVM VPS और लगभग तीस मिनट चाहिए।

Sizing: आपके friends server को वास्तव में क्या चाहिए

RAM सबसे महत्वपूर्ण संख्या है, और वास्तविक आंकड़े modpack forums के सुझावों से कम हैं:

  • 2 GB कम view distance के साथ 2–5 players के लिए vanilla चला सकता है। यह playable है, लेकिन इसमें कोई extra headroom नहीं है।
  • 4 GB friends-server के लिए एक आरामदायक size है: Paper पर कुछ plugins के साथ लगभग दस concurrent players, और OS के लिए पर्याप्त memory बचती है।
  • 8 GB और उससे अधिक modpack और 20-plus players के लिए है, जहाँ आपको single-core CPU speed पर भी ध्यान देना चाहिए, क्योंकि main game loop एक ही thread पर चलता है।

जैसे-जैसे players explore करते हैं, disk पर world का size बढ़ता जाता है — एक well-travelled survival world कई gigabytes तक पहुँच जाता है — इसलिए world और उसके backups के लिए extra space छोड़ें।

Vanilla या Paper? Paper, official jar का एक drop-in replacement है: same worlds, same clients, और किसी client-side mod की आवश्यकता नहीं है। यह slowest server paths — chunk loading, entity ticking, hoppers — को rewrite करता है और एक plugin API जोड़ता है। Vanilla चलाने का एकमात्र कारण तब है जब आपको technical redstone farms के लिए bit-exact vanilla mechanics की आवश्यकता हो, क्योंकि Paper के optimisations उन्हें बदल सकते हैं; अन्य सभी के लिए, Paper प्रति gigabyte अधिक players प्रदान करता है। नीचे दी गई सभी चीजें दोनों के लिए काम करती हैं।

Step 1: Java 21 install करें

Minecraft 1.20.5 और उसके बाद के सभी release (सभी 1.21.x) के लिए Java 21 आवश्यक है। Ubuntu 24.04 इसे default repos में प्रदान करता है। headless build में desktop libraries नहीं होती हैं, जिनकी server को आवश्यकता नहीं होती:

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

सही result: पहली line में openjdk version "21.0.x" लिखा होना चाहिए। यदि 17 या 11 लिखा है, तो कोई अन्य JRE installed है जो पहले run हो रहा है; इसे sudo update-alternatives --config java से ठीक करें और java-21 वाला entry चुनें।

इस check को छोड़ने से बाद में Minecraft server की सबसे आम error आती है। Java 17 के साथ, server jar तुरंत crash हो जाता है:

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

ये numbers mismatch को दर्शाते हैं: class file version 65.0 Java 21 है, 61.0 Java 17 है, और 60.0 Java 16 है। आप कोई भी pair देखें, solution एक ही है — नया JRE install करें और update-alternatives को फिर से run करें।

Step 2: एक dedicated user का उपयोग करें, root का नहीं

Server उस plugin code को execute करता है और network input को parse करता है जो भी उस port तक पहुँच सकता है। यदि कोई त्रुटि होती है, तो root के रूप में running compromise आपके VPS पर कब्ज़ा कर लेगा; जबकि minecraft के रूप में running compromise केवल एक game world तक सीमित रहेगा।

sudo adduser --system --group --home /opt/minecraft minecraft

--system एक ऐसा no-password account बनाता है जो SSH के माध्यम से log in नहीं कर सकता। इसका home और working directory /opt/minecraft है। इसके बाद server पर execute होने वाला हर command इसी user के रूप में चलेगा।

Step 3: official source se server jar download karein

Server jar ke liye sirf do hi bharosemand jagah hain: vanilla ke liye minecraft.net ka official server download page, aur Paper ke liye papermc.io ka downloads page. Third-party "download hubs" jo server jars ko repackage karte hain, malware failane ka ek purana zariya hain — server jar ek arbitrary code hai jise aap internet-facing box par 24/7 chalane wale hain.

Official page se current build ka download link copy karein (har version aur build ke saath URL badal jata hai, isliye yahan koi ek URL fix nahi kiya ja sakta), phir:

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

Sahi result: minecraft dwara owned lagbhag 50 MB ki server.jar, jise ls -lh /opt/minecraft/server.jar se confirm kiya gaya hai.

Step 4: पहली बार चलाना, EULA, और खुद को ऑपरेटर बनाना

systemd का उपयोग करने से पहले एक बार सर्वर को interactively चलाएं — पहली बार चलाने के दो मुख्य कार्य हैं जो केवल live console ही कर सकता है।

cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar nogui

यह कुछ ही सेकंड में बंद हो जाएगा — Paper पहले अपने patches लागू करने में थोड़ा समय लेता है — और log इस लाइन के साथ समाप्त होता है जिसे हर कोई देखता है:

[ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

यह error नहीं है; यह एक license gate है। run ने jar के बगल में eula.txt लिखा है। यदि आपने अभी तक नहीं पढ़ा है, तो linked EULA पढ़ें, फिर इस flag को बदलें:

sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txt

वही java command फिर से चलाएं। इस बार यह world generate करेगा — पहले boot पर एक या दो मिनट लगेंगे — और इस स्थिति में रुक जाएगा:

[Server thread/INFO]: Done (9.204s)! For help, type "help"

अब आपके पास एक live console है। इसका उपयोग दूसरे कार्य के लिए करें: op YourMinecraftName (आपका सटीक in-game username) टाइप करें और server आपको ops.json में लिख देगा, ताकि बाद में — जब कोई console attached न हो — आप game के अंदर से हर admin command चला सकें। फिर save करने और cleanly exit करने के लिए stop टाइप करें।

Step 5: server.properties, aur online-mode true kyun rehta hai

Pehli baar run karne par server.properties bhi create hota hai. Zyadatar defaults sahi hote hain; lekin in lines par aapko soch-samajh kar faisla lena chahiye:

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 server ko har joining username ko Mojang's session servers ke saath verify karne ke liye majboor karta hai, taaki yeh saabit ho sake ki player ke paas us account ka ownership hai. Isse false par set karne ka matlab hai "cracked server" mode on karna — iska matlab hai ki server kisi bhi client ki identity par bharosa kar leta hai: koi bhi kisi bhi naam se join kar sakta hai, aapke naam se bhi, aur kyunki ops aur whitelists naam par based hote hain, isliye koi bhi aapki operator permissions ke saath server mein aa sakta hai. Isse false rakhne ka ek hi valid reason hai: Velocity jaise authenticating proxy ka use karna, jo khud players ko verify karta hai. Ek normal server par yeh hamesha true hi rehta hai.

view-distance is file mein sabse bada performance lever hai — CPU aur RAM ki khapat iske square ke hisaab se badhti hai. 8 ek sahi VPS default hai; 10 vanilla default hai aur kaafi heavy hai.

white-list=true aur enforce-whitelist=true server ko anjaan logon ke liye band kar dete hain, jise neeche diye gaye security section mein optional nahi maana gaya hai. Players ko in-game op banakar /whitelist add TheirName ke zariye add karein.

Step 6: memory flags — -Xms और -Xmx एक समान क्यों होने चाहिए

JVM अपना heap -Xms (starting size) और -Xmx (ceiling) के बीच allocate करता है। Dedicated game server पर, इन्हें एक ही value पर सेट करें: heap वैसे भी ceiling तक पहुँच ही जाएगा, और इसे धीरे-धीरे बढ़ाना play के दौरान garbage-collector का बोझ बढ़ा देता है। 4 GB VPS पर सही pair यह है:

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

-Xmx वह total memory नहीं है जो process उपयोग करता है। JVM अतिरिक्त off-heap overhead जोड़ता है — जैसे thread stacks, JIT caches, direct buffers — जो लगभग आधा gigabyte या उससे अधिक होता है, और Ubuntu को भी space चाहिए। नियम यह है: -Xmx अधिकतम VPS RAM minus 1 GB। यदि आप इससे अधिक allocate करते हैं, तो दो तरह की failures हो सकती हैं। यदि allocation शुरुआत में ही fail हो जाता है, तो server इस error के साथ start होने से मना कर देगा:

Error: Could not reserve enough space for object heap

यह error स्पष्ट और तुरंत आता है। अधिक गंभीर स्थिति तब आती है जब server सही से start होता है लेकिन घंटों बाद crash हो जाता है; ऐसा तब होता है जब load के दौरान heap भर जाता है और kernel का OOM killer system के सबसे बड़े process — JVM — को चुन लेता है। Server log में कुछ दिखाई नहीं देगा; इसका प्रमाण sudo dmesg | grep -i oom में मिलता है, जहाँ Out of memory: Killed process 1234 (java) जैसी line होगी। यदि आपका service "randomly" restart हो रहा है, तो पहले वहाँ check करें, और -Xmx को कम करें।

Paper के लिए, project Aikar's flags का सुझाव देता है — यह एक tuned G1GC set है (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 और अन्य flags) जो बड़े heaps पर garbage-collection pauses को कम करता है। Paper documentation से पूरी line generate करें; 2–4 GB heap पर लाभ कम है लेकिन ये flags सुरक्षित हैं।

Step 7: Restart=on-failure के साथ a systemd unit

हाथ से (manually) शुरू किया गया server आपके SSH session के साथ बंद हो जाता है और 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.target
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
systemctl status minecraft
journalctl -u minecraft -f

सही परिणाम: status में active (running) दिखाई देगा, और journal — जिसमें अब server console output शामिल है — फिर से Done line पर समाप्त होगा।

इस unit में दो जानबूझकर किए गए चुनाव हैं। Restart=on-failure crash होने के बाद server को वापस शुरू कर देता है, लेकिन clean stop के बाद नहीं, जिससे maintenance संभव बनी रहती है। और TimeoutStopSec=120 उतना महत्वपूर्ण है जितना दिखता है: systemctl stop SIGTERM भेजता है, Minecraft server इसे catch करता है और exit होने से पहले हर world को save करता है, और बड़े world के लिए उस save में समय लगता है। Systemd का default timeout save के बीच में JVM को SIGKILL कर सकता है, जिससे region files corrupt हो जाती हैं। इसे दो मिनट दें।

यदि service बार-बार start/stop (flaps) होती है और 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 पहले से ही किसी process द्वारा उपयोग किया जा रहा है — लगभग हमेशा यह आपके किसी दूसरे SSH session में चल रहा पिछला foreground run होता है। इसे sudo ss -tlnp | grep 25565 से ढूँढें और उस copy को stop करें; एक ही port पर कभी भी दो servers न चलाएं।

Step 8: दोनों firewalls पर 25565 port open करें

Minecraft Java केवल TCP 25565 का उपयोग करता है (UDP केवल optional query protocol है, जो default रूप से off रहता है)। VPS पर:

sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enable

यह पहला firewall है। अधिकांश VPS providers control panel में एक दूसरा, network-level firewall चलाते हैं, जिसे लोग अक्सर भूल जाते हैं। वहां भी TCP 25565 open करें। यदि केवल एक firewall open है, तो समस्या का लक्षण बहुत अस्पष्ट होता है: client "Connecting to the server..." पर अटक जाता है और Connection timed out: no further information के साथ fail हो जाता है — न कोई refusal, न server error, और journal में भी कुछ नहीं दिखता, क्योंकि packets कभी पहुंचे ही नहीं। VPS के बाहर की किसी machine से nc -vz your.server.ip 25565 के साथ verify करें; succeeded का मतलब है कि दोनों firewalls open हैं, और hang होने का मतलब है कि कम से कम एक open नहीं है।

जब आप ufw का उपयोग कर रहे हों, तो उसी machine पर public IP पर SSH चल रहा होता है, और कुछ ही घंटों में brute-force log noise शुरू हो जाता है — भूलने से पहले Ubuntu 24.04 पर SSH के लिए Fail2ban setup करें

अब connect करें: Multiplayer, Direct Connection, server IP. क्योंकि आपने step 4 में खुद को op'd कर लिया है, in-game commands तुरंत काम करेंगे — प्रत्येक player के लिए /whitelist add FriendName, और यदि आपकी योजना वही है तो /gamemode creative

Step 9: whitelist का उपयोग करें, क्योंकि इंटरनेट port 25565 को खोज लेता है

Minecraft server को internet के लिए खुला छोड़ना कोई काल्पनिक जोखिम नहीं है: mass scanners लगातार पूरे IPv4 space में port 25565 को स्कैन करते रहते हैं — hobbyist griefing projects ने इसी तरह लाखों open servers का पता लगाया है — और बिना whitelist वाला server कुछ ही दिनों या घंटों में अनचाहे visitors का शिकार हो जाता है। Step 5 वाला whitelist ही इसका समाधान है: online-mode=true identity को प्रमाणित करता है, और whitelist केवल उन्हीं identities को प्रवेश देता है जिन्हें आपने चुना है। यह pair ही पूरा security model है, और यह friends server के लिए पर्याप्त है।

Game के बिना console access (जैसे scripted backups या cron job) के लिए, server.properties (enable-rcon=true, एक strong rcon.password, port 25575) में RCON enable करें और VPS पर ही GitHub source से छोटा mcrcon client build करें; यह Ubuntu के repos में उपलब्ध नहीं है। किसी भी firewall में 25575 को do not open करें: RCON password को cleartext में भेजता है, इसलिए इसे केवल loopback-only रखें।

Step 10: backups that do not corrupt the world

एक नियम याद रखें: जब server world directory में write कर रहा हो, तब उसे kabhi copy na karein. Play के दौरान region files लगातार rewrite होती हैं। यदि tar write process के साथ race करता है, तो archive में half-written chunks आ जाएंगे। जब आप इसे restore करेंगे — जो backup का सबसे महत्वपूर्ण समय है — तो log में chunk-loading errors भर जाएंगे और terrain में holes दिखाई देंगे। इससे बचने के दो तरीके हैं।

Stop-copy-start सबसे सरल तरीका है, लेकिन इसमें एक minute का downtime लगेगा:

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 dimensions को world, world_nether, और world_the_end में split करता है; vanilla server सब कुछ world में रखता है, इसलिए अन्य दो को भी वहीं drop करें।)

Save-off live backup लेता है: RCON के माध्यम से, save-off (autosaver रोकें) issue करें, फिर save-all flush (सब कुछ disk पर force करें और wait करें) issue करें, tar file लें, और फिर save-on करें। cron में सुबह 5 a.m. पर इसे चलाने के लिए यही version सही है।

किसी भी स्थिति में, यदि backup उसी VPS पर है जिस पर server चल रहा है, तो वह backup नहीं है — scp या rclone archives को box से बाहर रखें, और हमेशा एक से अधिक backup रखें। चूंकि खराबी आने पर आप console को लगातार नहीं देख रहे होंगे, इसलिए port पर external check लगाएं: Uptime Kuma on another box का उपयोग करके 25565 पर TCP check करें। इससे players के बताने से पहले ही आपको पता चल जाएगा कि server down है।

Plugins aur upgrades

Paper par, plugin install karne ka tarika bahut saral hai: bas ek jar file ko /opt/minecraft/plugins/ mein daalein aur server restart karein. Plugins hamesha unke official project pages (Hangar, Modrinth, SpigotMC) se hi download karein. Iska karan wahi hai jo server jar ke liye hai: har plugin minecraft user ke roop mein arbitrary code chala raha hota hai.

Server upgrade karne ke liye: server ko stop karein, backup lein, server.jar ko naye Minecraft version ke build se replace karein, aur phir start karein. Do baaton ka dhyan rakhein. World upgrades one-way hote hain — agar kisi world ko naye version mein khola gaya hai, to wo purane version mein nahi khulega. Isliye backups ka upyog karein. Saath hi, plugins aksar naye Minecraft release ke kuch din ya hafte baad update hote hain, isliye naye release ke turant baad compatibility zaroor check karein.

Agar aap in sabhi cheezon ko container ke roop mein manage karna chahte hain — jaise version pinning, EULA acceptance, aur memory flags ko environment variables ke roop mein — to itzg/minecraft-server image ka upyog karein. Yeh image aapke VPS par Docker Compose ke saath wahi Paper server chalati hai, aur ismein bhi wahi firewall aur backup discipline istemal hota hai.

FAQ

Minecraft server के लिए कितनी RAM चाहिए?

2 GB में 2–5 players के लिए vanilla चलता है; Paper और कुछ plugins के साथ लगभग दस players वाले friends server के लिए 4 GB पर्याप्त है; modpacks और 20+ players के लिए 8 GB या उससे अधिक चाहिए। VPS का size जो भी हो, -Xmx को कुल RAM में से अधिकतम 1 GB घटाकर सेट करें — JVM heap के बाहर भी memory का उपयोग करता है, और इससे अधिक सेट करने पर Error: Could not reserve enough space for object heap या silent OOM kill हो सकता है।

मेरे friends मेरे Minecraft server से connect क्यों नहीं कर पा रहे हैं?

अगर client Connection timed out: no further information के साथ hang हो जाता है, तो इसका मतलब लगभग हमेशा firewall है। यहाँ दो firewall होते हैं: VPS पर ufw और provider के control panel में network firewall। दोनों में TCP 25565 open होना चाहिए। पहले server पर sudo ss -tlnp | grep 25565 से confirm करें कि server listening mode में है, फिर बाहर से nc -vz your.server.ip 25565 के साथ test करें।

क्या मुझे server.properties में online-mode=false सेट करना चाहिए?

नहीं। online-mode=false के साथ server Mojang authentication को पूरी तरह skip कर देता है, जिससे कोई भी किसी भी username से join कर सकता है — जिसमें op का name भी शामिल है, जिससे उन्हें permissions मिल जाती हैं — और skins और stable UUIDs काम करना बंद कर देते हैं। इसका एकमात्र सही उपयोग Velocity जैसे authenticating proxy के पीछे करना है जो खुद players को verify करता है। एक normal server के लिए इसे true ही रहने दें।

क्या Paper, vanilla Minecraft server से बेहतर है?

लगभग सभी के लिए, हाँ: Paper एक drop-in jar है जो vanilla worlds को load करता है, unmodified clients को स्वीकार करता है, entities को tick करता है और chunks को कहीं अधिक efficiently load करता है, और plugin ecosystem भी जोड़ता है। अपवाद technical-redstone communities हैं जिन्हें bit-exact vanilla behaviour चाहिए, क्योंकि Paper के कुछ optimisations इसे बदल देते हैं। एक छोटे VPS पर, Paper की efficiency प्रभावी रूप से extra RAM की तरह काम करती है।

Minecraft world को बिना corrupt किए backup कैसे लें?

जब server world directory में write कर रहा हो, तब उसे कभी भी archive न करें — region-file write के दौरान copy बनाने से corrupted chunks बन जाते हैं जिन्हें आप restore करते समय ही देख पाते हैं। या तो server को stop करें, world directories को tar करें, और फिर से start करें, या save-off, save-all flush, tar, और RCON के माध्यम से save-on का उपयोग करके इसे live रखें। फिर archive को VPS से बाहर move कर दें।