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.
Bashapt 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. تثبيت الخدمة وتشغيلها
Bashapt 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() كلمة المرور بحيث لا تظهر أبدًا في سجل أوامر الصدفة.
Bashmongosh
JavaScript1use admin 2db.createUser({ 3 user: 'admin', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'userAdminAnyDatabase', db: 'admin' }, 'readWriteAnyDatabase' ] 6})
4. تفعيل المصادقة
حرّر الملف /etc/mongod.conf وأضف كتلة security (أو أزل التعليق عنها):
YAMLsecurity: authorization: enabled
Bashsystemctl restart mongod
من الآن فصاعدًا يجب أن يمرّ كل اتصال بالمصادقة.
5. إنشاء مستخدم للتطبيق
يجب ألا يستخدم تطبيقك حساب المسؤول أبدًا. امنحه مستخدمًا مقيّدًا بقاعدة بياناته الخاصة فقط.
Bashmongosh -u admin -p --authenticationDatabase admin
JavaScript1use 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:
YAMLnet: port: 27017 bindIp: 127.0.0.1,VPS_IP
ثم اسمح في جدار الحماية لخادم التطبيق وحده، ولا تفتح المنفذ 27017 أبدًا لكامل الإنترنت:
Bashufw allow OpenSSH ufw allow from APP_SERVER_IP to any port 27017 proto tcp ufw enable systemctl restart mongod
✅ التحقق من التثبيت
Bashmongod --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 وتأمينه بالمصادقة، وهو جاهز لتطبيقك!