استضافة ذاتية

البدء

حل البريد الإلكتروني المُستضاف ذاتيًا لدينا، كجميع منتجاتنا، مفتوح المصدر بنسبة 100%، سواءً من حيث الواجهة الأمامية أو الخلفية. هذا يعني:

١. شفافية كاملة: كل سطر من التعليمات البرمجية التي تُعالج رسائل بريدك الإلكتروني متاح للمراجعة العامة. ٢. مساهمات المجتمع: يمكن لأي شخص المساهمة في التحسينات أو إصلاح المشكلات. ٣. الأمان من خلال الانفتاح: يمكن تحديد الثغرات الأمنية وإصلاحها من قِبل مجتمع عالمي. ٤. لا يوجد احتكار للموردين: لن تعتمد أبدًا على وجود شركتنا.

يتوفر الكود الأساسي بأكمله على GitHub في https://github.com/forwardemail/forwardemail.net, مرخصًا بموجب ترخيص MIT.

تتضمن الهندسة المعمارية حاويات لـ:

  • خادم SMTP للبريد الصادر
  • خوادم IMAP/POP3 لاسترجاع البريد الإلكتروني
  • واجهة ويب للإدارة
  • قاعدة بيانات لتخزين الإعدادات
  • Redis للتخزين المؤقت وتحسين الأداء
  • SQLite لتخزين آمن ومشفّر لصناديق البريد

Note

تأكد من الاطلاع على مدونة ذاتية الاستضافة

ولمن يرغب في الحصول على نسخة أكثر تفصيلاً خطوة بخطوة، يُرجى الاطلاع على أدلتنا المستندة إلى أوبونتو أو ديبيان.

متطلبات

قبل تشغيل البرنامج النصي للتثبيت، تأكد من أن لديك ما يلي:

  • نظام التشغيل: خادم يعمل بنظام لينكس (يدعم حاليًا أوبونتو 22.04 وما فوق).
  • الموارد: وحدة معالجة مركزية افتراضية واحدة وذاكرة وصول عشوائي (RAM) سعة 2 غيغابايت.
  • صلاحيات الجذر: صلاحيات إدارية لتنفيذ الأوامر.
  • اسم النطاق: نطاق مخصص جاهز لتكوين DNS.
  • عنوان IP نظيف: تأكد من أن خادمك يمتلك عنوان IP نظيفًا وخاليًا من أي سجل بريد عشوائي سابق من خلال التحقق من القوائم السوداء. لمزيد من المعلومات، يُرجى زيارة هنا.
  • عنوان IP عام يدعم المنفذ 25.
  • إمكانية تعيين عكس PTR.
  • دعم IPv4 وIPv6.

Cloud-init / بيانات المستخدم

يدعم معظم مزودي الخدمات السحابية تهيئة cloud-init عند تجهيز الخادم الافتراضي الخاص (VPS). تُعد هذه طريقة رائعة لضبط بعض الملفات ومتغيرات البيئة مسبقًا لاستخدامها في منطق الإعداد الأولي للنصوص البرمجية، مما يُغني عن طلب معلومات إضافية أثناء تشغيل النص البرمجي.

خيارات

  • EMAIL - البريد الإلكتروني المستخدم لتذكيرات انتهاء صلاحية certbot
  • DOMAIN - نطاق مخصص (مثل example.com) يُستخدم لإعداد الاستضافة الذاتية
  • AUTH_BASIC_USERNAME - اسم المستخدم المستخدم في الإعداد الأول لحماية الموقع
  • AUTH_BASIC_PASSWORD - كلمة المرور المستخدمة في الإعداد الأول لحماية الموقع
  • /root/.cloudflare.ini - (لمستخدمي Cloudflare فقط) ملف تكوين Cloudflare يستخدمه certbot لتكوين DNS. يتطلب منك تعيين رمز API الخاص بك عبر dns_cloudflare_api_token. اقرأ المزيد عن هنا.

مثال:

#cloud-config
write_files:
  - path: /root/.cloudflare.ini
    content: |
      dns_cloudflare_api_token = "xxx"
    owner: root:root
    permissions: '0600'
  - path: /etc/profile.d/env.sh
    content: |
      export EMAIL="test@myemail.com"
      export DOMAIN="mydomain.com"

runcmd:
  - chmod +x /etc/profile.d/env.sh

تثبيت

قم بتشغيل الأمر التالي على الخادم الخاص بك لتنزيل البرنامج النصي للتثبيت وتنفيذه:

bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)

نص برمجي للتثبيت التصحيحي

