كيف تختار VPS مناسبًا لخادم الألعاب؟
تعرّف إلى احتياجات خادم الألعاب الفعلية: نواة CPU سريعة وذاكرة RAM كافية، مع شرح اختيار الحجم والمنافذ وإعادة التشغيل والنسخ الاحتياطية وتأثير الموقع على زمن الاستجابة.
ما نوع VPS المخصّص للألعاب الذي تقصده؟
يُعد VPS لخوادم الألعاب خياراً جيداً لمهمة واحدة: تشغيل خادم مخصّص تتصل به أنت وأصدقاؤك من أجهزتكم الخاصة. لكنه خيار سيئ للمقصود الآخر من هذه العبارة، وهو تشغيل اللعبة على VPS نفسه عبر سطح مكتب بعيد. تتطلب المهمتان عتاداً مختلفاً تماماً. يحتاج الخادم المخصّص إلى نواة CPU واحدة سريعة وذاكرة RAM كافية للاحتفاظ بعالم اللعبة. أما تشغيل اللعبة فيحتاج إلى GPU (وحدة معالجة الرسومات)، ولا تتضمن خطة VPS العادية هذه الوحدة.
يتناول كل ما يلي المهمة الأولى. أما المهمة الثانية فتستحق دقيقتين من وقتك، لأن كثيراً من الناس يشترون الخادم غير المناسب لها.
لماذا لا يمكنك تشغيل الألعاب على VPS
يوفّر VPS عادي أنوية CPU افتراضية ولا يوفّر بطاقة رسومات. لا يُمرَّر أي مكوّن من الخادم الفعلي، لذلك لا يتوفر محرّك عتادي لتستخدمه اللعبة. يمكنك معرفة ما حصلت عليه فعلياً:
sudo apt install -y pciutils
lspci | grep -iE "vga|3d"الإجابة هي محوّل عرض افتراضي، مثل جهاز Cirrus Logic أو virtio GPU. يوجد هذا المحوّل لكي تعرض وحدة تحكم الويب لدى مزوّد الخدمة شاشة الخادم، ولا يوفّر أي تسريع ثلاثي الأبعاد. إذا ثبّتَّ بيئة سطح مكتب وخادم VNC فوقه، فسيعرض glxinfo -B محرّكه على أنه llvmpipe، وهو محرّك Mesa البرمجي الذي يعمل على CPU. تعمل لعبة ثلاثية الأبعاد حديثة يرسمها CPU بسرعة بضعة إطارات في الثانية، لذلك لا يمكن تشغيلها قبل أن يغادر أي شيء الخادم. وتواجه مثيلات Windows المشكلة نفسها من جهة أخرى. تتوقف ألعاب كثيرة عند بدء التشغيل وتعرض رسالة تفيد بتعذّر إنشاء جهاز Direct3D، لأنه لا يوجد محوّل عرض يمكن إنشاء الجهاز عليه.
المشكلة الثانية هي الرحلة العكسية إلى جهازك. يعني اللعب على خادم بعيد ترميز كل إطار إلى فيديو، وإرساله عبر الإنترنت، وفك ترميزه على شاشتك. يضيف ذلك زمن الترميز وفك الترميز إلى زمن تأخر الإدخال الخاص باللعبة، كما صُمّم RDP وVNC لبيئات سطح المكتب، لا لعرض حركة بمعدل 60 إطاراً في الثانية. تحل خدمات الألعاب السحابية هذه المشكلة باستخدام عتاد GPU فعلي وبروتوكول بث مخصص لهذا الغرض. أما VPS عادي فلا يوفّر أياً منهما. إذا أردت اللعب، فاستأجر وقتاً على GPU. وإذا أردت الاستضافة، فتابع القراءة.
ما يحتاج إليه خادم الألعاب المخصص فعلياً
خادم الألعاب هو حلقة محاكاة. يحتفظ بالعالم في الذاكرة ويحدّثه عدداً ثابتاً من المرات في الثانية. ثم يرسل إلى كل لاعب متصل الجزء من ذلك العالم الذي يمكنه رؤيته.
تحدد هذه البنية متطلبات العتاد. تعمل الحلقة غالباً في مسار واحد، لذلك تكون سرعة النواة أهم من عدد الأنوية. يوجد العالم في الذاكرة، لذا تكون RAM عادةً أول حد تصل إليه. يكون نشاط القرص منخفضاً أثناء اللعب، ويرتفع عند التحميل والحفظ. يحدد مسار الشبكة لديك زمن الاستجابة، ولا تغيّره أي باقة.
تتفوق سرعة النواة الواحدة على عدد الأنوية
تُشغِّل معظم خوادم الألعاب العالم ضمن خيط رئيسي واحد. تعمل حلقة ticks في Minecraft وإطار الخادم في محرك Source بهذه الطريقة. ولـtick مهلة محددة. يعمل Minecraft Java بمعدل 20 tick في الثانية، ما يمنح كل tick ميزانية قدرها 50 ميلي ثانية. عندما لا يتسع الوقت للعمل، يطبع الخادم الرسالة التالية حرفياً:
[12:04:51] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 2547ms or 50 ticks behindيعني هذا السطر أن خيطاً واحداً نفد وقته. لا تمنح إضافة الأنوية ذلك الخيط وقتاً أطول. ستحافظ خطة تحتوي على 2 vCPU سريعتين على معدل ticks لا تستطيع خطة تحتوي على 8 vCPU بطيئة الحفاظ عليه، لأن نواة واحدة فقط من الأنوية الثماني تنفذ العمل المهم.
قِس سرعة الخيط الواحد قبل الالتزام بأي خطة:
sudo apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 runاقرأ السطر events per second. لا يعني الرقم شيئاً بمفرده، لكنه مهم عند استخدامه للمقارنة، لذلك شغّل الاختبار على خطتين مرشحتين وضع النتيجتين جنباً إلى جنب. يغطي اختبار VPS الكامل القرص والشبكة بالطريقة نفسها.
تظل للأنوية الإضافية فائدة. فهي تشغّل خادم الألعاب الثاني، وقاعدة البيانات، والنسخ الاحتياطي الليلي، وأداة pre-generator للـchunks من دون انتزاع وقت من خيط ticks. كما تعلمت برامج الخوادم توزيع العمل، وينقل Paper، وهو fork شائع لخادم Minecraft، بعض العمل بعيداً عن خيط ticks الرئيسي. لذلك اشترِ عدداً قليلاً من الأنوية السريعة، لا عدداً كبيراً من الأنوية البطيئة.
هناك رقم لا يظهر أبداً في صفحة الخطة، لكنه يحدد ما إذا كانت النواة السريعة التي دفعت ثمنها ملكاً لك فعلاً:
vmstat 1 5يمثل العمود st النسبة المئوية من الوقت الذي كان فيه vCPU الافتراضي جاهزاً للتشغيل، لكن المضيف الفعلي منح النواة لمستخدم آخر. تعني قيمة st ثابتة تتجاوز بضعة بالمئة أن المضيف محمّل بأكثر من سعته. يشعر اللاعبون بذلك على شكل تقطع، بينما يعرض top على خادمك أن المعالج في وضع خمول، لأن وقت الخمول هذا ليس متاحاً لك لاستخدامه.
كم مقدار RAM الذي يحتاجه خادم الألعاب؟
The data behind this chart
[
{
"label": "Minecraft Java, vanilla",
"players": 10,
"ram_gb": 2
},
{
"label": "Minecraft Java, large modpack",
"players": 10,
"ram_gb": 8
},
{
"label": "Valheim",
"players": 10,
"ram_gb": 4
},
{
"label": "Palworld",
"players": 32,
"ram_gb": 16
}
]هذه هي التخصيصات الأولية التي تنشرها وثائق اللعبة وحزمة التعديلات، وذلك اعتباراً من August 2026. وهي إرشادات وليست أرقاماً مقاسة على خادم واحد. يعمل Vanilla Minecraft Java بشكل مريح مع 2 GB من heap لنحو 10 لاعباً. أما العدد نفسه من اللاعبين على حزمة تعديلات كبيرة، فيحتاج إلى 8 GB، لأن التعديلات تضيف كيانات ومنشآت مولّدة تُخزَّن جميعاً في تلك الـheap. الحد الأدنى المدرج لـValheim هو 2 GB، بينما يذكر المشغّلون الذين لديهم عالم صغير أن العملية تستقر عند نحو 3 GB، لذلك يُعد 4 GB نقطة بداية مناسبة. أما Palworld فهي الحالة المختلفة، إذ تحتاج إلى 16 GB للحد الأقصى البالغ 32 لاعباً، وفق توصية Pocketpair.
لا يتناسب استهلاك RAM مع عدد الاتصالات. بل يتناسب مع العالم المحمّل في الذاكرة. يحتفظ كل لاعب بالمنطقة المحيطة به محمّلة، لذلك يستهلك لاعبان يقفان معاً موارد أقل بكثير من لاعبين يستكشفان طرفين متقابلين من الخريطة. لهذا السبب، فإن عبارة «RAM لكل لاعب» ليست سوى إرشاد تقريبي، بينما العامل الفعلي هو «RAM لكل منطقة نشطة». ولهذا أيضاً يمكن لمجموعة صغيرة تحب الاستكشاف أن تتجاوز خطة صُممت لعدد لاعبين يبلغ ضعف عددها.
تحتاج خوادم Java إلى قاعدتين إضافيتين. اضبط الحد الأدنى والحد الأقصى للـheap على القيمة نفسها حتى لا تتوقف JVM مؤقتاً لإعادة تغيير حجمها:
java -Xms4G -Xmx4G -jar server.jar noguiثم اترك هامشاً من الذاكرة. تستخدم JVM ذاكرة خارج الـheap التي منحتها لها، وذلك لمكدسات الخيوط والمخازن المؤقتة الأصلية. ويحتاج kernel إلى page cache لقراءة ملفات العالم بسرعة. على خادم بسعة 6 GB، يكون تخصيص heap بسعة 4 GB مناسباً، أما تخصيص 6 GB للـheap فليس مناسباً.
يبدو فشلا الذاكرة مختلفين تماماً، لذلك تعرّف على العبارتين. عندما تكون الـheap صغيرة جداً، يحدث الخطأ داخل Java، ويستمر الخادم عادةً في العمل بصعوبة:
java.lang.OutOfMemoryError: Java heap spaceأما عندما تكون الـheap أكبر من ذاكرة الخادم، فتُنهى العملية بالكامل من خارجها. لا تعرض وحدة التحكم سوى Killed، وتظهر الأدلة في سجل kernel:
sudo dmesg -T | grep -i "out of memory"إضافة swap تمنع الإنهاء، لكنها لا تصلح المشكلة. عندما تضطر حلقة التحديث إلى قراءة العالم مجدداً من swap، تفوّت كل مواعيدها، فيحصل اللاعبون على خادم متجمّد بدلاً من خادم متوقف.
ملاحظة تتعلق بالإصدار، وهي سارية اعتباراً من August 2026: تتطلب Minecraft Java 1.20.5 والإصدارات الأحدث Java 21. يبدأ runtime أقدم ثم يفشل بخطأ unsupported class file version، وتبدو الرسالة كأنها صادرة عن compiler، لذلك تربك الجميع عند مواجهتها للمرة الأولى.
sudo apt install -y openjdk-21-jre-headless
java -versionهل تؤثر سرعة القرص في خادم الألعاب؟
تؤثر أقل مما يتوقع معظم الناس أثناء اللعب، لكنها تؤثر كثيراً في لحظتين محددتين. تُحمَّل بيانات العالم إلى الذاكرة عند بدء التشغيل، وتُكتب مجدداً عند الحفظ التلقائي. لذلك تظهر سرعة القرص في بطء الإقلاع وفي التوقف المؤقت أثناء تنفيذ الحفظ. وبين هاتين اللحظتين، تُخدَم معظم عمليات القراءة من ذاكرة RAM.
هناك عاملان يجعلان القرص أكثر أهمية مما يوحي به هذا الملخص. يحمّل الاستكشاف مناطق أو chunks جديدة من القرص أثناء تحرك اللاعبين، وتحدث عملية القراءة هذه ضمن المهلة الزمنية لكل tick. ويكتب الحفظ التلقائي لعالم كبير كمية كبيرة من البيانات دفعة واحدة. وعلى وحدة تخزين بطيئة، تحجب عملية الكتابة الحلقة مدة كافية لعرض التحذير "Can't keep up" المذكور أعلاه. كلتا الحالتين مشكلة زمن استجابة وليستا مشكلة معدل نقل. لذلك فإن الفرق بين NVMe وSATA SSD على VPS مهم هنا أكثر مما يوحي به عدد الميغابايتات في الثانية. ما يهمك هو المدة التي تستغرقها عملية صغيرة واحدة.
حدّد حجم وحدة التخزين مع مراعاة النمو. ينمو العالم كلما انتقل شخص إلى مكان جديد، وتضاعف النسخ الاحتياطية الحجم الذي يشغله. شغّل du -sh world مرة واحدة أسبوعياً لمدة شهر، وستعرف معدل نموك الفعلي.
معدل التحديث وPing والفرق بينهما
معدل التحديث هو عدد المرات التي يعيد فيها الخادم حساب حالة العالم في كل ثانية. تعمل Minecraft Java بمعدل 20. تعمل خوادم Source engine عادةً بمعدل 64. لا يمكنك شراء معدل أعلى في Minecraft، لأن المعدل جزء من تصميم اللعبة. لذلك، الهدف هو الحفاظ على معدل 20 بدلاً من تجاوزه.
Ping هو زمن الرحلة ذهاباً وإياباً بين لاعب واحد والخادم. ينتج هذان العاملان شكاوى مختلفة، لذلك ميّز بينهما قبل إنفاق المال. عندما يفوّت الخادم بعض دورات التحديث، يتعرض جميع اللاعبين للارتداد إلى مواقع سابقة في اللحظة نفسها، ويذكر سجل الخادم ذلك بوضوح. عندما يمر اتصال أحد اللاعبين بمسار شبكي طويل، يتأخر ذلك اللاعب وحده، بينما تبقى تجربة بقية المجموعة طبيعية. لن يحل معالج أقوى الحالة الثانية أبداً.
زمن الاستجابة يعتمد على الموقع، لا على فئة الخطة
تنتقل الإشارة الضوئية في الألياف الضوئية بسرعة تبلغ نحو 200 كيلومتر لكل ميلي ثانية. تقطع الرحلة ذهاباً وإياباً المسافة مرتين، لذلك يبلغ الحد الأدنى نحو 1 ms لكل 100 km بين اللاعب والخادم. لا يستطيع أي مزود تجاوز هذا الحد، ولا يغيّره ترقية الخطة.
The data behind this chart
[
{
"label": "Toronto to New York",
"distance_km": 550,
"rtt_floor_ms": 5.5
},
{
"label": "Dallas to Chicago",
"distance_km": 1290,
"rtt_floor_ms": 12.9
},
{
"label": "Dallas to Los Angeles",
"distance_km": 1990,
"rtt_floor_ms": 19.9
},
{
"label": "New York to London",
"distance_km": 5570,
"rtt_floor_ms": 55.7
},
{
"label": "Los Angeles to Sydney",
"distance_km": 12070,
"rtt_floor_ms": 120.7
}
]هذه حدود دنيا محسوبة من المسافة على سطح الكرة الأرضية. لا تمتد الألياف الضوئية الفعلية في خط مستقيم، ويضيف كل موجّه على المسار زمناً قليلاً، لذلك تكون النتيجة الواقعية الجيدة قريبة من ضعف الحد الأدنى. إذا اتصل لاعب في Toronto بخادم في New York يبعد 550 km، فسيبلغ الحد الأدنى 5.5 ms، وسيشاهد عادةً زمناً في نطاق العشرات. أما المسار بين Los Angeles وSydney فله حد أدنى قدره 120.7 ms، ولا يستطيع أي مبلغ من المال تغييره.
لذلك ضع الخادم بالقرب من اللاعبين الذين يستخدمونه. إذا كانت مجموعتك موزعة على جانبي محيط، فسيسلك بعض اللاعبين مساراً طويلاً، ويكون الخيار العادل عادةً هو المنطقة التي تضم معظم اللاعبين.
قِس المسار بدلاً من التخمين:
sudo apt install -y mtr-tiny
mtr -rwzc 100 203.0.113.10اقرأ السطر الأخير أولاً. فهذا السطر يمثل الخادم، وفقدان الحزم وزمن الاستجابة الظاهرين فيه هما العاملان الوحيدان اللذان يحددان إحساس اللعبة. ظهور فقدان للحزم في قفزة وسطية مع سلامة القفزة النهائية يعني غالباً أن ذلك الموجّه يفرض حدوداً على معدل ICMP، لأن الموجّهات تخفّض أولوية الردود على حزم الاختبار مع مواصلة توجيه حركة الشبكة الفعلية بصورة طبيعية. شغّل الاختبار من جانب كل لاعب باتجاه الخادم، لأن كل لاعب سيسلك مساراً مختلفاً.
كيفية حساب الحد الأدنى لزمن الرحلة ذهاباً وإياباً
تتحرك الإشارة الضوئية في الزجاج بسرعة تقارب ثلثي سرعتها في الفراغ، أي ما يقارب 200 km لكل ميلي ثانية. تقطع الرحلة ذهاباً وإياباً المسافة مرتين، لذلك يساوي الحد الأدنى بالميلي ثانية مسافة الاتجاه الواحد بالكيلومترات مقسومة على 100. تبلغ المسافة بين New York وLondon مقدار 5,570 km، وبقسمة 5570 على 100 نحصل على 55.7 ms. تكون كل قيمة مقاسة أعلى من ذلك، لأن الكابلات تتبع السواحل ولأن الموجّهات تحتاج إلى وقت لمعالجة الحزم.
افتح المنافذ التي تحتاج إليها اللعبة فقط
يحتاج خادم اللعبة إلى منفذ واحد أو منفذين مفتوحين، ولا يحتاج إلى أي منافذ أخرى. الإعدادات الافتراضية الشائعة:
- Minecraft Java Edition: TCP 25565
- Minecraft Bedrock Edition: UDP 19132
- Valheim: UDP 2456 وUDP 2457
- Palworld: UDP 8211
- ألعاب Source engine مثل Counter-Strike 2: UDP 27015
راجع وثائق اللعبة نفسها، لأن بعض الألعاب تستخدم منفذ استعلام إضافياً. تُعد Valheim أوضح مثال على ذلك: ينقل المنفذ 2456 حركة اللعبة، بينما يجيب المنفذ 2457 عن استعلام خادم Steam الذي يجعل خادمك يظهر في قائمة التصفح. لا يحقق فتح هذه الأرقام عبر TCP أي نتيجة، لأن Valheim تستخدم UDP فقط.
اسمح باتصالات SSH قبل تفعيل جدار الحماية، وإلا ستفقد الوصول إلى خادمك:
sudo ufw allow 22/tcp
sudo ufw allow 25565/tcp
sudo ufw enable
sudo ufw status verboseيشغّل العديد من مزوّدي الخدمة أيضاً جدار حماية للشبكة في لوحة التحكم، ويكون منفصلاً عن جدار الحماية على الخادم. إذا كان المنفذ مفتوحاً في ufw ومغلقاً في جدار الحماية الخارجي، فستظل الاتصالات مرفوضة. وتكون الأعراض من الخارج متطابقة، لذلك تحقّق من المكانين قبل البدء في تعديل ملفات الإعداد.
من السهل التحقق من منفذ TCP من جهاز آخر:
sudo apt install -y netcat-openbsd
nc -vz 203.0.113.10 25565لا يمكن اختبار UDP بهذه الطريقة. يكون منفذ UDP المغلق صامتاً عادةً، لذلك لا يخبرك المسبار الذي لا يتلقى أي رد بأي شيء. تحقّق من جهة الخادم بدلاً من ذلك، وابحث عن عملية اللعبة المرتبطة بالمنفذ المتوقع:
sudo ss -lunp | grep 2456لا تعرّض RCON، وهو بروتوكول وحدة التحكم عن بُعد، للإنترنت مطلقاً. فهو يرسل كلمة مرور واحدة عبر اتصال غير مشفّر، ويستخدم المنفذ 25575 افتراضياً. اربطه بـ 127.0.0.1 واستخدمه عبر نفق SSH. شغّل خادم اللعبة أيضاً باستخدام مستخدم خاص غير مميّز، حتى لا يتمكن خلل في إحدى الإضافات من الوصول إلى بقية الجهاز. يشرح الدقائق العشر الأولى على VPS جديد إعداد حساب المستخدم وتقوية SSH اللذين يفترض هذا القسم أنك أنجزتهما مسبقاً.
شغّل الخادم عبر systemd ليُعاد تشغيله
يموت الخادم الذي تبدأه يدوياً في جلسة SSH عند إغلاق الجلسة، ويبقى متوقفاً بعد إعادة التشغيل. يعالج systemd المشكلتين. اكتب /etc/systemd/system/minecraft.service:
[Unit]
Description=Minecraft Java server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/java -Xms4G -Xmx4G -jar server.jar nogui
Restart=on-failure
RestartSec=15
TimeoutStopSec=180
[Install]
WantedBy=multi-user.targetيعيد Restart=on-failure تشغيل الخادم بعد تعطله، ويتركه متوقفاً بعد إيقاف تشغيل سليم، وهذا هو المطلوب. أما Restart=always فيتدخل في كل مرة توقف فيها الخادم عمداً. وتكمن أهمية TimeoutStopSec=180 فيما هو أبعد مما يبدو. يرسل systemctl stop الإشارة SIGTERM؛ ويلتقط خادم Minecraft العادي هذه الإشارة ويحفظ العالم قبل الخروج، وعند انتهاء المهلة يرسل systemd الإشارة SIGKILL بدلاً منها. قد يستغرق حفظ عالم كبير أكثر من المهلة الافتراضية البالغة 90 ثانية، وكل ما لم يُكتب على القرص عند وصول SIGKILL سيضيع.
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
sudo journalctl -u minecraft -fينتهي التشغيل السليم بسطر مثل Done (12.345s)! For help, type "help". إذا انتقلت الوحدة باستمرار بين حالتي التفعيل والفشل، يعرض journalctl -u minecraft -n 50 السبب، ويكون السبب عادةً مساراً خاطئاً في WorkingDirectory أو حداً أقصى للذاكرة أكبر من سعة الجهاز.
لا يوفّر systemd وحدة تحكم تفاعلية، لذلك خطط لذلك مسبقاً. استخدم RCON على localhost لتنفيذ الأوامر، أو شغّل الخادم داخل جلسة tmux، وهي العادة نفسها التي تُبقي جلسة Claude Code طويلة التشغيل على VPS مستمرة بين عمليات تسجيل الدخول.
تحتاج خوادم الألعاب الموزعة عبر Steam إلى SteamCMD قبل تنفيذ أي من ذلك. حزمة Ubuntu عبارة عن ملف ثنائي 32 bit، ولهذا يوجد سطر البنية. إذا تخطيت ذلك السطر، فسيبلغ apt بعدم وجود مرشح تثبيت:
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y steamcmdتزداد حاجة بعض خوادم الألعاب إلى الذاكرة كلما طال تشغيلها، وتُعد إعادة التشغيل المجدولة في ساعة هادئة حلاً مؤقتاً معتمداً بدلاً من إصلاح المشكلة. ويكون مؤقت systemd الذي يستدعي systemctl restart أسهل في الفهم من إدخال cron، لأن systemctl list-timers يوضح لك بالضبط موعد تشغيله التالي.
أنشئ نسخاً احتياطية للعالم وفق جدول زمني
كل ما يوجد على خادم الألعاب قابل للاستبدال، باستثناء مجلد العالم وبيانات اللاعبين. تستغرق إعادة تثبيت اللعبة دقائق. أما إعادة بناء ما أنشأته مجموعتك فتستغرق أشهراً.
النسخة الاحتياطية الآمنة هي التي تُنشأ عندما لا يكتب أي شيء في الملفات. إيقاف الخادم لمدة دقيقة هو أبسط طريقة لضمان ما يلي:
sudo systemctl stop minecraft
sudo tar czf /var/backups/mc-$(date +%F).tgz -C /opt/minecraft world world_nether world_the_end
sudo systemctl start minecraftإذا كان الإيقاف الليلي غير مقبول، فافرغ البيانات المعلّقة من العالم أولاً. في وحدة تحكم Minecraft، يوقف save-off الحفظ التلقائي، ويكتب save-all flush كل ما لا يزال معلّقاً، ثم يعيد save-on تشغيل الحفظ التلقائي بعد اكتمال النسخ. قد يؤدي نسخ العالم أثناء كتابة الخادم إلى التقاط ملف منطقة لم تكتمل كتابته، ولن تكتشف ذلك إلا عندما تحتاج إلى الاستعادة.
احتفظ بنسخة واحدة على الأقل خارج الجهاز. لا تصمد النسخة الموجودة على القرص نفسه أمام تعطل القرص، كما أن لقطة مزود الخدمة وسيلة مريحة وليست نسخة احتياطية، لأنها تبقى في الحساب نفسه الذي قد تفقده. تتولى نسخ restic الاحتياطية المجدولة إلى تخزين خارج الموقع إدارة الاحتفاظ وإزالة التكرار، لذلك لا تملأ نسخ العالم الليلية لمدة شهر وحدة التخزين لديك.
ثم استعد نسخة واحدة. النسخة الاحتياطية التي لم تستعدها من قبل ليست سوى تخمين. استخرج أرشيف الليلة الماضية إلى مجلد مخصص، ووجّه خادماً تجريبياً إليه، وتأكد من تحميل العالم ووجود المباني في أماكنها السابقة.
تحقّق قبل الالتزام
اشترِ شهراً واحداً بدلاً من سنة، واختبر الخادم مع لاعبين حقيقيين خلال أمسية واحدة. شغّل اختبار الخيط الواحد sysbench، ثم اطلب من كل لاعب تشغيل mtr باتجاه الخادم. يشرح الإجراء الكامل لاختبار VPS هذه الأدوات خطوة بخطوة، ويوضح شكل النتيجة السيئة. كما يساعدك ما التكلفة الفعلية لـVPS شهرياً على التحقق من أنك تدفع مقابل المورد الذي يحد أداء خادمك، لا المورد الذي يظهر بأكبر قيمة في صفحة الخطة.
يتابع منشوران من النقطة التي يتوقف عندها هذا المنشور. يشرح إنشاء خادم Minecraft على VPS كل ما سبق خطوة بخطوة، باستخدام اللعبة التي يبدأ بها معظم الناس. وتستحق القائمة الأوسع لما يمكن لـVPS تشغيله القراءة إذا كنت تفضّل أن يؤدي الخادم مهمة مفيدة بين أمسيات اللعب.
FAQ
هل يمكنني تشغيل الألعاب على VPS بدلاً من شراء حاسوب مخصص للألعاب؟
لا. لا يحتوي VPS القياسي على GPU، بل على محول عرض افتراضي لوحدة تحكم المزوّد فقط. لذلك، بعد تثبيت سطح مكتب، يعرض glxinfo -B برنامج التصيير البرمجي llvmpipe، وتعمل لعبة ثلاثية الأبعاد بسرعة بضعة إطارات في الثانية. حتى عند إرفاق GPU، يضيف التشغيل عن بُعد ترميز الفيديو وفك ترميزه إلى رحلة كل إطار ذهاباً وإياباً، ولم يُصمَّم RDP وVNC لهذا الغرض. استخدم VPS لاستضافة الخادم المخصص الذي تتصل به مجموعتك. استأجر وقتاً على GPU أو استخدم خدمة ألعاب سحابية إذا كان هدفك هو اللعب.
كم عدد أنوية CPU التي يحتاج إليها خادم ألعاب؟
تتفوق نواتان سريعتان على 8 أنوية بطيئة في معظم الألعاب، لأن محاكاة العالم تعمل في خيط رئيسي واحد، ولا تستطيع الأنوية الإضافية مساعدة ذلك الخيط على الالتزام بالمهلة البالغة 50 ms. قارن الخطط المرشحة باستخدام sysbench cpu --cpu-max-prime=20000 --threads=1 run واقرأ قيمة الأحداث في الثانية. تستحق الأنوية الإضافية الدفع مقابلها عندما تشغّل أيضاً خادماً ثانياً أو قاعدة بيانات على الجهاز نفسه، لأن أحمال العمل هذه تستطيع عندئذ العمل من دون انتزاع وقت من خيط التحديث.
ما مقدار RAM الذي يحتاج إليه خادم Minecraft؟
تحتاج إلى نحو 2 GB من heap لعالم vanilla يضم تقريباً 10 لاعباً، وإلى 8 GB لحزمة تعديلات كبيرة مع العدد نفسه من اللاعبين. اضبط -Xms و-Xmx على القيمة نفسها، واترك من 1 GB إلى 2 GB من ذاكرة الجهاز خالية لنظام التشغيل، لأن JVM تستخدم ذاكرة خارج heap، كما تحتاج النواة إلى page cache. إذا كان heap أكبر من سعة الجهاز، تقتل النواة العملية. ويظهر ذلك في dmesg كسطر نفاد ذاكرة، وليس كخطأ Java.
لماذا يتأخر اللاعبون لديّ رغم وجود CPU وRAM متاحين في الخادم؟
يناسب هذا الوصف سببان. افحص سجل الخادم بحثاً عن Can't keep up! Is the server overloaded?، فهذا يعني أن الخيط الرئيسي المنفرد تجاوز ميزانية التحديث البالغة 50 ms بينما بقيت الأنوية الأخرى خاملة. إذا لم يظهر ذلك السطر، فالمشكلة في مسار الشبكة. اطلب من كل لاعب تشغيل mtr -rwzc 100 203.0.113.10 باتجاه عنوان خادمك وقراءة السطر الأخير. افحص أيضاً العمود st في vmstat 1: تعني نسبة steal time التي تتجاوز بضعة بالمئة أن المضيف محمّل بأكثر من سعته، ولذلك فإن CPU الخامل الذي تراه ليس متاحاً لك فعلياً.
ما المنافذ التي أحتاج إلى فتحها لخادم ألعاب؟
افتح منفذ اللعبة نفسه فقط، إضافة إلى SSH. تستخدم Minecraft Java المنفذ TCP 25565، وتستخدم Minecraft Bedrock المنفذ UDP 19132، وتستخدم Valheim المنفذين UDP 2456 و2457، وتستخدم Palworld المنفذ UDP 8211. أضف قاعدة SSH قبل تشغيل ufw enable، وإلا فقد تفقد الوصول إلى الجهاز. تذكّر أن كثيراً من المزوّدين يشغّلون جداراً نارياً ثانياً في لوحة التحكم لديهم، ولذلك يجب فتح المنفذ في الجدارين معاً. لا تفتح RCON على المنفذ 25575 أمام الإنترنت مطلقاً، لأن كلمة المرور تُرسل فيه كنص واضح.