تطوير الويب

تثبيت MongoDB 8 على Linux وإنشاء عنقود Atlas: دليل مقارن

4 min de lecture

دفع MongoDB 8 إلى الإنتاج يفتح طريقين: الاستضافة الذاتية على VPS أوبونتو (Community Edition مجانية) أو الطريق المُدار MongoDB Atlas (عنقود يُنشَأ في عشر دقائق، خطّة M0 مجانية مدى الحياة). يقودان إلى نفس البروتوكول، نفس الـ API، نفس المُشغّلات — لكنّهما يتباعدان في الكلفة، الجهد التشغيلي، وحدود المسؤولية. يشرح هذا الدليل كلّ طريق من البداية إلى النهاية على MongoDB 8.0 LTS، يقارن الكلف الواقعية، ويُقدّم شبكة قرار للاختيار دون ندم.

المتطلّبات

  • لطريق الاستضافة الذاتية: VPS بنظام Ubuntu 22.04 LTS (jammy) أو 24.04 LTS (noble)، وصول root، ذاكرة 2 جيغا كحدّ أدنى.
  • لطريق Atlas: عنوان بريد إلكتروني و10 دقائق — لا حاجة إلى بطاقة بنكية للمستوى المجاني.
  • mongosh 2.x مثبَّت محلّيًّا لاختبارات الاتّصال.
  • الوقت المتوقّع: 90 دقيقة لاستكمال الخطوات التسع للطريقين.

الخطوة 1 — الاختيار بين self-hosted وAtlas

الخياران يستجيبان للحاجة التقنية نفسها لكن بقيود تشغيلية مختلفة. self-hosted يتطلّب مهارة DBA أساسية: التثبيت، التأمين، النسخ الاحتياطي، المراقبة. في المقابل، تدفع ثمن VPS فقط — نمطيًّا 4 إلى 10 دولارات شهريًّا على Hetzner CX22 أو CPX21. Atlas يُخرج كلّ هذا: لا تثبيت، نسخ احتياطي مُضَمَّن، مراقبة مدمجة، دعم رسمي — لكنّ الفاتورة ترتفع بمجرّد الخروج من المستوى المجاني.

القاعدة العملية لـ 2026 في ثلاثة معايير. واحد: إن كان للتطبيق أقلّ من 50,000 مستخدم وحِمل معتدل، فـ Atlas M0 (مجاني) أو VPS بـ 5 دولارات يكفي — الاختيار حسب الخبرة المتاحة. اثنان: لـ MVP أو مشروع جانبي، Atlas M0 يُلغي الاحتكاك ويُسرّع التطوير. ثلاثة: لمنتج في نموّ مع فريق تقني متين، تصير الاستضافة الذاتية تنافسية: حتى عنقود على ثلاثة VPS Hetzner مع replica set أقلّ كلفة من Atlas M20.

الخطوة 2 — تثبيت MongoDB 8 على Ubuntu 22.04 (jammy)

على Ubuntu 22.04 LTS، الإجراء الرسمي يستعمل مستودع APT موقَّعًا من MongoDB Inc. مفتاح GPG يُعرِّف المستودع، سطر sources.list.d يُخبر النظام بمكانه، ثم apt install mongodb-org يُثبّت الحزم mongod وmongosh وmongodump وmongorestore في خطوة واحدة.

# استيراد مفتاح GPG لـ MongoDB 8.0
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc \
  | sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor

# إضافة مستودع APT لـ Ubuntu 22.04 (jammy)
echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg] \
https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse" \
  | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

# التثبيت والإقلاع
sudo apt update
sudo apt install -y mongodb-org
sudo systemctl enable --now mongod

# التحقّق من الإصدار
mongosh --eval "db.version()"
# المتوقّع: "8.0.x"

خرج mongosh --eval "db.version()" يجب أن يُظهر إصدارًا 8.0.x — وقت التحرير، آخر patch منشور هو 8.0.23، الذي يشمل تصحيحات الأمن المنشورة في مايو 2026. تستمع الخدمة على 127.0.0.1:27017 افتراضيًّا، البيانات في /var/lib/mongodb، السجلّات في /var/log/mongodb/mongod.log.

الخطوة 3 — تثبيت MongoDB 8 على Ubuntu 24.04 (noble)

الفرق بين Ubuntu 22.04 و24.04 كلمة واحدة في سطر مستودع APT: jammy تُصبح noble. كلّ ما عداه — مفتاح GPG، الحزمة، الخدمة — متطابق. هذا الاستبدال البسيط هو السبب رقم 1 لأخطاء 404 Not Found لدى أوّل المُثبِّتين: ينسخون إجراء 22.04 على آلة 24.04 ويُرجع المستودع رمز 404 دون شرح صريح للسبب.

