دليل النشر

استضافة Listmonk على خادمك الافتراضي الخاص (VPS)

انشر على VPS Cloud ←

دليل عملي

استضافة Listmonk على خادمك الافتراضي الخاص (VPS)

الاستضافة الذاتية7 دقائق للقراءةعدد الخطوات: 6

Mailchimp وBrevo وأمثالها تفوتر لكل جهة اتصال وتضع سقفًا لإرسالاتك. يقلب Listmonk النموذج: مدير نشرات إخبارية مفتوح المصدر، مكتوب بلغة Go، قادر على إرسال ملايين الرسائل من بنيتك التحتية الخاصة. إليك كيفية تثبيته على خادم VPS وإعداده بعمق والحفاظ عليه على المدى الطويل.

المحتويات· لماذا تستضيف Listmonk ذاتيًا على خادم VPS1/10
  1. 01لماذا تستضيف Listmonk ذاتيًا على خادم VPS
  2. 02فوائد ملموسة لـListmonk المُستضاف ذاتيًا
  3. 03المتطلبات التقنية
  4. 04نشر Listmonk خطوة بخطوة
  5. 05الإعداد المتقدم: SMTP والقوائم والشرائح
  6. 06تحديث Listmonk
  7. 07استكشاف الأخطاء الشائعة
  8. 08RGPD وقوائم الإلغاء
  9. 09حالة استخدام: متجر إلكتروني مع بريد معاملاتي ونشرات إخبارية
  10. 10النسخ الاحتياطي وقابلية نقل البيانات

لماذا تستضيف Listmonk ذاتيًا على خادم VPS

Listmonk ملف تنفيذي (binary) واحد بلغة Go يعتمد على PostgreSQL، قادر على إدارة قوائم ضخمة وحملات مجزَّأة بمعدل إرسال مرتفع جدًا. تصبح الاستضافة الذاتية مجدية بمجرد أن تتجاوز قاعدة المشتركين لديك بضعة آلاف من جهات الاتصال: إذ تفوتر منصّات SaaS حينها مئات اليوروهات شهريًا مقابل مهمة ينفّذها خادم VPS متواضع بسعر الخادم فقط. تحتفظ بالملكية الكاملة لقاعدة بريدك الإلكتروني (دون أي تسريب لطرف ثالث)، وتربط مُرحِّل SMTP الذي تختاره، وتتحكم بوتيرة الإرسال للحفاظ على سمعتك كمُرسِل. وخادم VPS لا غنى عنه هنا لأن Listmonk يحتاج إلى عملية دائمة وقاعدة بيانات PostgreSQL ومنافذ SMTP صادرة مفتوحة — وهي حرّيات لا تمنحها أي استضافة مشتركة.

فوائد ملموسة لـListmonk المُستضاف ذاتيًا

  • لا تكلفة لكل جهة اتصال: لم تعد الفاتورة تعتمد على حجم قائمتك بل على الخادم VPS فقط.
  • تجزئة عبر استعلامات SQL: استهدف مجموعات فرعية من المشتركين بدقة يتعذّر تحقيقها على معظم منصّات SaaS.
  • قوالب غنية (Go templates + HTML) وحملات A/B قابلة لحفظ الإصدارات في مستودعك.
  • واجهة REST برمجية كاملة: شغّل الإرسالات المعاملاتية (transactional) من تطبيقك عبر webhook.
  • تتبّع عمليات الفتح والنقر والارتداد (bounces) في واجهة موحّدة، دون بكسل طرف ثالث.
  • حرية اختيار المُرحِّل (Postmark أو Amazon SES أو OVH أو Postfix الخاص بك) لتحسين قابلية التسليم والتكلفة.

المتطلبات التقنية

Listmonk نفسه خفيف جدًا، لكن PostgreSQL وحجم الإرسال يفرضان تحجيمًا معقولًا: خصّص 2 vCPU و2 غيغابايت من RAM و20 غيغابايت من القرص لقاعدة تضمّ بضع عشرات الآلاف من جهات الاتصال؛ وارفعها إلى 4 غيغابايت من RAM إذا كنت تدير حملات متزامنة ضخمة. على جانب البنية التحتية: Docker وDocker Compose، ونطاق mail.yourdomain.com بسجل A إلى الخادم VPS، وقبل كل شيء سجلات DNS لمصادقة البريد الإلكتروني (SPF وDKIM وDMARC) مضبوطة على نطاق الإرسال. ويلزم مُرحِّل SMTP بمعرّفات (host، منفذ 587، user، كلمة مرور) — إذ كثيرًا ما يحظر المزوّدون الإرسال المباشر من عنوان IP خاص بخادم VPS.