أضف DEBUG=true أمام البرنامج النصي للتثبيت للحصول على إخراج مفصل:

DEBUG=true bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)

مطالبات

1. Initial setup
2. Setup Backups
3. Setup Auto Upgrades
4. Renew certificates
5. Restore from Backup
6. Help
7. Exit
  • الإعداد الأولي: نزّل أحدث رمز لإعادة توجيه البريد الإلكتروني، وقم بتكوين البيئة، واطلب نطاقك المخصص، وقم بإعداد جميع الشهادات والمفاتيح والأسرار اللازمة.
  • إعداد النسخ الاحتياطي: سيتم إعداد مهمة دورية لنسخ mongoDB وredis احتياطيًا باستخدام مخزن متوافق مع S3 للتخزين الآمن عن بُعد. بشكل منفصل، سيتم نسخ sqlite احتياطيًا عند تسجيل الدخول في حال وجود تغييرات في النسخ الاحتياطية الآمنة والمشفرة.
  • ترقية الإعداد: قم بإعداد مهمة دورية للبحث عن تحديثات ليلية لإعادة بناء مكونات البنية التحتية وإعادة تشغيلها بأمان.
  • تجديد الشهادات: يُستخدم Certbot / lets encrypt لشهادات SSL، وستنتهي صلاحية المفاتيح كل 3 أشهر. سيؤدي هذا إلى تجديد شهادات نطاقك ووضعها في المجلد المطلوب لاستخدام المكونات ذات الصلة. انظر مسارات الملفات المهمة
  • الاستعادة من النسخة الاحتياطية: سيتم تشغيل mongoDB وredis لاستعادة بيانات النسخة الاحتياطية.

الإعداد الأولي (الخيار 1)

اختر الخيار 1. Initial setup للبدء.

بعد اكتمال العملية، ستظهر لك رسالة نجاح. يمكنك أيضًا تشغيل الأمر docker ps لمشاهدة تشغيل المكونات. للمزيد من المعلومات حول المكونات، يُرجى الاطلاع أدناه.

خدمات

اسم الخدمة المنفذ الافتراضي وصف
الويب 443 واجهة ويب لجميع تفاعلات الإدارة
API 4000 طبقة API لتجريد قواعد البيانات
بري لا أحد وظيفة الخلفية ومشغل المهام
SMTP 465/587 خادم SMTP للبريد الإلكتروني الصادر
SMTP بري لا أحد وظيفة خلفية SMTP
MX 2525 تبادل البريد للبريد الإلكتروني الوارد وإعادة توجيه البريد الإلكتروني
IMAP 993/2993 خادم IMAP لإدارة البريد الإلكتروني الوارد وصندوق البريد
POP3 995/2995 خادم POP3 لإدارة البريد الإلكتروني الوارد وصندوق البريد
SQLite 3456 خادم SQLite للتفاعلات مع قواعد بيانات sqlite
SQLite بري لا أحد وظيفة خلفية SQLite
كالداف 5000 خادم CalDAV لإدارة التقويم
بطاقة داف 6000 خادم CardDAV لإدارة التقويم
مونغو دي بي 27017 قاعدة بيانات MongoDB لإدارة معظم البيانات
ريديس 6379 Redis للتخزين المؤقت وإدارة الحالة
SQLite لا أحد قاعدة بيانات SQLite لصناديق البريد المشفرة

مسارات الملفات المهمة

ملاحظة: مسار المضيف أدناه نسبي إلى /root/forwardemail.net/self-hosting/.

عنصر مسار المضيف مسار الحاوية
مونغو دي بي ./mongo-backups /backups
ريديس ./redis-data /data
سكليت ./sqlite-data /mnt/{SQLITE_STORAGE_PATH}
ملف البيئة ./.env /app/.env
شهادات/مفاتيح SSL ./ssl /app/ssl/
مفتاح خاص ./ssl/privkey.pem /app/ssl/privkey.pem
شهادة السلسلة الكاملة ./ssl/fullchain.pem /app/ssl/fullchain.pem
السلطات التصديق المعتمدة ./ssl/cert.pem /app/ssl/cert.pem
مفتاح DKIM الخاص ./ssl/dkim.key /app/ssl/dkim.key

Important

احفظ ملف .env بأمان. فهو ضروري للاستعادة في حال حدوث أي عطل. يمكنك العثور عليه في /root/forwardemail.net/self-hosting/.env.

تكوين

إعداد DNS الأولي

في مزوّد DNS الذي تختاره، قم بتكوين سجلات DNS المناسبة. يُرجى ملاحظة أن أي شيء بين قوسين (<>) ديناميكي ويحتاج إلى تحديث بالقيمة التي اخترتها.

يكتب اسم محتوى TTL
A "@"، "."، أو فارغ <عنوان IP> آلي
CNAME واجهة برمجة التطبيقات <اسم_النطاق> آلي
CNAME كالداف <اسم_النطاق> آلي
CNAME كارداف <اسم_النطاق> آلي
CNAME ارتدادات في <اسم_النطاق> آلي
CNAME IMAP <اسم_النطاق> آلي
CNAME مكس <اسم_النطاق> آلي
CNAME بوب 3 <اسم_النطاق> آلي
CNAME بروتوكول نقل البريد الإلكتروني <اسم_النطاق> آلي
MX "@"، "."، أو فارغ mx.<domain_name> (الأولوية 0) آلي
TXT "@"، "."، أو فارغ "v=spf1 a -الكل" آلي

سجل DNS/PTR عكسي

يُعدّ نظام DNS العكسي (rDNS) أو سجلات المؤشر العكسي (PTR) أساسيًا لخوادم البريد الإلكتروني، إذ يُساعدان في التحقق من صحة الخادم المُرسِل للبريد الإلكتروني. يختلف أسلوب كل مُزوّد خدمة سحابية في هذا الشأن، لذا ستحتاج إلى البحث عن كيفية إضافة "نظام DNS العكسي" لربط المُضيف وعنوان IP باسم المُضيف المُقابل. غالبًا ما تجد ذلك في قسم الشبكات لدى المُزوّد.

المنفذ 25 محظور

يحظر بعض مزودي خدمة الإنترنت وموفري الخدمات السحابية المنفذ ٢٥ لتجنب أي محاولات اختراق. قد تحتاج إلى تقديم طلب دعم لفتح المنفذ ٢٥ لـ SMTP/البريد الإلكتروني الصادر.

عملية التوجيه

١. افتح صفحة الوصول انتقل إلى https://<domain_name>، مع استبدال <domain_name> بالنطاق المُهيأ في إعدادات DNS. ستظهر لك صفحة إعادة توجيه البريد الإلكتروني.

  1. تسجيل الدخول وإضافة نطاقك
  • سجّل الدخول باستخدام بريد إلكتروني وكلمة مرور صالحين.
  • أدخل اسم النطاق الذي ترغب بإعداده (يجب أن يتطابق مع إعدادات DNS).
  • اتبع التعليمات لإضافة سجلي MX وTXT المطلوبين للتحقق.
  1. إكمال الإعداد
  • بعد التحقق، انتقل إلى صفحة الأسماء المستعارة لإنشاء اسمك المستعار الأول.
  • اختياريًا، يمكنك تكوين SMTP للبريد الإلكتروني الصادر في إعدادات النطاق. يتطلب هذا سجلات DNS إضافية.

Note

لا يتم إرسال أي معلومات خارج خادمك. خيار الاستضافة الذاتية والحساب الأولي مخصصان فقط لتسجيل دخول المسؤول وعرض الويب لإدارة النطاقات والأسماء المستعارة وتكوينات البريد الإلكتروني ذات الصلة.

اختبار

إنشاء الاسم المستعار الأول الخاص بك

١. انتقل إلى صفحة الأسماء المستعارة افتح صفحة إدارة الأسماء المستعارة:

https://<domain_name>/en/my-account/domains/<domain_name>/aliases
  1. إضافة اسم مستعار جديد
  • انقر على إضافة اسم مستعار (أعلى اليمين).
  • أدخل اسم الاسم المستعار وعدّل إعدادات البريد الإلكتروني حسب الحاجة.
  • (اختياري) فعّل دعم IMAP/POP3/CalDAV/CardDAV بتحديد مربع الاختيار.
  • انقر على إنشاء اسم مستعار.
  1. تعيين كلمة مرور
  • انقر على إنشاء كلمة مرور لإنشاء كلمة مرور آمنة.
  • ستحتاج إلى كلمة المرور هذه لتسجيل الدخول إلى عميل البريد الإلكتروني الخاص بك.
  1. قم بتكوين عميل البريد الإلكتروني الخاص بك
  • استخدم برنامج بريد إلكتروني مثل Thunderbird.
  • أدخل اسم المستخدم المستعار وكلمة المرور المُولّدة.
  • اضبط إعدادات IMAP وSMTP وفقًا لذلك.

إعدادات خادم البريد الإلكتروني

اسم المستخدم: <alias name>

