बेहतरीन self-hosted forum software का चुनाव कैसे करें
Discourse, Flarum, NodeBB और phpBB के लिए सही VPS कॉन्फ़िगरेशन जानें। हम RAM की वास्तविक खपत, डेटाबेस प्रबंधन, स्पैम सुरक्षा और माइग्रेशन की चुनौतियों का विश्लेषण करते हैं।
आपको कौन सा self-hosted forum software चलाना चाहिए?
आज के समय में VPS (virtual private server) पर चलाने के लिए self-hosted forum software के मुख्य रूप से चार विकल्प उपलब्ध हैं: Discourse, Flarum, NodeBB और phpBB। यदि आप इसे 4 GB RAM दे सकते हैं और आपके पास कम से कम दो लोग moderation के लिए उपलब्ध हैं, तो Discourse सबसे सही विकल्प है। यदि आपके पास 1 GB RAM है और केवल एक moderator है, तो इसके बजाय Flarum या phpBB का उपयोग करें। एक शांत forum जिसे आप व्यवस्थित रख सकें, एक ऐसे बेहतर forum से कहीं बेहतर है जिसे आप संभाल न सकें।
Installation का काम आसान है। इनमें से किसी भी software को एक दोपहर में setup किया जा सकता है। यह तय करना कि एक साल बाद भी forum अस्तित्व में रहेगा या नहीं, flag queue और mail path पर निर्भर करता है। इसलिए, feature lists पढ़ने से पहले moderation और email वाले sections को जरूर पढ़ें।
एक फोरम को वास्तव में चलने के लिए क्या चाहिए?
एक फोरम एक नहीं, बल्कि चार गतिशील भागों से मिलकर बनता है: एक application process, एक database जिसे application से अधिक समय तक जीवित रहना होता है, uploaded avatars और attachments की एक directory, और mail भेजने के लिए एक कार्यशील मार्ग। Application को बदला जा सकता है। Database को नहीं बदला जा सकता, क्योंकि हर post, हर account और हर private message उसी के अंदर रहता है। यही कारण है कि प्रत्येक project द्वारा चुना गया database नीचे दिए गए अनुभागों में सबसे महत्वपूर्ण पंक्ति है। यह तय करता है कि जिस दिन आप इसे छोड़ना चाहेंगे, उस दिन आपका export कैसा दिखेगा।
दूसरी लागत मानवीय है। Public registration और public posting का अर्थ है bot signups, जो आमतौर पर domain के crawl में आने के पहले सप्ताह के भीतर ही हो जाते हैं। इन चारों को lock down किया जा सकता है। इनमें से केवल एक ही core में workflow प्रदान करता है।
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 RAM swap के साथ, और 10 GB डिस्क है। swap वाले हिस्से को गंभीरता से लें। जब विज़ार्ड को लगता है कि सर्वर को इसकी आवश्यकता है, तो सेटअप स्क्रिप्ट fallocate -l 2G /swapfile के साथ 2 GB की swapfile बनाती है, और वह swap केवल दिखावे के लिए नहीं है। मेमोरी का चरम उपयोग साइट चलने के दौरान नहीं होता है। यह ./launcher rebuild app के दौरान होता है, जो हर अपग्रेड पर कंटेनर के अंदर JavaScript और CSS एसेट्स को फिर से कंपाइल करता है। बिना swap वाले 1 GB के सर्वर पर यह चरण बीच में ही बंद (kill) हो जाता है, रीबिल्ड बिना किसी उपयोगी त्रुटि के समाप्त हो जाता है, और dmesg | tail में एक Out of memory: Killed process लाइन दिखाई देती है। इसे सुचारू रूप से चलाने के लिए 2 GB RAM का बजट रखें, और जब फ़ोरम व्यस्त हो जाए तो 4 GB का उपयोग करें।
अपग्रेड ब्राउज़र में /admin/upgrade से, या शेल से चलाए जाते हैं:
cd /var/discourse
./launcher rebuild apprebuild चल रहे कंटेनर को नष्ट कर देता है, app.yml से एक नया कंटेनर बूटस्ट्रैप करता है, और उसे शुरू करता है, इसलिए इसमें लगने वाले कुछ मिनटों के लिए साइट डाउन रहती है। एक सिंगल कंटेनर पर इसका कोई विकल्प नहीं है। data.yml और web_only.yml नमूनों का उपयोग करके दो कंटेनरों में विभाजित करने से PostgreSQL चालू रहता है जबकि वेब कंटेनर रीबिल्ड होता है, जो तब उपयोगी हो जाता है जब आपके पास ऐसे उपयोगकर्ता हों जो डाउनटाइम पर ध्यान देते हैं।
मॉडरेशन वह जगह है जहाँ Discourse अपनी RAM का सही उपयोग करता है। नए अकाउंट ट्रस्ट लेवल 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 डंप और अपलोड डायरेक्टरी होती है। एक अन्य Discourse इंस्टेंस इसे रिस्टोर करता है। इसके अलावा कोई अन्य चीज़ इसे नहीं पढ़ सकती, इसलिए Discourse छोड़ने का मतलब है कि आपको उस डंप के विरुद्ध स्वयं SQL लिखना होगा। 50,000 पोस्ट इम्पोर्ट करने से पहले यह तय कर लें कि क्या आप इसके साथ काम कर सकते हैं।
Flarum: एक हल्का PHP फोरम
Flarum एक सामान्य PHP एप्लिकेशन है: nginx या Apache के पीछे php-fpm, एक 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 को शामिल करते हैं। इसके बाद डोमेन पर ब्राउज़ करें, और Flarum का अपना इंस्टॉलर डेटाबेस और एडमिन अकाउंट की जानकारी मांगेगा।
अगस्त 2026 तक के संस्करण: 1.8.17 वर्तमान स्टेबल रिलीज़ है, जिसे जून 2026 में प्रकाशित किया गया था, और 2.0 अभी रिलीज़ कैंडिडेट 5 पर है। रिलीज़ कैंडिडेट पर कोई नया समुदाय शुरू न करें। जब 2.0 आएगा, तो एक्सटेंशन को लोड होने से पहले अपडेट करने की आवश्यकता होगी, और यह वह अपग्रेड है जिसमें आपका पूरा सप्ताहांत लग सकता है।
इसका फुटप्रिंट छोटा है। कुछ php-fpm वर्कर्स, MariaDB के लिए कुछ सौ MB, और स्टेटिक फाइलें। एक नया समुदाय 1 GB पर आसानी से चल सकता है।
मॉडरेशन इसकी वास्तविक कमजोरी है। कोर आपको रिपोर्ट और प्रति-समूह अनुमतियां (per-group permissions) देता है। अप्रूवल क्यू और स्पैम ब्लॉकिंग एक्सटेंशन से आते हैं, जो मुख्य रूप से FriendsOfFlarum कलेक्शन में होते हैं, जिन्हें composer require के साथ इंस्टॉल किया जाता है और एडमिन पैनल में चालू किया जाता है। यह आज काम करता है। आप phpBB या Discourse की तुलना में एक छोटे स्वयंसेवी इकोसिस्टम पर भरोसा कर रहे हैं। एक अनमैंटेंड एक्सटेंशन आपके अगले कोर अपग्रेड को रोक सकता है, क्योंकि composer इसे नए संस्करण के साथ रिजॉल्व करने से मना कर देता है।
डेटा निकालना आसान है: डेटाबेस को mysqldump करें और assets डायरेक्टरी को कॉपी करें। डेटा डालना कठिन है। Discourse, Flarum से Discourse दिशा के लिए flarum_import.rb प्रदान करता है, जो आपको बताता है कि ट्रैफिक आमतौर पर किस दिशा में जाता है। phpBB को Flarum में इम्पोर्ट करने का काम फर्स्ट-पार्टी के बजाय कम्युनिटी एक्सटेंशन द्वारा किया जाता है, इसलिए किसी भी एक्सटेंशन पर भरोसा करने से पहले उसकी एक कॉपी के साथ परीक्षण जरूर करें।
NodeBB: रियल-टाइम पोस्टिंग और इसकी लागत
NodeBB, Node.js पर आधारित है। यह websockets के माध्यम से खुले ब्राउज़रों पर नई पोस्ट भेजता है, इसलिए एक सक्रिय थ्रेड बिना रिफ्रेश किए अपडेट हो जाता है। इसे चुनने का यही कारण है। README में Node.js 22 या उससे नया वर्ज़न और MongoDB 5+ या Redis 7.2+ की आवश्यकता बताई गई है, और तीसरे विकल्प के रूप में source tree में एक PostgreSQL ड्राइवर भी शामिल है।
Redis को प्राथमिक डेटाबेस के रूप में चुनना इस वाक्य का सबसे बड़ा जाल है। Redis डेटासेट को RAM में रखता है, इसलिए आपके forum के बढ़ने के साथ RAM की आवश्यकता भी बढ़ती जाती है, न कि स्थिर रहती है। MongoDB या PostgreSQL इसे डिस्क पर रखते हैं और केवल सक्रिय डेटा को ही कैश करते हैं। Redis तभी चुनें जब आप जानते हों कि आप ऐसा क्यों कर रहे हैं।
Ubuntu 24.04 में Node.js 18 पैकेज है, जो न्यूनतम आवश्यकता से कम है, इसलिए पहले एक वर्तमान runtime इंस्टॉल करें।
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 डेमन बनाता है (daemonises), जो रीबूट होने वाली मशीन के लिए गलत है। इसके बजाय, लोडर को systemd के तहत foreground में चलाएं।
[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 वह हिस्सा है जिसे लोग अक्सर भूल जाते हैं। इसके बिना, लोडर फोर्क (fork) हो जाता है और पैरेंट प्रोसेस समाप्त हो जाती है, जिससे systemctl status nodebb यूनिट को मृत (dead) रिपोर्ट करता है जबकि curl localhost:4567 अभी भी जवाब दे रहा होता है, और systemctl stop nodebb फिर कुछ भी बंद नहीं कर पाता है। रिवर्स प्रॉक्सी के पीछे, websocket अपग्रेड हेडर को पास करना आवश्यक है। यदि nginx ब्लॉक से proxy_set_header Upgrade $http_upgrade; और proxy_set_header Connection "upgrade"; गायब हैं, तो फ़ोरम लोड तो हो जाएगा, लेकिन ब्राउज़र कंसोल failed socket.io अनुरोधों से भर जाएगा, और जब तक पाठक पेज रिफ्रेश नहीं करेगा, तब तक नई पोस्ट दिखाई नहीं देंगी।
मॉडरेशन, Flarum और Discourse के बीच का है। एडमिन पैनल में एक फ्लैग क्यू (flag queue), प्रति-श्रेणी विशेषाधिकार और एक प्रतिष्ठा प्रणाली (reputation system) है। एंटी-स्पैम के लिए nodebb-plugin-spam-be-gone जैसे कम्युनिटी प्लगइन्स का उपयोग किया जाता है, जो Akismet और StopForumSpam को जोड़ते हैं।
बैकअप मैन्युअल होते हैं, और कोई भी इसके बारे में तब तक बात नहीं करता जब तक कि आपको इसकी आवश्यकता न हो। ./nodebb CLI में कोई बैकअप कमांड नहीं है। आपको mongodump या pg_dump के साथ स्वयं डेटाबेस डंप करना होगा, और आपको public/uploads डायरेक्टरी और उसके साथ config.json को कॉपी करना होगा। config.json में डेटाबेस क्रेडेंशियल्स और साइट URL होते हैं, इसलिए इसके बिना रिस्टोर करना केवल एक नया इंस्टॉलेशन ही होगा। इसमें कोई फर्स्ट-पार्टी इम्पोर्टर भी नहीं है। 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 फाइलों की एक डायरेक्टरी और एक डेटाबेस फाइल मात्र है। इसमें किसी अलग डेटाबेस सर्वर की आवश्यकता नहीं है, न ही कुछ ट्यून करने की जरूरत है, और न ही बैकअप के लिए कुछ अतिरिक्त करना पड़ता है। 1 GB RAM वाले VPS पर, जो पहले से ही कुछ अन्य सेवाएं चला रहा है, यह अंतर काफी मायने रखता है। छोटे समुदाय के लिए SQLite का उपयोग करें और जब concurrent posting बढ़ने लगे तो MySQL पर शिफ्ट हो जाएं, क्योंकि SQLite राइट ऑपरेशन्स को क्रमबद्ध (serialise) करता है और पोस्ट एक-दूसरे के पीछे कतार में लग जाते हैं।
इसमें कोई composer स्टेप या container नहीं है। PHP के साथ एक वेब सर्वर इंस्टॉल करें, आर्काइव को अनपैक करें, और ब्राउज़र-आधारित इंस्टॉलर चलाएं। फुल स्टैक सेटअप Ubuntu 24.04 पर एक मानक LAMP स्टैक में कवर किया गया है।
sudo apt update
sudo apt install -y apache2 php libapache2-mod-php php-mysql php-mbstring php-xml php-gd unzipphpbb.com से वर्तमान 3.3 रिलीज डाउनलोड करें, इसे उस डायरेक्टरी में अनपैक करें जिसे आपका vhost सर्व करता है, और फिर उन पाथ्स को वेब सर्वर यूजर के लिए राइटेबल (writable) बनाएं जिन पर इंस्टॉलर लिखता है।
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 का कॉन्फ़िगरेशन केवल अपने डिफ़ॉल्ट डॉक्यूमेंट रूट के तहत एक्सेस देता है, इसलिए /srv/phpbb पर पॉइंट करने वाले vhost को एक मैचिंग <Directory> ब्लॉक की आवश्यकता होती है जिसमें Require all granted हो, अन्यथा phpBB तक पहुँचने से पहले ही हर रिक्वेस्ट 403 Forbidden एरर देगी। ब्राउज़र में /install/index.php पर इंस्टॉलेशन पूरा करें, फिर config.php को वापस 640 पर सेट करें और install/ डायरेक्टरी को डिलीट कर दें। phpBB आपको तब तक उस डायरेक्टरी के बारे में चेतावनी देता रहेगा जब तक वह हट नहीं जाती।
स्पैम phpBB की एक जानी-मानी समस्या है, और यह ठीक करने योग्य है। रजिस्ट्रेशन फॉर्म एक अनुमानित URL (ucp.php?mode=register) पर स्थित होता है, इसलिए डोमेन क्रॉल होने के कुछ ही दिनों के भीतर बॉट्स इसे ढूंढ लेते हैं। जो समाधान कारगर है, वह एडमिन पैनल में Spambot countermeasures के अंतर्गत है: एंटी-स्पैम मेथड को Question and Answer पर सेट करें, और एक ऐसा प्रश्न लिखें जिसका उत्तर केवल आपके समुदाय का कोई सदस्य ही दे सके। इमेज CAPTCHAs (completely automated public Turing tests) को उन सेवाओं द्वारा आसानी से हल कर लिया जाता है जो प्रति हजार के हिसाब से शुल्क लेती हैं। आपके अपने विषय से संबंधित प्रश्न को हल करना उनके लिए संभव नहीं है।
माइग्रेशन के लिए phpBB सबसे अच्छी तरह से समर्थित स्रोत भी है। Discourse का phpbb3.rb इस पूरे लेख में सबसे अधिक इस्तेमाल किया जाने वाला इम्पोर्टर है, और phpBB सपोर्ट फोरम पर बीस वर्षों के समाधान उपलब्ध हैं। बाहर निकलना mysqldump है, या बस SQLite फाइल को कॉपी करना है। जो चीजें माइग्रेट नहीं होतीं, वे हैं आपके स्टाइल्स और एक्सटेंशन्स।
फोरम साइनअप ईमेल क्यों नहीं पहुँचते हैं?
इन चारों पर पंजीकरण एक कन्फर्मेशन ईमेल पर निर्भर करता है। यदि वह मेल नहीं पहुँचता है, तो अकाउंट कभी एक्टिवेट नहीं होता है, और आपके लॉग्स में केवल एक अधूरा साइनअप दिखाई देता है। आउटबाउंड डिलीवरेबिलिटी (outbound deliverability) यह तय करती है कि फोरम काम करेगा या नहीं, इसलिए इसे इंस्टॉलेशन का ही हिस्सा मानें।
- अधिकांश VPS प्रदाता डिफ़ॉल्ट रूप से आउटबाउंड पोर्ट 25 को ब्लॉक रखते हैं, इसलिए सीधे डिलीवर करने की कोशिश करने वाला स्थानीय Postfix कहीं नहीं पहुँच पाता है। मेल लॉग में
connect to gmail-smtp-in.l.google.com[...]:25: Connection timed outदिखाई देता है। - एक बिल्कुल नए IP एड्रेस की कोई सेंडिंग रेपुटेशन नहीं होती है, इसलिए सफल डिलीवरी भी स्पैम फोल्डर में चली जाती है। कन्फर्मेशन लिंक के लिए, यह न पहुँचने के बराबर ही है।
- DNS में SPF (sender policy framework) और DKIM (domainkeys identified mail) रिकॉर्ड प्रकाशित न होने पर, बड़े प्रदाता संदेश को सीधे रिजेक्ट कर देते हैं। Google का रिजेक्शन
550 5.7.26 Unauthenticated email from example.com is not accepted due to domain's DMARC policyके रूप में दिखता है। DMARC (domain-based message authentication, reporting and conformance) की अपेक्षा अब हर उस व्यक्ति से की जाती है जो बड़ी मात्रा में मेल भेजता है।
इसका व्यावहारिक समाधान एक रिले (relay) है। फोरम की 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 के लिए, किसी बड़े प्रदाता के वास्तविक मेलबॉक्स पर एक डमी अकाउंट रजिस्टर करें और प्राप्त मेल के रॉ हेडर (raw headers) पढ़ें। Authentication-Results हेडर में spf=pass और dkim=pass ही वह परिणाम है जिसे आप ढूंढ रहे हैं।
Discourse के लिए एक बारीकी है। अगस्त 2026 तक, सेटअप विज़ार्ड आपको SMTP छोड़ने और Discourse ID का उपयोग करने की अनुमति देता है, जो लोगों को ईमेल लिंक के बजाय बाहरी अकाउंट से साइन-इन कराता है। इससे आप बिना रिले के लॉन्च कर सकते हैं। यह आपको नोटिफिकेशन मेल या पासवर्ड रीसेट की सुविधा नहीं देता है, इसलिए कम्युनिटी बढ़ने से पहले SMTP को कॉन्फ़िगर अवश्य करें।
Forum को TLS के पीछे कैसे रखें?
Flarum और phpBB साधारण virtual hosts हैं, इसलिए आपके द्वारा पहले से चलाए जा रहे web server पर certbot का उपयोग करना पर्याप्त है। NodeBB और Discourse अलग हैं: ये ऐसे applications हैं जो local ports पर listen करते हैं, और इनके सामने किसी चीज़ को TLS (transport layer security) को terminate करना होता है और hostname के आधार पर traffic को route करना होता है। यदि forum अन्य services के साथ एक ही box पर है, तो उन सभी के सामने एक reverse proxy लगाएँ, जिसके लिए Traefik in front of multiple Docker Compose apps का उपयोग किया जाता है।
Discourse डिफ़ॉल्ट रूप से ports 80 और 443 का स्वामित्व स्वयं रखता है, इसके लिए वह अपने स्वयं के nginx और Let's Encrypt template का उपयोग करता है। इसे किसी मौजूदा proxy के पीछे रखने के लिए आप app.yml को edit करें, templates/web.letsencrypt.ssl.template.yml line को हटाएँ, exposed ports को बदलें ताकि container केवल local address पर listen करे, और फिर ./launcher rebuild app चलाएँ। ऐसा बाद में करने पर rebuild की आवश्यकता होती है और कुछ मिनटों का downtime होता है, इसलिए install करने के बाद के बजाय पहले ही निर्णय लें।
आपके समुदाय के आकार के लिए कौन सा फोरम उपयुक्त है?
निर्णय का नियम लोगों पर आधारित है, सुविधाओं पर नहीं।
- कुछ सौ सदस्यों से कम, एक मॉडरेटर, 1 GB RAM: SQLite पर phpBB, या यदि आप आधुनिक इंटरफ़ेस चाहते हैं और MariaDB चला सकते हैं तो Flarum। प्रत्येक को पैच करते रहने के लिए एक एकल PHP एप्लिकेशन की आवश्यकता होती है।
- एक बढ़ता हुआ समुदाय, दो या अधिक मॉडरेटर, 4 GB RAM: Discourse। जिस क्षण मॉडरेशन एक व्यक्ति के दिमाग में नहीं समाता, उस समय ट्रस्ट लेवल और रिव्यू क्यू (review queue) इसके फुटप्रिंट के लायक हो जाते हैं।
- आप टिकाऊ थ्रेड्स की तुलना में लाइव बातचीत अधिक चाहते हैं: NodeBB, या यह स्वीकार करें कि यह चैट है और इसके बजाय Rocket.Chat on Docker Compose चलाएं। एक फोरम जहाँ एक सप्ताह बाद कुछ भी पढ़ने लायक नहीं रहता, उसे चैट सर्वर होना चाहिए था।
- आपको वास्तव में चर्चा के बजाय दस्तावेज़ीकरण की आवश्यकता है: इनमें से कोई भी नहीं। BookStack, Wiki.js or Outline उस प्रश्न का बेहतर उत्तर देते हैं, और बार-बार पूछे जाने वाले प्रश्नों से भरा फोरम आमतौर पर एक गायब विकी (wiki) का संकेत है।
- अभी भी यह तय कर रहे हैं कि सर्वर पर क्या होना चाहिए: the wider self-hosting shortlist for 2026 एक बेहतर शुरुआती बिंदु है, और the self-hosted Notion alternatives guide फोरम और साझा कार्यक्षेत्रों के बीच के ओवरलैप को कवर करता है।
आप जिसे भी चुनें, फोरम उतना ही टिकाऊ है जितना कि उसका अंतिम पुनर्स्थापित बैकअप। डेटाबेस को एक शेड्यूल पर डंप करें, उसी जॉब में अपलोड डायरेक्टरी को कॉपी करें, और यह साबित करने के लिए कि डंप उपयोग करने योग्य है, परिणाम को एक बार कहीं और पुनर्स्थापित करें। Scheduled restic backups on a VPS उस हिस्से को कवर करता है, और यह इस सेटअप का वह हिस्सा है जिसका कोई दूसरा मौका नहीं होता।
FAQ
self-hosted forum के लिए न्यूनतम सर्वर आवश्यकताएं क्या हैं?
SQLite के साथ phpBB अन्य सेवाओं के साथ 1 GB RAM पर चल सकता है, क्योंकि इसमें अलग से डेटाबेस सर्वर की आवश्यकता नहीं होती। Flarum को 1 GB RAM और MariaDB की आवश्यकता होती है। NodeBB 2 GB RAM और MongoDB के साथ सुचारू रूप से चलता है। Discourse न्यूनतम 1 GB RAM (swap के साथ) और 10 GB डिस्क स्पेस का सुझाव देता है, लेकिन व्यावहारिक रूप से 2 GB RAM न्यूनतम है और व्यस्त फोरम के लिए 4 GB बेहतर है, क्योंकि ./launcher rebuild app हर अपग्रेड के दौरान मेमोरी में एसेट्स को फिर से कंपाइल (recompile) करता है और उस समय कम मेमोरी वाला सर्वर kernel के out of memory हैंडलर द्वारा बंद किया जा सकता है।
क्या मैं अपने phpBB फोरम को Discourse पर ले जा सकता हूँ?
हाँ, और यह यहाँ सबसे अच्छी तरह से समर्थित माइग्रेशन पाथ है। Discourse में script/import_scripts/phpbb3.rb शामिल है, जिसे आप कंटेनर के अंदर phpBB डेटाबेस की एक कॉपी के साथ चलाते हैं, कभी भी लाइव डेटाबेस के साथ नहीं। इसमें उपयोगकर्ता, श्रेणियां, विषय, पोस्ट और अटैचमेंट माइग्रेट हो जाते हैं। स्टाइल और एक्सटेंशन माइग्रेट नहीं होते हैं, और पुराने टॉपिक URL बदल जाते हैं, इसलिए DNS स्विच करने से पहले phpBB पाथ से रीडायरेक्ट की योजना बनाएं। बड़े बोर्ड्स के माइग्रेशन में घंटों लग सकते हैं, इसलिए एक बार स्क्रैच सर्वर पर इम्पोर्ट का अभ्यास करें और समय का आकलन करें।
नए उपयोगकर्ताओं को एक्टिवेशन ईमेल क्यों नहीं मिलता है?
अधिकांश VPS प्रदाता आउटबाउंड पोर्ट 25 को ब्लॉक करते हैं, इसलिए स्थानीय मेल सर्वर ईमेल डिलीवर नहीं कर पाता और लॉग में प्राप्तकर्ता के मेल एक्सचेंजर के खिलाफ Connection timed out दिखाई देता है। जब डिलीवरी काम करती है, तब भी SPF या DKIM रिकॉर्ड के बिना एक नया IP रिजेक्ट या फ़िल्टर कर दिया जाता है, और Google 550 5.7.26 Unauthenticated email ... is not accepted due to domain's DMARC policy के साथ जवाब देता है। पोर्ट 587 पर एक रिले के माध्यम से ईमेल भेजें और उस रिले द्वारा दिए गए SPF, DKIM और DMARC रिकॉर्ड प्रकाशित करें, फिर एक टेस्ट रजिस्ट्रेशन के साथ पुष्टि करें और प्राप्त संदेश के Authentication-Results हेडर को पढ़ें।
किस self-hosted फोरम सॉफ़्टवेयर को सबसे कम मॉडरेशन की आवश्यकता होती है?
Discourse, क्योंकि इसका वर्कफ़्लो कोर में ही शामिल है, न कि बाद में जोड़ा गया है। नए खातों पर तब तक रेट लिमिट लगी रहती है जब तक वे पर्याप्त सामग्री पढ़ नहीं लेते, फ्लैग्स एक कतार में जमा होते हैं जो यह रिकॉर्ड करती है कि उन पर किसने कार्रवाई की, और Akismet प्लगइन आधिकारिक है। phpBB भी इसके करीब है यदि आप Question and Answer एंटी-स्पैम विधि को सक्षम करते हैं, जो अपने आप में अधिकांश बॉट रजिस्ट्रेशन को रोक देती है। Flarum और NodeBB इन्हीं कार्यों के लिए कम्युनिटी एक्सटेंशन पर निर्भर करते हैं। इनमें से कोई भी वास्तविक कारक को नहीं बदलता: मॉडरेशन का भार इस बात पर निर्भर करता है कि कितने लोग पोस्ट कर रहे हैं, न कि इस पर कि वे किस सॉफ़्टवेयर का उपयोग कर रहे हैं।