نشر Listmonk خطوة بخطوة

  1. جلب المكدّس الرسمي

    على الخادم VPS، أنشئ /opt/listmonk ثم نزّل ملف compose المرجعي: curl -LO https://raw.githubusercontent.com/knadh/listmonk/master/docker-compose.yml. يعلن خدمتين، app (listmonk) وdb (PostgreSQL).

  2. تهيئة قاعدة البيانات

    شغّل الترحيل الأولي قبل التشغيل الأول: docker compose run --rm app ./listmonk --install. ينشئ هذا الأمر مخطّط PostgreSQL والمستخدم المسؤول. أدخِل كلمة مرور مسؤول قوية عند الطلب.

  3. بدء تشغيل الخدمة

    شغّل المكدّس بـdocker compose up -d. يستمع Listmonk على المنفذ 9000 داخليًا. تحقّق من حالة الحاويات بـdocker compose ps وراجِع السجلات عند الحاجة.

  4. إعداد الوكيل العكسي وSSL

    اعرض Listmonk خلف وكيل عكسي مع HTTPS. مثال Caddy: mail.yourdomain.com { reverse_proxy app:9000 }. تُولَّد شهادة Let's Encrypt تلقائيًا. لا تنشر المنفذ 9000 مباشرةً على الإنترنت أبدًا.

  5. توصيل مُرحِّل SMTP

    من Settings > SMTP، أدخِل معطيات مُرحِّلك (host، منفذ 587، المعرّفات، TLS مُفعَّل). أرسل رسالة اختبار من الواجهة للتحقق من الاتصال قبل أي حملة.

  6. تأمين قابلية التسليم

    تحقّق بأداة خارجية من أن SPF وDKIM وDMARC تظهر خضراء على نطاق إرسالك. ابدأ بحملات صغيرة «لتسخين» عنوان IP الخاص بالمُرحِّل، وراقِب معدّل الارتداد (bounce) في لوحة التحكم.

الإعداد المتقدم: SMTP والقوائم والشرائح

يدعم Listmonk عدة خوادم SMTP في آنٍ واحد: أنشئ خادمًا مخصصًا للإرسالات المعاملاتية (تأكيدات، كلمات المرور المنسية) وآخر للحملات التسويقية، لكل منهما معرّفاته وحدود معدّله الخاصة. لإدارة الارتدادات تلقائيًا، فعّل Bounce Processor في Settings > Bounces: يستطلع Listmonk صندوق IMAP (أو webhook من مُرحِّلك) ويلغي اشتراك العناوين غير الصالحة دون تدخل يدوي.

بالنسبة للقوائم، فضّل double opt-in (Settings > Lists > Opt-in): تُرسَل رسالة تأكيد لكل مشترك جديد، مما يحمي سمعتك ويلتزم باللائحة الأوروبية لحماية البيانات (RGPD). تعتمد الشرائح الديناميكية (Lists > New segment) على استعلامات SQL مباشرة على جدول المشتركين: مثلًا attribs->>'plan' = 'pro' AND created_at > NOW() - INTERVAL '30 days' لاستهداف العملاء المميزين الجدد. تُمرَّر هذه السمات المخصصة عند الاشتراك عبر API (POST /api/subscribers) في حقل attribs (كائن JSON حر).

تحديث Listmonk

قبل أي تحديث، احتفظ بنسخة احتياطية من قاعدة البيانات: docker exec listmonk_db_1 pg_dump -U listmonk listmonk > backup-before-update.sql. ثم أوقف المكدّس، وانزّل الصورة الجديدة، ونفّذ سكريبت الترحيل:

docker compose down
docker compose pull
docker compose run --rm app ./listmonk --upgrade
docker compose up -d

يطبّق خيار --upgrade ترحيلات المخطط اللازمة بين الإصدارات. راجع سجل التغييرات في المستودع الرسمي قبل الانتقال بين الإصدارات الرئيسية: بعض الترحيلات لا رجعة منها. بمجرد إعادة تشغيل الخدمة، تحقق من الواجهة وأرسل بريدًا إلكترونيًا اختباريًا للتأكد من أن كل شيء يعمل.