يكتب اسم المضيف ميناء أمان الاتصال المصادقة
SMTP smtp.<اسم_النطاق> 465 SSL / TLS كلمة المرور العادية
IMAP imap.<اسم_النطاق> 993 SSL / TLS كلمة المرور العادية

إرسال/استلام بريدك الإلكتروني الأول

بمجرد التكوين، يجب أن تكون قادرًا على إرسال واستقبال البريد الإلكتروني إلى عنوان البريد الإلكتروني الذي أنشأته حديثًا والمستضاف ذاتيًا!

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

لماذا لا يعمل هذا خارج Ubuntu وDebian؟

نحن نتطلع حاليًا لدعم نظام MacOS وسنسعى لدعم أنظمة أخرى. يُرجى فتح مناقشة أو المساهمة إذا كنت ترغب في رؤية أنظمة أخرى مدعومة.

لماذا يفشل تحدي certbot acme؟

المشكلة الأكثر شيوعًا هي أن certbot / letsencrypt قد يطلبان أحيانًا تحديين. تأكد من إضافة كلا السجلين النصيين.

مثال: قد ترى تحديين كالتالي: _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"

من المحتمل أيضًا أن عملية نشر DNS لم تكتمل. يمكنك استخدام أدوات مثل: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>. سيمنحك هذا فكرة عما إذا كان ينبغي أن تنعكس تغييرات سجل TXT. من المحتمل أيضًا أن ذاكرة التخزين المؤقت المحلية لـ DNS على جهازك المضيف لا تزال تستخدم قيمة قديمة أو قديمة، أو أنها لم تلتقط التغييرات الأخيرة.

خيار آخر هو استخدام تغييرات DNS التلقائية من Cerbot عن طريق ضبط ملف /root/.cloudflare.ini باستخدام رمز API في ملف cloud-init / user-data عند إعداد VPS الأولي، أو إنشاء هذا الملف وتشغيل البرنامج النصي مرة أخرى. سيؤدي هذا إلى إدارة تغييرات DNS وتحديثات التحدي تلقائيًا.

ما هو اسم المستخدم وكلمة المرور الأساسيين للمصادقة؟

للاستضافة الذاتية، نضيف نافذة منبثقة للمصادقة التلقائية للمتصفح لأول مرة، باستخدام اسم مستخدم بسيط (admin) وكلمة مرور (يتم توليدها عشوائيًا عند الإعداد الأولي). نضيف هذا فقط كحماية في حال تأخرت عمليات الأتمتة/الاستخراج عن التسجيل لأول مرة على تجربة الويب. يمكنك العثور على كلمة المرور هذه بعد الإعداد الأولي في ملف .env ضمن AUTH_BASIC_USERNAME وAUTH_BASIC_PASSWORD.

كيف أعرف ما الذي يتم تشغيله

يمكنك تشغيل الأمر docker ps لرؤية جميع الحاويات قيد التشغيل التي يتم تشغيلها من ملف docker-compose-self-hosting.yml. كما يمكنك تشغيل الأمر docker ps -a لرؤية جميع الحاويات (بما في ذلك الحاويات غير العاملة).

كيف يمكنني معرفة ما إذا كان هناك شيء لا يعمل والذي يجب أن يكون

يمكنك تشغيل docker ps -a لرؤية كل شيء (بما في ذلك الحاويات التي لا تعمل). قد ترى سجل خروج أو ملاحظة.

كيف يمكنني العثور على السجلات

يمكنك الحصول على المزيد من السجلات عبر docker logs -f <container_name>. في حال ظهور أي شيء، فمن المرجح أن يكون ذلك بسبب تكوين ملف .env بشكل غير صحيح.

داخل واجهة المستخدم على الويب، يمكنك عرض /admin/emails و/admin/logs لسجلات البريد الإلكتروني الصادر وسجلات الأخطاء على التوالي.

لماذا تنتهي مهلة رسائل البريد الإلكتروني الصادرة الخاصة بي؟

إذا ظهرت لك رسالة مثل "انتهت مهلة الاتصال" عند الاتصال بخادم MX...، فقد تحتاج إلى التحقق مما إذا كان المنفذ 25 محظورًا. من الشائع أن يقوم مزودو خدمة الإنترنت أو مزودو الخدمات السحابية بحظر هذا بشكل افتراضي، وقد تحتاج إلى التواصل مع الدعم أو تقديم تذكرة لحل هذه المشكلة.

ما هي الأدوات التي يجب أن أستخدمها لاختبار أفضل ممارسات تكوين البريد الإلكتروني وسمعة IP؟

قم بإلقاء نظرة على الأسئلة الشائعة هنا الخاص بنا.