# مستودع APT لـ Ubuntu 24.04 (noble)
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" \
  | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

sudo apt update
sudo apt install -y mongodb-org
sudo systemctl enable --now mongod

تحقّق سريع: lsb_release -cs يُرجع noble على Ubuntu 24.04. إن رأيت هذه الكلمة، استعمل noble في سطر APT؛ إن رأيت jammy استعمل jammy. السطر الكامل في صفحة Install on Ubuntu من توثيق MongoDB Server الرسمي، تُحدَّث مع كلّ إصدار Ubuntu LTS.

الخطوة 4 — تفعيل التوثيق وbindIp

MongoDB المُثبَّت حديثًا يستمع على localhost دون توثيق — هذا متعمَّد لإتاحة الضبط الأوّلي، لكن يجب ألّا يبقى على هذا الحال لخادم يتعامل مع الشبكة. سيناريو التسريبات الكبرى « MongoDB exposed » (2017-2020) كان منشؤه غياب التوثيق مقترنًا بـ bindIp: 0.0.0.0.

# إنشاء مستخدم admin قبل تفعيل التوثيق
mongosh
> use admin
> db.createUser({
    user: "admin",
    pwd: passwordPrompt(),
    roles: [
      { role: "userAdminAnyDatabase", db: "admin" },
      { role: "readWriteAnyDatabase", db: "admin" }
    ]
  })
> exit

# تحرير /etc/mongod.conf — تفعيل auth وتحديد bindIp
sudo nano /etc/mongod.conf

# /etc/mongod.conf — الأقسام الحرجة
security:
  authorization: enabled

net:
  port: 27017
  bindIp: 127.0.0.1,10.0.0.42  # localhost + IP خاصّ VPC، أبدًا 0.0.0.0

أعد التشغيل بـ sudo systemctl restart mongod. منذ هذه اللحظة، يفرض كلّ اتّصال هويّة: mongosh -u admin --authenticationDatabase admin سيطلب كلمة السرّ. عميل بلا اعتماديّات يُرفَض بـ Authentication failed. الـ bindIp من جهته يحصر الاستماع على الواجهات المُسمّاة — الحزم الواصلة من واجهات أخرى يتجاهلها المحرّك حتى قبل التوثيق.

الخطوة 5 — إنشاء عنقود Atlas M0 (الطريق المُدار)

MongoDB Atlas هو المنصّة السحابية الرسمية لـ MongoDB Inc. خطّة M0، المجانية كلّيًّا، تُوفّر 512 ميغا تخزين، حتى 500 اتّصال متزامن، وتعمل على AWS أو Google Cloud أو Azure. هذا أسرع خيار للانطلاق: لا خادم تُثبّته، أمن افتراضي، نسخ احتياطي تلقائي.

خطوات يدوية على cloud.mongodb.com:

1. أنشئ حسابًا (بريد + كلمة سرّ أو SSO Google/GitHub).
2. Build a Cluster ← اختر M0 (مجاني).
3. المنطقة: AWS Frankfurt (eu-central-1) موصى بها لأوروبا والشرق الأوسط.
   زمن استجابة نموذجي من الرياض: 80 ms؛ من دبي: 90 ms؛ من الدار البيضاء: 60 ms.
4. سَمِّ العنقود (مثلًا "Cluster0") — الإنشاء في 1 إلى 3 دقائق.
5. Database Access ← Add New Database User
   - Authentication: SCRAM
   - Username: app_user
   - Password: ولِّد 24+ حرفًا عشوائيًّا
   - Roles: Read and write to any database (يكفي لـ MVP)
6. Network Access ← Add IP Address
   - للتطوير: "Add Current IP Address" (IP العام الحالي)
   - للإنتاج: IP الثابت لخادم التطبيق فقط
7. Connect ← Drivers ← انسخ connection string
   mongodb+srv://app_user:@cluster0.xxxxx.mongodb.net/?retryWrites=true&w=majority

الـ URI mongodb+srv:// يختلف عن الكلاسيكي mongodb:// بحلّ DNS: ينشر Atlas عقد replica set عبر سجلّات DNS SRV، ويكتشفها المُشغّل تلقائيًّا. لن تحتاج أبدًا إلى معرفة المضيفين فُرادى — وهذا ما يُتيح لـ Atlas نقل عنقود إلى منطقة أخرى دون كسر العملاء.

الخطوة 6 — اختبار الاتّصال بالبيئتين

بمجرّد ضبط الخادم (self-hosted أو Atlas)، أوّل ما يجب التحقّق منه أن عميلًا يستطيع الاتّصال وقراءة الإصدار. إن فشلت هذه الخطوة، لن يعمل شيء آخر — فلنعزلها من البداية.

# Self-hosted محلّي
mongosh "mongodb://admin@localhost:27017/?authSource=admin"
# يطلب كلمة السرّ تفاعليًّا

# Self-hosted بعيد عبر SSH tunnel (موصى به للتنقيح)
ssh -L 27017:localhost:27017 user@vps.example.io
# ثم في جلسة ثانية:
mongosh "mongodb://admin@localhost:27017/?authSource=admin"

# Atlas
mongosh "mongodb+srv://app_user@cluster0.xxxxx.mongodb.net/?retryWrites=true"
# يطلب كلمة السرّ تفاعليًّا

الخرج المتوقّع في كلّ حال: شعار يُبيّن إصدار الخادم (8.0.x)، ثم محثّ test> أو Atlas atlas-xxxxx-shard-0 [primary]> حسب البيئة. إن رأيت MongoNetworkError، افحص بالترتيب: الخدمة تعمل (systemctl status mongod لـ self-hosted)، المنفذ مفتوح (nc -zv host 27017)، التوثيق صحيح (سلسلة URI سليمة، كلمة سرّ بلا ترميز سيّء).

الخطوة 7 — مقارنة self-hosted وAtlas بالأرقام

شبكة القرار في جدول. الأرقام أدناه محدَّثة وقت التحرير (مايو 2026) وتعكس التسعير العامّ لـ MongoDB Atlas وHetzner Cloud؛ Atlas Serverless لم تُقارَن لأنّها تستهدف حالة استعمال مختلفة (أحمال ذروية، خمول متكرّر).

المعيار Self-hosted (Hetzner VPS) MongoDB Atlas
كلفة شهرية — مبتدئ VPS CX22: 4.49 €/شهر (2 vCPU، 4 جيغا) M0: 0 $ (512 ميغا)
كلفة شهرية — إنتاج خفيف VPS CPX31: 16.49 €/شهر M10 مخصَّص: ~57 USD/شهر
كلفة شهرية — إنتاج جدّي 3 عقد replica set: ~45 €/شهر M30 مخصَّص: ~390 USD/شهر
النسخ الاحتياطي ضبط يدوي (mongodump cron) Continuous backup + PITR مُضَمَّن منذ M10
التحديثات الصغرى تجدولها بنفسك Auto-Upgrade قابل للتهيئة
الإشراف المدمج Prometheus/Grafana تركّبه أنت Atlas Monitoring + alerting مُضَمَّن
Sharding يدوي، معقّد شفّاف، ببضع نقرات
Atlas Search / Vector Search غير متاح (Lucene على الجانب) مُضَمَّن منذ M0
المطابقة (SOC 2، ISO 27001) تُوَثّقها بنفسك شهادات يُقدّمها MongoDB

الخلاصة العملية. لـ MVP، Atlas M0 بلا منافس. لمنتج في نموّ بميزانية قاعدة بيانات حتى 50 دولارًا/شهر، الخيار يعتمد على الخبرة الداخلية — self-hosted أرخص لكنّه يستهلك الوقت. ما فوق ذلك، يصير Atlas أغلى محسوسًا، والفِرق المُجَهَّزة تُهاجر غالبًا إلى self-hosted على Kubernetes مع المُشغِّل الرسمي.

الخطوة 8 — استيراد أو تصدير البيانات بين البيئتين

سواء انتقلت من Atlas إلى self-hosted أو العكس، الطريقة المرجعية هي mongodump + mongorestore. الأدوات محايدة: تُصدّر dump BSON محمولًا، ثم تُعيد حقنه في مكان آخر دون انشغال بالإصدار الدقيق (شريطة البقاء في نفس الفرع الرئيسي 8.x).

# تصدير من Atlas إلى ملفّ محلّي
mongodump \
  --uri="mongodb+srv://user:pass@cluster0.xxxxx.mongodb.net/" \
  --db=ecom \
  --gzip \
  --archive=/tmp/ecom-atlas.gz

# استيراد إلى self-hosted (مع الحفاظ على الفهارس)
mongorestore \
  --uri="mongodb://admin@vps.example.io:27017/?authSource=admin" \
  --gzip \
  --archive=/tmp/ecom-atlas.gz

# تحقّق بعد الاستيراد
mongosh "mongodb://admin@vps.example.io:27017/?authSource=admin" \
  --eval 'use ecom; db.produits.countDocuments();'

ثلاث احتياطات يجب معرفتها. واحدة: mongodump ليس لقطة ذرّية على قاعدة شديدة النشاط — للاتساق التامّ، استعمل الخيار --oplog واستعد بـ --oplogReplay، أو نفِّذ الـ dump من secondary. اثنتان: المستخدمون والأدوار لا يُنقَلَون بـ mongodump افتراضيًّا؛ يجب إعادة إنشائهم في الهدف. ثلاث: لهجرات حيّة بلا توقّف، Atlas Live Migration (مجاني) أو mongosync من MongoDB Inc. يُتيحان تزامنًا مستمرًّا قبل التبديل النهائي.