استكشاف الأخطاء الشائعة

رفض الاتصال بـSMTP — connection refused على المنفذ 587. معظم مزودي VPS يحجبون منافذ SMTP الصادرة (25، 465، 587) لمكافحة البريد العشوائي. الحل: استخدام مُرحِّل SMTP خارجي (Postmark أو Amazon SES أو Brevo في وضع relay) يخرج تراكمه عبر HTTPS API أو منفذ مصرّح به. تحقق أيضًا من تفعيل TLS على جانب Listmonk (STARTTLS للمنفذ 587).

قاعدة PostgreSQL غير متاحة عند البدء — dial tcp db:5432: connect: connection refused. تبدأ الحاوية app قبل أن يكون PostgreSQL جاهزًا. أضف توجيه depends_on مع condition: service_healthy في ملف docker-compose.yml، أو انتظر بضع ثوانٍ قبل إعادة التشغيل: docker compose restart app.

502 Bad Gateway مع Caddy. الحاوية Listmonk لا تعمل أو تعطّلت. تحقق بـdocker compose ps: إذا كانت app في حالة Exited، شغّل docker compose logs app لتحديد الخطأ، ثم docker compose up -d لإعادة تشغيلها.

استيراد CSV متوقف أو مشتركون مفقودون. يشترط Listmonk ملف CSV مشفّرًا بـUTF-8 دون BOM، مع عمود email على الأقل. قد يحتوي ملف مُصدَّر من Excel على BOM (علامة غير مرئية في بداية الملف) أو ترميز Windows-1252: حوّله بـiconv -f WINDOWS-1252 -t UTF-8 list.csv > list-utf8.csv قبل الاستيراد.

اضبط حدّ معدّل الإرسال (Settings > Performance > max concurrent connections وmessage rate) وفق حصص مُرحِّل SMTP الخاص بك. الإرسال المفرط في العدوانية يرفع معدّل السبام والرفض. وبالنسبة للرسائل المعاملاتية الحرجة، أنشئ خادم بريد ثانيًا في Listmonk مخصّصًا لتلك الإرسالات، منفصلًا عن الخادم التسويقي: بذلك لا تؤثّر مشكلة سمعة على النشرات الإخبارية في رسائل التأكيد لديك.

RGPD وقوائم الإلغاء

يحتفظ Listmonk تلقائيًا بقائمة الإلغاء (unsubscribes + الارتدادات الصعبة). للالتزام باللائحة الأوروبية لحماية البيانات (RGPD)، فعّل double opt-in على جميع قوائمك العامة واضبط صفحة إلغاء الاشتراك بوجود رابط {{ UnsubscribeURL }} في كل قالب. تبقى بيانات المشتركين الملغين في قاعدة البيانات (لتفادي إعادة الاشتراك العرضية) لكنها تُعلَّم بـblocklisted: لا يتلقون أي إرسال بعد ذلك. صدّر هذه الإدخالات وامسحها بانتظام إذا كانت هيئة حماية البيانات لديك تتطلب ذلك.

حالة استخدام: متجر إلكتروني مع بريد معاملاتي ونشرات إخبارية

تخيّل متجر PrestaShop أو WooCommerce مستضافًا ذاتيًا على VPS ServOrbit. اضبط Listmonk كمحرك البريد المركزي: تأكيدات الطلبات وإشعارات الشحن تمر عبر API المعاملاتية؛ العملاء المشتركون في النشرة يتلقون حملة أسبوعية. خادم SMTP واحد، منصة واحدة، صفر رسوم لكل مشترك.

النسخ الاحتياطي وقابلية نقل البيانات

تخزّن Listmonk كل البيانات في PostgreSQL (وحدة تخزين Docker listmonk-db). للنسخ الاحتياطي: docker exec listmonk_db_1 pg_dump -U listmonk listmonk > backup.sql. تتيح REST API أيضًا تصدير المشتركين كـCSV في أي وقت.

استعِد السيطرة على نشراتك الإخبارية

مع خادم ServOrbit Cloud VPS وقالب Listmonk المُهيَّأ مسبقًا (PostgreSQL والوكيل العكسي مشمولان)، أرسل حملاتك دون سقف لجهات الاتصال ودون اشتراك شهري. تحتفظ بقاعدة بياناتك، وتختار مُرحِّلك.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة