كما تعلمون جيدًا، يدعم NodeBB نوعين من قواعد البيانات الخلفية: Redis و MongoDB. يدعم سكريبت استيراد Discourse كلا النوعين. في هذا الدليل، سنتعلم كيفية نقل NodeBB باستخدام MongoDB كقاعدة بيانات خلفية. سنستخدم NodeBB Importer مع مُكيّف mongo. إذا كان منتدى NodeBB الخاص بك يستخدم Redis كقاعدة بيانات خلفية، فالرجاء اتباع هذا الدليل الذي يوضح مُكيّف redis.
الخطة
- إعداد بيئة التطوير.
- تصدير قاعدة البيانات من بيئة الإنتاج.
- استيراد قاعدة بيانات الإنتاج إلى مثيل Discourse.
- تشغيل سكريبت الاستيراد.
ما يمكن نقله
- المجموعات
- المرفقات
- الفئات
- الفئة الجذرية =\u003e الفئة الجذرية
- الفئة الفرعية والفئة تحت الفرعية =\u003e الفئة الفرعية
- المواضيع والمنشورات
- الموضوع المثبت =\u003e موضوع مثبت
- الموضوع المقفل =\u003e موضوع مغلق
- مشاهدات الموضوع
- المُصوّتون بالإعجاب (upvoted_by)
- الأنماط، والإشارات، والرموز التعبيرية، والمرفقات.
- المستخدمين (مع السمات التالية)
- خلفية الملف الشخصي
- الصور الرمزية (Avatars)
- حالة الحظر
- اسم المستخدم
- الاسم
- البريد الإلكتروني
- المسؤول (Admin)
- السيرة الذاتية (Bio)
- المجموعة
- الموقع الإلكتروني
- الموقع الجغرافي
- تاريخ الانضمام
إعداد بيئة التطوير المحلية
كما هو مذكور في خطتنا، نحتاج أولاً إلى إعداد بيئة التطوير لدينا. اتبع أحد هذه الأدلة لتثبيت Discourse نفسه:
الرجاء مراجعة هذا الدليل إذا واجهت أي مشاكل في إعداد خادم Discourse.
ثم قم بتثبيت خادم قاعدة بيانات MongoDB.
Ubuntu-18-04:
$ wget -qO - https://www.mongodb.org/static/pgp/server-4.0.asc | sudo apt-key add -
$ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
$ sudo service mongod status
لمزيد من التفاصيل، راجع الدليل الرسمي.
Mac OS:
$ brew tap mongodb/brew
$ brew install mongodb-community@4.0
$ brew services start mongodb-community@4.0
$ brew services status mongodb-community@4.0
لمزيد من التفاصيل، راجع الدليل الرسمي.
Windows 10:
قم بتنزيل برنامج التثبيت وتثبيت MongoDB كخدمة Windows:
https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.12-signed.msi
قم بتشغيل cmd بصلاحيات المسؤول للتحقق من عمل خادم mongo بشكل صحيح:
"C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe"
لمزيد من التفاصيل، راجع الدليل الرسمي.
ستكون هذه البيئة هي خادم Discourse لدينا.
تصدير نسخة احتياطية من قاعدة بيانات الإنتاج:
أوقف تشغيل منتدى NodeBB الخاص بك (خادم الإنتاج).
$ cd /path_to_nodebb
$ ./nodebb stop
أوقف تشغيل قاعدة البيانات:
$ sudo service mongodb stop
قم بنسخ قاعدة البيانات احتياطيًا:
$ mongodump --out ~/my_backup_path/
سيكون مخرجات الأمر السابق شبيهًا بهذا:
2019-08-16T15:17:09.845+0300 done dumping admin.system.users (1 document)
2019-08-16T15:17:09.846+0300 done dumping admin.system.version (2 documents)
2019-08-16T15:17:09.849+0300 done dumping nodebb.sessions (10 documents)
2019-08-16T15:17:09.850+0300 done dumping nodebb.socket.io (215 documents)
2019-08-16T15:17:09.854+0300 done dumping nodebb.objects (1488 documents)
لاحظ أن النسخة الاحتياطية هي في الواقع مجلد وليس مجرد ملف.
يمكنك التحقق من حجم قاعدة البيانات الخاصة بك بتشغيل
use myDatabaseثمdb.stats().dataSize;داخل واجهة سطر أوامرmongo. ستكون القيمة المعادة بالبايت.
قم بنسخ أصول المنتدى احتياطيًا:
$ cd /path_to_nodebb_root_directory/
$ tar -czf ./uploads.tar.gz ./public/uploads
بعد الحصول على قاعدة البيانات وأصول المنتدى، يجب نسخها إلى خادم Discourse.
استيراد قاعدة البيانات
الآن بعد أن أصبح لدينا قاعدة البيانات، يمكننا استيرادها في مثيل MongoDB المحلي لدينا:
$ mongorestore ~/path_of_my_backup_directory/
لمزيد من الخيارات، راجع الدليل الرسمي.
بعد ذلك، تحتاج إلى استخراج ملف uploads.tar.gz حتى يتمكن المستورد من استيراد الأصول:
$ tar xvzf uploads.tar.gz
تشغيل سكريبت المستورد
الآن بعد أن أصبح لدينا قاعدة البيانات والأصول في مكانها الصحيح، نحن مستعدون لتشغيل سكريبت المستورد. قبل ذلك، نحتاج إلى تحرير سكريبت مستورد NodeBB ليتناسب مع احتياجاتنا.
هذا هو مسار مجلد التحميلات (uploads) الخاص بـ NodeBB:
ATTACHMENT_DIR = '/absolute_path/uploads'
بعد ذلك، نحتاج إلى إخبار المستورد باستخدام مُكيّف mongo بدلاً من مُكيّف redis:
adapter = NodeBB::Mongo
@client = adapter.new('mongodb://127.0.0.1:27017/nodebb')
# adapter = NodeBB::Redis
# @client = adapter.new(
# host: "localhost",
# port: "6379",
# db: 14
# )
شغّل المستورد مع دعم Discourse النظيف ومكتبة mongo:
$ cd ~/discourse
$ echo "gem 'mongo'" >> Gemfile
$ bundle install
$ bundle exec rake db:drop db:create db:migrate
$ bundle exec ruby script/import_scripts/nodebb/nodebb.rb
سيتم توصيل المستورد بمثيل MongoDB وينقل كل شيء إلى Discourse.
بعد انتهاء المستورد، قم بتشغيل Discourse:
$ bundle exec rails server
قم بتشغيل Sidekiq لمعالجة البيانات المنقولة:
$ bundle exec sidekiq
يمكنك مراقبة التقدم في http://localhost:3000/sidekiq/queues.
قم بنسخ احتياطي لـ Discourse وقم برفعه إلى خادم Discourse الإنتاجي الخاص بك باتباع هذا الدليل.
![]()
إذا كان لديك أي أسئلة حول العملية، فسأكون سعيدًا للمساعدة.
نقل سعيد ![]()