الخطوة 9 — قائمة فحص الإنتاج

  • MongoDB 8.0 LTS مثبَّت عبر المستودع الرسمي (jammy لـ 22.04، noble لـ 24.04).
  • security.authorization: enabled في /etc/mongod.conf.
  • مستخدم admin مُنشأ ثم إعادة تشغيل الخدمة.
  • bindIp محدود بـ 127.0.0.1 أو الـ IP الخاصّ للشبكة الداخلية، أبدًا 0.0.0.0 دون جدار ناريّ صارم.
  • مستخدم تطبيقي مُنشأ بدور readWrite محصور بقاعدة واحدة.
  • لـ Atlas: Database User بـ SCRAM، Network Access محصور بـ IPs التطبيق.
  • replica set مُهَيَّأ (3 عقد كحدّ أدنى) لتفعيل المعاملات.
  • نسخ احتياطي mongodump مُجَدوَل في cron (self-hosted)، أو Continuous Backup مُفَعَّل (Atlas M10+).
  • اختبار mongorestore مُثبَت على VM أو Atlas منفصل — نسخ غير مُختَبر ليس نسخًا.
  • تنبيهات مُهَيَّأة على مساحة القرص، زمن الاستعلامات، تأخّر النسخ.

الأخطاء الشائعة

الخطأ السبب الحلّ
404 Not Found عند apt update مستودع jammy على Ubuntu 24.04 أو العكس افحص lsb_release -cs وكيِّف سطر APT
Authentication failed بعد تفعيل auth مستخدم admin لم يُنشأ قبل إعادة التشغيل أقلِع بـ --auth-disabled مؤقّتًا، أنشئ admin، أعد التفعيل
Atlas connection refused IP التطبيق ليس في Network Access أضف الـ IP في Network Access (أو 0.0.0.0/0 للتطوير فقط)
URI SRV لم تُحلّ (Python) pymongo مثبَّت دون extra DNS pip install pymongo[srv] لتفعيل حلّ SRV
الخدمة لا تُقلِع بعد تعديل conf YAML بمحاذاة سيّئة في mongod.conf مسافتان إلزاميتان، لا tab؛ journalctl -u mongod يُظهر السطر المُخطئ

الأسئلة الشائعة

س: هل Atlas M0 يكفي للإنتاج؟
ج: لـ MVP بأقلّ من 500 مستخدم نشط، نعم. M0 على عنقود مشترك مع مستأجرين آخرين، ممّا يحدّ من الإنتاجية. عند أوّل إشارة إنتاج جدّي (أحمال منتظمة، بيانات حرجة)، انتقل إلى M10 مخصَّص بحوالي 57 USD/شهر.

س: أيّ إصدار من MongoDB أختار في 2026؟
ج: 8.0 LTS، الصادر في أكتوبر 2024، مدعوم حتى أكتوبر 2029. الفرع 8.3 (مايو 2026) هو rapid release محصور بـ Atlas Auto-Upgrade، لا يُنصح به على self-hosted حيث يبقى 8.0 LTS الهدف المستقرّ.

س: Atlas والـ GDPR؟
ج: يُقدّم Atlas مناطق أوروبية (Frankfurt، Ireland، Paris، Stockholm) لحفظ البيانات داخل الاتحاد. MongoDB Inc. توقّع DPA (Data Processing Agreement) قياسي. للبيانات الحسّاسة، فعِّل Client-Side Field Level Encryption (CSFLE) في المُشغّل.

س: Mongoose أم المُشغّل الأصلي للبدء؟
ج: Mongoose إن أردت مخطّطًا مُكَتَّبًا، خطّافات، وتجربة قريبة من ORM Node. المُشغّل الأصلي إن كنت تتمسّك بالأداء الخامّ والتحكّم الدقيق في BSON. كلاهما يعملان مع أيّ عنقود (self-hosted أو Atlas).

س: كيف ننتقل من Atlas إلى self-hosted لاحقًا؟
ج: mongodump من Atlas، mongorestore إلى self-hosted، أعد إنشاء المستخدمين والأدوار في الهدف، بدِّل سلسلة الاتّصال التطبيقية. لـ zero downtime، استعمل mongosync في تزامن مستمرّ ثم بَدِّل.

للتعمّق

مقالات ذات صلة

Sponsoriser ce contenu

Cet emplacement est à vous

Position premium en fin d'article — c'est l'instant où les lecteurs sont le plus engagés. Réservez cet espace pour votre marque, votre formation ou votre offre.

Recevoir nos tarifs
Publicité