مقارنة برامج المنتديات المستضافة ذاتيًا على VPS
قارن Discourse وFlarum وNodeBB وphpBB على VPS: كم تحتاج فعليًا من RAM، وقاعدة البيانات التي تفرضها، ومشكلة الرسائل المزعجة ومسار الترحيل.
ما برنامج المنتدى المستضاف ذاتياً الذي ينبغي لك تشغيله؟
ينحصر اختيار برنامج المنتدى المستضاف ذاتياً الذي يمكنك تشغيله اليوم على VPS (خادم خاص افتراضي) في أربعة خيارات فعلية: Discourse وFlarum وNodeBB وphpBB. يُعد Discourse الخيار الافتراضي المناسب إذا كان بإمكانك تخصيص 4 GB من RAM، وكان لديك شخصان على الأقل مستعدان للإشراف. إذا كان لديك 1 GB ومشرف واحد، فشغّل Flarum أو phpBB بدلاً منه. المنتدى الهادئ الذي يمكنك إبقاءه منظماً أفضل من منتدى أقوى لا تستطيع إدارته.
التثبيت هو الجزء السهل. يمكن تشغيل أي من هذه البرامج خلال فترة بعد الظهر. ما يحدد بقاء المنتدى بعد عام هو قائمة البلاغات ومسار البريد الإلكتروني، لذا اقرأ قسمي الإشراف والبريد الإلكتروني قبل قراءة قوائم الميزات.
ما الذي يحتاج إليه المنتدى فعلياً ليعمل؟
يتكوّن المنتدى من أربعة مكوّنات مترابطة، وليس من مكوّن واحد: عملية التطبيق، وقاعدة بيانات يجب أن تبقى مستقلة عن عمر العملية، ودليل للصور الرمزية والمرفقات التي يرفعها المستخدمون، ومسار يعمل لإرسال البريد. يمكن استبدال التطبيق. أما قاعدة البيانات فلا يمكن استبدالها بسهولة، لأن كل مشاركة وكل حساب وكل رسالة خاصة مخزّنة فيها. لذلك يُعدّ نوع قاعدة البيانات الذي اختاره كل مشروع أهم معلومة في الأقسام التالية. فهو يحدد شكل عملية التصدير عندما تريد مغادرة المنصة.
أما التكلفة الثانية فهي بشرية. يؤدي التسجيل العام مع السماح بالنشر العام إلى إنشاء حسابات آلية، ويحدث ذلك عادةً خلال الأسبوع الأول من ظهور النطاق في نتائج الزحف. يمكن تقييد المكوّنات الأربعة كلها. لكن مكوّناً واحداً فقط يوفّر سير العمل هذا ضمن المكوّن الأساسي.
Discourse: الخيار الافتراضي، والتكلفة الفعلية
Discourse مبني على Ruby on Rails، ويستخدم PostgreSQL للبيانات، وRedis للتخزين المؤقت وقوائم مهام العمل، وSidekiq لتشغيل المهام في الخلفية. يضع التثبيت المدعوم كل ذلك داخل حاوية Docker واحدة، تُبنى من ملف إعدادات في /var/discourse/containers/app.yml. لا تثبّت هذه المكونات بنفسك.
wget -qO- https://raw.githubusercontent.com/discourse/discourse_docker/main/install-discourse | sudo bashيثبّت ذلك البرنامج النصي git وDocker إذا لم يكونا موجودين، ثم يستنسخ discourse_docker إلى /var/discourse، وبعد ذلك يشغّل المعالج التفاعلي discourse-setup. يطلب المعالج اسم المضيف، وعنوان بريد إلكتروني للمسؤول، وتفاصيل SMTP (بروتوكول نقل البريد البسيط)، ثم يكتب app.yml ويبني الحاوية. يجب أن يكون المنفذان 80 و443 متاحين، لأن الحاوية تشغّل nginx خاصاً بها وتطلب شهادة Let's Encrypt نيابةً عنك.
الحد الأدنى المنشور هو 1 GB من الذاكرة مع swap، إضافةً إلى 10 GB من مساحة القرص. خذ شرط swap حرفياً. ينشئ برنامج الإعداد ملف swap بحجم 2 GB باستخدام fallocate -l 2G /swapfile عندما يقرر المعالج أن الخادم يحتاج إليه، وهذا الـswap ليس أمراً ثانوياً. ذروة استهلاك الذاكرة لا تحدث أثناء تشغيل الموقع. بل تحدث في ./launcher rebuild app، الذي يعيد تجميع أصول JavaScript وCSS داخل الحاوية عند كل ترقية. على خادم بسعة 1 GB ومن دون swap، تُقتل هذه الخطوة في منتصف التنفيذ، وتنتهي عملية إعادة البناء من دون عرض خطأ مفيد على الشاشة، ويعرض dmesg | tail سطراً يحتوي على Out of memory: Killed process. خصص 2 GB لتشغيله بصورة سليمة، و4 GB عندما يصبح المنتدى نشطاً.
تُجرى الترقيات من /admin/upgrade في المتصفح، أو من shell:
cd /var/discourse
./launcher rebuild appيدمر rebuild الحاوية قيد التشغيل، وينشئ حاوية جديدة من app.yml، ثم يشغّلها. لذلك يتوقف الموقع طوال الدقائق العديدة التي تستغرقها العملية. لا توجد طريقة لتجنب ذلك عند استخدام حاوية واحدة. يؤدي تقسيم النظام إلى حاويتين باستخدام نموذجي data.yml وweb_only.yml إلى إبقاء PostgreSQL قيد التشغيل أثناء إعادة بناء حاوية الويب. ويصبح هذا الخيار مستحقاً عندما يكون لديك مستخدمون يلاحظون التوقف.
الإشراف هو المجال الذي يبرر فيه Discourse استهلاكه للذاكرة. تبدأ الحسابات الجديدة عند مستوى ثقة 0، مع حدود صارمة لعدد الروابط التي يمكنها نشرها ولسرعة النشر، ثم ترتفع مع القراءة والمشاركة. تصل البلاغات إلى قائمة مراجعة تسجل من عالج كل بلاغ. تكاملا Akismet وStopForumSpam إضافات رسمية. أما في الأنظمة الثلاثة الأخرى، فعليك تركيب ذلك من خلال إضافات.
الترحيل إلى Discourse هو أقوى ميزاته. يحتوي الدليل script/import_scripts/ في شجرة المصدر على أكثر من ستين أداة استيراد، منها phpbb3.rb وvbulletin.rb وxenforo.rb وvanilla.rb وmybb.rb وflarum_import.rb، ودليل nodebb، وأداة استيراد mbox لأرشيفات القوائم البريدية. هذه برامج Ruby النصية تشغّلها داخل الحاوية على نسخة من قاعدة البيانات القديمة. وهي بطيئة، لكنها تخضع للصيانة.
أما الترحيل من Discourse فهو الجانب الأضعف. يكتب ./launcher enter app متبوعاً بـdiscourse backup ملف .tar.gz يحتوي على تفريغ PostgreSQL ودليل uploads. ويمكن لنسخة أخرى من Discourse استعادته. لا يستطيع أي برنامج آخر قراءة هذا الملف، لذلك يتطلب مغادرة Discourse كتابة SQL بنفسك على ذلك التفريغ. قرر أنك تستطيع التعايش مع ذلك قبل استيراد 50,000 منشور.
Flarum: منتدى PHP خفيف
Flarum هو تطبيق PHP عادي: php-fpm خلف nginx أو Apache، وقاعدة بيانات MySQL أو MariaDB، وملفات على القرص. المتطلبات الموثقة هي PHP 7.3 أو أحدث مع الامتدادات curl وdom وfileinfo وgd وjson وmbstring وopenssl وpdo_mysql وtokenizer وzip، إضافة إلى MySQL 5.6+ (أو 8.0.23+) أو MariaDB 10.0.5+. يأتي Ubuntu 24.04 مع PHP 8.3، وهو أعلى من الحد الأدنى المطلوب.
انتبه إلى pdo_mysql في تلك القائمة. لا يدعم Flarum PostgreSQL ولا SQLite. إذا كنت تريد قاعدة بيانات في ملف واحد، فاستخدم phpBB المذكور أدناه.
sudo apt update
sudo apt install -y nginx mariadb-server composer php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
sudo install -d -m 755 /srv/flarum
cd /srv/flarum
sudo COMPOSER_ALLOW_SUPERUSER=1 composer create-project flarum/flarum:^1.8.0 .
sudo chown -R www-data:www-data /srv/flarumوجّه خادم الويب إلى /srv/flarum/public، وليس إلى /srv/flarum. يوجد رمز التطبيق وملف الإعداد وكلمة مرور قاعدة البيانات في مجلد واحد أعلى من public، لذلك فإن جعل جذر المستند أعلى بمستوى واحد يعرّض بيانات الاعتماد للعرض لأي شخص يطلبها. في Apache تحتاج أيضاً إلى mod_rewrite وAllowOverride All حتى يصبح .htaccess المرفق فعالاً. في nginx، أدرج .nginx.conf المرفق داخل كتلة server. بعد ذلك افتح النطاق في المتصفح، وسيطلب مُثبّت Flarum نفسه بيانات قاعدة البيانات وحساب المسؤول.
الإصدارات حتى أغسطس 2026: الإصدار المستقر الحالي هو 1.8.17، وقد نُشر في يونيو 2026، بينما وصل الإصدار 2.0 إلى الإصدار المرشح 5. لا تبدأ مجتمعاً جديداً على الإصدار المرشح. عند صدور 2.0، ستحتاج الامتدادات إلى التحديث قبل أن تعمل، وهذه هي الترقية التي قد تكلّفك عطلة نهاية أسبوع.
حجم الموارد صغير. يكفي عدد قليل من عمليات php-fpm، وتحتاج MariaDB إلى بضع مئات من MB، مع الملفات الثابتة. يمكن لمجتمع ناشئ العمل على 1 GB.
الإشراف هو نقطة الضعف الواضحة. يوفّر النظام الأساسي البلاغات والصلاحيات لكل مجموعة. تأتي قوائم انتظار الموافقة وحظر الرسائل المزعجة من الامتدادات، ومعظمها من مجموعة FriendsOfFlarum، وتُثبّت باستخدام composer require ثم تُفعّل من لوحة الإدارة. هذا الحل يعمل حالياً. لكنك تعتمد على منظومة متطوعين أصغر مما لدى phpBB أو Discourse، وقد تمنعك إضافة غير مُصانة من تنفيذ ترقية النظام الأساسي التالية، لأن composer يرفض حل تبعياتها مع الإصدار الجديد.
إخراج البيانات سهل: mysqldump قاعدة البيانات وانسخ مجلد assets. أما إدخال البيانات فأصعب. يوفّر Discourse flarum_import.rb لاتجاه النقل من Flarum إلى Discourse، وهذا يوضح اتجاه انتقال البيانات المعتاد. يتم استيراد phpBB إلى Flarum عبر امتدادات مجتمعية، لا عبر أداة رسمية، لذلك اختبر أحدها على نسخة قبل أن تثق به مع النسخة الوحيدة.
NodeBB: النشر الفوري، والتكلفة المصاحبة له
NodeBB مبني على Node.js. ويدفع المنشورات الجديدة إلى المتصفحات المفتوحة عبر WebSockets، لذلك يتحدّث النقاش النشط من دون إعادة تحميل الصفحة. هذا هو سبب اختياره. يطلب ملف README إصدار Node.js 22 أو أحدث، وأحد الخيارين MongoDB 5+ أو Redis 7.2+، كما يتضمن شجرة المصدر برنامج تشغيل PostgreSQL كخيار ثالث.
استخدام Redis كقاعدة البيانات الأساسية هو المشكلة في هذه الجملة. يحتفظ Redis بمجموعة البيانات في الذاكرة، لذلك تزداد حاجتك إلى RAM مع نمو المنتدى بدلاً من بقائها ثابتة. أما MongoDB أو PostgreSQL فيحتفظان بالبيانات على القرص ويخزّنان البيانات كثيرة الاستخدام مؤقتاً. اختر Redis فقط إذا كنت تستطيع توضيح السبب.
توفّر حزم Ubuntu 24.04 الإصدار Node.js 18، وهو أقل من الحد الأدنى المطلوب، لذلك ثبّت بيئة تشغيل حديثة أولاً.
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs git build-essential
sudo adduser --system --group --home /srv/nodebb nodebb
sudo -u nodebb git clone -b v4.x https://github.com/NodeBB/NodeBB.git /srv/nodebb
cd /srv/nodebb
sudo -u nodebb ./nodebb setup./nodebb setup تفاعلي. يسألك عن قاعدة البيانات التي تريد استخدامها وكيفية الوصول إليها، ثم ينشئ حساب المسؤول ويختار منفذاً، وتكون القيمة الافتراضية 4567. لا يبدأ NodeBB باستخدام npm start. يمثّل البرنامج النصي ./nodebb الواجهة، بينما يذهب الإخراج إلى ./nodebb log.
يحوّل ./nodebb start العملية إلى daemon، وهذا غير مناسب لجهاز يُعاد تشغيله. شغّل loader ضمن systemd في الواجهة الأمامية بدلاً من ذلك.
[Unit]
Description=NodeBB
After=network.target
[Service]
Type=simple
User=nodebb
WorkingDirectory=/srv/nodebb
ExecStart=/usr/bin/env node loader.js --no-daemon
Restart=on-failure
[Install]
WantedBy=multi-user.targetيمثّل --no-daemon الجزء الذي يغفل عنه كثيرون. من دونه ينشئ loader عملية فرعية ثم تنتهي العملية الأصلية، لذلك يبلّغ systemctl status nodebb عن الوحدة باعتبارها متوقفة، بينما يظل curl localhost:4567 يستجيب، ثم لا يوقف systemctl stop nodebb شيئاً. خلف Reverse Proxy، يجب تمرير رؤوس ترقية WebSocket. إذا كان proxy_set_header Upgrade $http_upgrade; وproxy_set_header Connection "upgrade"; مفقودين من كتلة nginx، فسيُحمّل المنتدى، وتمتلئ وحدة تحكم المتصفح بطلبات socket.io الفاشلة، وتتوقف المنشورات الجديدة عن الظهور إلى أن يعيد القارئ تحميل الصفحة.
تقع إمكانات الإشراف بين Flarum وDiscourse. توجد قائمة انتظار للبلاغات في لوحة الإدارة، وصلاحيات لكل فئة، ونظام للسمعة. وتأتي مكافحة الرسائل المزعجة من إضافات مجتمعية مثل nodebb-plugin-spam-be-gone، التي تدمج Akismet وStopForumSpam.
النسخ الاحتياطية يدوية، ولا يذكرها أحد حتى يأتي اليوم الذي تحتاج فيه إلى نسخة. لا تتضمن واجهة CLI الخاصة بـ./nodebb أمراً للنسخ الاحتياطي. عليك تفريغ قاعدة البيانات بنفسك باستخدام mongodump أو pg_dump، ونسخ الدليل public/uploads والملف config.json إلى جانبهما. يحتوي config.json على بيانات اعتماد قاعدة البيانات وعنوان الموقع، ولذلك فإن الاستعادة من دونه ليست سوى تثبيت جديد. ولا توجد أداة استيراد رسمية من الجهة المطوّرة. أما nodebb-plugin-import فهو مشروع مجتمعي لم يواكب التطورات، في حين يتضمن Discourse أداة استيراد من NodeBB، ولذلك فإن طريق الخروج الموثوق يقود إلى Discourse.
phpBB: الخيار الصغير والبسيط الذي ما زال يعمل
phpBB قديم، وهذا هو سبب اختياره. يعمل الإصدار 3.3 على PHP 7.2.0 حتى PHP 8.3 شاملاً، ويدعم MySQL 4.1.3+ وMariaDB 5.1+ وPostgreSQL 8.3+ وSQLite 3.6.15+ وMS SQL Server وOracle. يحتاج إلى دعم json وmbstring وXML، وإلى تفعيل الدالة getimagesize().
وجود SQLite هو سبب إدراجه في هذه القائمة. مع SQLite، يتكوّن المنتدى من مجلد يحتوي على ملفات PHP وملف قاعدة بيانات واحد. لا يوجد خادم قاعدة بيانات، ولا إعدادات تحتاج إلى ضبط، ولا شيء إضافي لنسخه احتياطياً. على VPS بسعة 1 GB يشغّل خدمة أخرى بالفعل، يكون هذا الفرق مهماً. استخدم SQLite لمجتمع صغير، وانتقل إلى MySQL عندما تزداد المنشورات المتزامنة، لأن SQLite يجعل عمليات الكتابة متسلسلة وتبدأ المنشورات بالانتظار خلف بعضها.
لا توجد خطوة composer ولا حاوية. ثبّت خادم ويب مع PHP، وفك ضغط الأرشيف، ثم شغّل مُثبّت المتصفح. يشرح إعداد LAMP قياسي على Ubuntu 24.04 المكدس الكامل.
sudo apt update
sudo apt install -y apache2 php libapache2-mod-php php-mysql php-mbstring php-xml php-gd unzipنزّل الإصدار 3.3 الحالي من phpbb.com، وفك ضغطه في المجلد الذي يقدّمه vhost، ثم اجعل المسارات التي يكتب إليها المُثبّت قابلة للكتابة من مستخدم خادم الويب.
sudo chown -R www-data:www-data /srv/phpbb
sudo chmod 660 /srv/phpbb/config.php
sudo chmod -R 770 /srv/phpbb/store /srv/phpbb/cache /srv/phpbb/files /srv/phpbb/images/avatars/uploadتذكر التعليمات الرسمية الصلاحيتين 666 و777. تُستخدم هاتان القيمتان في الاستضافة المشتركة، حيث لا تتحكم في المستخدم الذي يعمل به PHP. أما على VPS الخاص بك، فأنت تتحكم فيه، لذلك امنح الملكية إلى www-data وامنع الوصول عن بقية المستخدمين. هناك تفصيل في Apache يسبب المشكلات: يمنح إعداد Ubuntu الوصول فقط أسفل جذر المستندات الافتراضي الخاص به. لذلك يحتاج vhost الذي يشير إلى /srv/phpbb أيضاً إلى كتلة <Directory> مطابقة تتضمن Require all granted، وإلا فستعيد كل طلباتك الخطأ 403 Forbidden قبل الوصول إلى phpBB. أكمل التثبيت في المتصفح عند /install/index.php، ثم أعد config.php إلى 640 واحذف المجلد install/. سيستمر phpBB في تحذيرك من ذلك المجلد حتى حذفه.
يُعدّ البريد العشوائي المشكلة المعروفة في phpBB، ويمكن حلها. يوجد نموذج التسجيل في عنوان URL متوقع (ucp.php?mode=register)، لذلك تعثر عليه الروبوتات خلال أيام من فهرسة النطاق. الحل الفعّال موجود في لوحة الإدارة ضمن إجراءات مكافحة Spambot: اضبط طريقة مكافحة البريد العشوائي على Question and Answer، واكتب سؤالاً لا يستطيع الإجابة عنه إلا أفراد مجتمعك. تُحل اختبارات CAPTCHA المصوّرة (اختبارات تورنغ العامة المؤتمتة بالكامل) بتكلفة منخفضة عبر خدمات تتقاضى رسوماً لكل ألف اختبار. أما السؤال المتعلق بموضوع مجتمعك فلا يمكن حلّه بهذه الطريقة.
phpBB هو أيضاً المصدر الأفضل دعماً لعمليات الترحيل. يُعد phpbb3.rb في Discourse أكثر أدوات الاستيراد استخداماً في هذه المقالة كلها، كما توجد إجابات تمتد لعشرين عاماً في منتديات دعم phpBB. يمكنك الترحيل منه عبر mysqldump، أو نسخ ملف SQLite. أما ما لا ينتقل فهو الأنماط والإضافات الخاصة بك.
لماذا لا تصل رسائل التسجيل في المنتدى أبداً؟
يتطلب التسجيل في هذه المنتديات الأربعة تأكيداً عبر البريد الإلكتروني. إذا لم تصل الرسالة، فلا يُفعَّل الحساب، وتُظهر السجلات عملية تسجيل توقفت ببساطة. تحدد قابلية تسليم البريد الصادر ما إذا كان المنتدى سيعمل أصلاً، لذلك تعامل معها كجزء من التثبيت.
- يحظر معظم مزوّدي VPS المنفذ الصادر 25 افتراضياً، لذلك لا تصل الرسائل التي يحاول Postfix المحلي تسليمها مباشرة إلى أي مكان. يعرض سجل البريد
connect to gmail-smtp-in.l.google.com[...]:25: Connection timed out. - لا يملك عنوان IP الجديد تماماً أي سمعة إرسال، لذلك تصل الرسالة إلى مجلد البريد العشوائي حتى عند نجاح تسليمها. وبالنسبة إلى رابط التأكيد، فهذا يعادل عدم وصولها.
- من دون نشر سجلات SPF (إطار سياسة المرسل) وDKIM (البريد المعرّف بمفاتيح النطاق) في DNS، يرفض مزودو البريد الكبار الرسالة مباشرة. يظهر رفض Google بالشكل
550 5.7.26 Unauthenticated email from example.com is not accepted due to domain's DMARC policy. وأصبح DMARC (مصادقة الرسائل المستندة إلى النطاق والإبلاغ عنها والتوافق معها) متوقعاً الآن من أي جهة ترسل رسائل بكميات كبيرة.
الحل العملي هو استخدام مرحّل بريد. وجّه إعدادات SMTP في المنتدى إلى مزود بريد للرسائل المعاملاتية على المنفذ 587، وانشر سجلات SPF وDKIM وDMARC التي يزوّدك بها ذلك المزود، وأرسل من نطاق فرعي مثل mail.example.com حتى تبقى سمعة المنتدى منفصلة عن بريدك الشخصي. يمكن تشغيل خادم البريد بنفسك، وتشرح طريقة تشغيل خادم بريد مستضاف ذاتياً بالكامل على VPS ذلك، لكن إطلاق المنتدى ليس الوقت المناسب لتعلّم قابلية تسليم البريد.
اختبر الإرسال قبل الإعلان عن المنتدى. في Discourse، نفّذ الأمر التالي من داخل الحاوية:
cd /var/discourse
./launcher enter app
rake emails:test[you@example.com]تتحقق هذه المهمة من اتصال SMTP وترسل رسالة، وتسمّي سبب الفشل عند خطأ بيانات الاعتماد، وعادةً يكون ذلك على شكل Net::SMTPAuthenticationError. يحتوي phpBB على اختبار مكافئ في لوحة الإدارة ضمن Client communication. أما في Flarum وNodeBB، فسجّل حساباً تجريبياً باستخدام صندوق بريد حقيقي لدى مزود كبير، ثم اقرأ الرؤوس الخام للرسالة التي تصل. إن ظهور spf=pass وdkim=pass في رأس Authentication-Results هو النتيجة المطلوبة.
هناك نقطة خاصة بـDiscourse. اعتباراً من August 2026، يتيح معالج الإعداد تخطي SMTP والرجوع إلى Discourse ID، الذي يسجّل دخول المستخدمين باستخدام حساب خارجي بدلاً من رابط يُرسل عبر البريد الإلكتروني. يتيح ذلك إطلاق المنتدى من دون مرحّل بريد. لكنه لا يوفر رسائل الإشعارات أو إعادة تعيين كلمات المرور، لذا اضبط SMTP على أي حال قبل نمو المجتمع.
كيف تضع المنتدى خلف TLS؟
يعمل Flarum وphpBB كمضيفين افتراضيين عاديين، لذلك يكفي تشغيل certbot على خادم الويب المستخدم لديك. أما NodeBB وDiscourse فهما مختلفان؛ إذ تعمل التطبيقات على منافذ محلية، ويجب أن ينهي مكوّن أمامي TLS (أمان طبقة النقل) وأن يوجّه الطلبات وفق اسم المضيف. إذا كان المنتدى يشترك في الخادم مع خدمات أخرى، فضع reverse proxy واحداً أمام جميع الخدمات. وهذا هو الغرض من Traefik أمام عدة تطبيقات Docker Compose.
يستولي Discourse افتراضياً على المنفذين 80 و443 مباشرة، ويستخدم nginx الخاص به وقالب Let's Encrypt الخاص به. لوضعه خلف proxy موجود، حرّر app.yml، وأزل السطر templates/web.letsencrypt.ssl.template.yml، وغيّر المنافذ المكشوفة بحيث لا يستمع الحاوي إلا على عنوان محلي، ثم شغّل ./launcher rebuild app. تنفيذ ذلك بعد التثبيت يتطلب إعادة البناء وتوقفاً لبضع دقائق، لذلك اتخذ القرار قبل التثبيت، لا بعده.
ما المنتدى الملائم لحجم مجتمعك؟
تعتمد قاعدة القرار على عدد الأشخاص، لا على الميزات.
- أقل من بضع مئات من الأعضاء، ومشرف واحد، و1 GB من الذاكرة العشوائية: استخدم phpBB مع SQLite، أو Flarum إذا أردت الواجهة الحديثة ويمكنك تشغيل MariaDB. كل منهما تطبيق PHP واحد يجب إبقاؤه محدّثاً.
- مجتمع ينمو، ومشرفان أو أكثر، و4 GB من الذاكرة العشوائية: استخدم Discourse. تستحق مستويات الثقة وقائمة المراجعة المواردَ التي يستهلكها بمجرد أن تتجاوز مهام الإشراف قدرة شخص واحد على متابعتها.
- إذا كنت تريد محادثة مباشرة أكثر من سلاسل نقاش دائمة: استخدم NodeBB، أو تقبّل أنه دردشة وشغّل Rocket.Chat باستخدام Docker Compose بدلاً منه. المنتدى الذي لا يبقى فيه شيء جديراً بالقراءة بعد أسبوع كان ينبغي أن يكون خادم دردشة.
- إذا كان ما تحتاجه فعلياً هو التوثيق لا النقاش: فلا تستخدم أياً من هذه الخيارات. يجيب BookStack أو Wiki.js أو Outline عن هذا الاحتياج بصورة أفضل، وعادةً ما يدل المنتدى المليء بالأسئلة المتكررة على غياب ويكي.
- إذا كنت لا تزال تحدد ما ينبغي أن تضعه على الخادم أصلاً: فستكون القائمة الأوسع لخدمات الاستضافة الذاتية لعام 2026 نقطة بداية أفضل، بينما يغطي دليل بدائل Notion المستضافة ذاتياً منطقة التداخل بين المنتديات ومساحات العمل المشتركة.
أيّاً كان خيارك، فإن المنتدى لا يكون متيناً إلا بقدر آخر نسخة احتياطية استُعيدت بنجاح. أفرغ قاعدة البيانات وفق جدول زمني، وانسخ دليل التحميلات في المهمة نفسها، ثم استعد النتيجة مرة واحدة في مكان آخر لإثبات صلاحية التفريغ. يغطّي النسخ الاحتياطية المجدولة باستخدام restic على VPS هذا الجزء، وهو الجزء الوحيد من هذا الإعداد الذي لا يتيح فرصة ثانية.
FAQ
ما الحد الأدنى لمتطلبات الخادم لمنتدى مستضاف ذاتياً؟
يعمل phpBB مع SQLite بذاكرة RAM سعتها 1 GB إلى جانب خدمات أخرى، لأنه لا يحتاج إلى خادم قاعدة بيانات. يحتاج Flarum إلى 1 GB بالإضافة إلى MariaDB. يعمل NodeBB بصورة مريحة على 2 GB مع MongoDB. يذكر Discourse أن 1 GB مع swap و10 GB من مساحة القرص هو الحد الأدنى، لكن 2 GB هو الحد الأدنى العملي، بينما تناسب 4 GB المنتدى النشط، لأن ./launcher rebuild app يعيد تجميع الأصول في الذاكرة عند كل ترقية، وفي تلك اللحظة قد ينهي kernel العملية بسبب نفاد الذاكرة.
هل يمكنني نقل منتدى phpBB إلى Discourse؟
نعم، وهذا هو مسار الترحيل الأفضل دعماً هنا. يتضمن Discourse script/import_scripts/phpbb3.rb، الذي تشغّله داخل الحاوية باستخدام نسخة من قاعدة بيانات phpBB، وليس باستخدام قاعدة البيانات الحية. تنتقل المستخدمون والتصنيفات والمواضيع والمنشورات والمرفقات. لا تنتقل الأنماط والإضافات، كما تتغير عناوين URL للمواضيع القديمة، لذلك خطط لإعادة التوجيه من مسارات phpBB قبل تغيير DNS. تستغرق اللوحات الكبيرة ساعات، لذلك نفّذ عملية الاستيراد مرة تجريبية على خادم مؤقت وقِس مدتها.
لماذا لا يتلقى المستخدمون الجدد رسالة تفعيل البريد الإلكتروني مطلقاً؟
يحظر معظم موفري VPS المنفذ الصادر 25، لذلك لا يستطيع خادم البريد المحلي التسليم إطلاقاً، ويعرض السجل Connection timed out تجاه خادم تبادل البريد الخاص بالمستلم. عندما يعمل التسليم، يُرفض عنوان IP جديد لا يملك سجلات SPF أو DKIM أو تُحجب رسائله، ويرد Google بالرمز 550 5.7.26 Unauthenticated email ... is not accepted due to domain's DMARC policy. أرسل البريد عبر relay على المنفذ 587 وانشر سجلات SPF وDKIM وDMARC التي يزوّدك بها relay، ثم أكّد ذلك عبر تسجيل تجريبي واقرأ ترويسة Authentication-Results في الرسالة التي تتلقاها.
ما برنامج المنتدى المستضاف ذاتياً الذي يحتاج إلى أقل قدر من أعمال الإشراف؟
Discourse، لأن سير العمل مدمج في النواة وليس مضافاً إليها كحل منفصل. تُفرض حدود على معدل الحسابات الجديدة حتى تقرأ قدراً كافياً، وتُجمع البلاغات في قائمة انتظار تسجل من تعامل معها، كما أن إضافة Akismet رسمية. يقترب phpBB من ذلك بعد تفعيل أسلوب مكافحة البريد المزعج Question and Answer، الذي يوقف معظم تسجيلات الروبوتات تلقائياً. يعتمد Flarum وNodeBB على إضافات مجتمعية لتنفيذ المهام نفسها. لا يغيّر أي من ذلك العامل الفعلي: يزداد عبء الإشراف بزيادة عدد الأشخاص الذين ينشرون، وليس بحسب البرنامج الذي يستخدمونه للنشر.