العربية

تثبيت MongoDB 8.0 وتأمينه على VPS بنظام Ubuntu 24.04

2 min
استضافة VPS/VDS

MongoDB قاعدة بيانات موجّهة للمستندات، شائعة في واجهات API وتطبيقات Node.js والتحليلات. لا يتضمنها Ubuntu في مستودعاته، لذا تُثبَّت من المستودع الرسمي لـ MongoDB. يعدّ هذا الدليل التثبيت على VPS Linux Infrawire، ويفعّل المصادقة ويحدّ من الجهات التي يمكنها الوصول.

📋 المتطلبات المسبقة

  • خادم VPS بنظام Ubuntu 24.04 (noble) على معمارية x86_64 أو ARM64 مع وصول SSH بصلاحيات root (عنوان IP وكلمة مرور root متاحان في منطقة العميل)
  • معالج يوفّر مجموعة تعليمات AVX (مطلوبة منذ MongoDB 5.0): يجب أن يُرجع الأمر grep -c avx /proc/cpuinfo رقمًا أكبر من 0
  • يُوصى بذاكرة لا تقل عن 2 جيجابايت

1. إضافة المستودع الرسمي

استورد مفتاح التوقيع وأعلن المستودع الخاص بـ Ubuntu 24.04.

Bash
apt update && apt install -y curl gnupg curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor echo 'deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse' > /etc/apt/sources.list.d/mongodb-org-8.0.list

2. تثبيت الخدمة وتشغيلها

Bash
apt update apt install -y mongodb-org systemctl enable --now mongod systemctl status mongod --no-pager

تثبّت الحزمة الشاملة mongodb-org الخادم (mongod) والصدفة (mongosh) والأدوات. توجد البيانات في /var/lib/mongodb والسجلات في /var/log/mongodb/mongod.log.

3. إنشاء المسؤول

المصادقة ما زالت معطّلة، لذا تتصل الصدفة المحلية دون بيانات اعتماد. أنشئ أول مسؤول في قاعدة admin؛ يطلب passwordPrompt() كلمة المرور بحيث لا تظهر أبدًا في سجل أوامر الصدفة.

Bash
mongosh
JavaScript
1use admin 2db.createUser({ 3 user: 'admin', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'userAdminAnyDatabase', db: 'admin' }, 'readWriteAnyDatabase' ] 6})

4. تفعيل المصادقة

حرّر الملف /etc/mongod.conf وأضف كتلة security (أو أزل التعليق عنها):

YAML
security: authorization: enabled
Bash
systemctl restart mongod

من الآن فصاعدًا يجب أن يمرّ كل اتصال بالمصادقة.

5. إنشاء مستخدم للتطبيق

يجب ألا يستخدم تطبيقك حساب المسؤول أبدًا. امنحه مستخدمًا مقيّدًا بقاعدة بياناته الخاصة فقط.

Bash
mongosh -u admin -p --authenticationDatabase admin
JavaScript
1use appdb 2db.createUser({ 3 user: 'appuser', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'readWrite', db: 'appdb' } ] 6})

سلسلة الاتصال المقابلة هي mongodb://appuser:PASSWORD@127.0.0.1:27017/appdb?authSource=appdb.

6. الوصول الشبكي وجدار الحماية

يستمع MongoDB افتراضيًا إلى 127.0.0.1 فقط، وهو الإعداد الأكثر أمانًا عندما يعمل التطبيق على الخادم نفسه. للسماح لخادم آخر، أضف عنوان الـ VPS في /etc/mongod.conf:

YAML
net: port: 27017 bindIp: 127.0.0.1,VPS_IP

ثم اسمح في جدار الحماية لخادم التطبيق وحده، ولا تفتح المنفذ 27017 أبدًا لكامل الإنترنت:

Bash
ufw allow OpenSSH ufw allow from APP_SERVER_IP to any port 27017 proto tcp ufw enable systemctl restart mongod

✅ التحقق من التثبيت

Bash
mongod --version mongosh --eval 'db.runCommand({ ping: 1 })' mongosh -u appuser -p --authenticationDatabase appdb appdb --eval 'db.test.insertOne({ ok: true })' ss -ltnp | grep 27017

يعرض الأمر الأخير العنوان الذي يستمع إليه MongoDB. يجب أن يفشل الآن أي استعلام دون مصادقة مثل db.getUsers() بخطأ تفويض.

🔧 استكشاف الأخطاء وإصلاحها

لا يبدأ mongod (Illegal instruction أو رمز الخروج 132) : المعالج الافتراضي لا يوفّر AVX. تحقق بالأمر grep avx /proc/cpuinfo؛ بدون AVX لا يمكن تشغيل MongoDB 8.0 على هذا الجهاز.

فشل البدء مع أخطاء أذونات : صحّح مالك ملفات البيانات والمقبس بالأمر chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb، واحذف ملف /tmp/mongodb-27017.sock القديم، ثم أعد التشغيل. تجد التفاصيل في journalctl -u mongod.

Authentication failed : أُنشئ المستخدم في قاعدة بيانات محددة. حدّد القاعدة الصحيحة عبر --authenticationDatabase (أو authSource في الرابط).

انتهاء مهلة الاتصال البعيد : تحقق من bindIp وقواعد ufw status ومن تطابق عنوان IP للعميل مع العنوان الذي سمحت به.


🎉 تم تثبيت MongoDB 8.0 وتأمينه بالمصادقة، وهو جاهز لتطبيقك!

ابقَ على اطلاع بأحدث العروض والخصومات والعروض الترويجية الخاصة.

عرض العروض الترويجية

نستخدم ملفات تعريف الارتباط

نستخدم كوكيز تحليلية لتحسين تجربتك. لا نبيع البيانات لأطراف ثالثة. المزيد في سياسة الخصوصية.