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

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

  1. الشفافية الكاملة:كل سطر من التعليمات البرمجية التي تعالج رسائل البريد الإلكتروني الخاصة بك متاح للتدقيق العام
  2. مساهمات المجتمع:يمكن لأي شخص المساهمة في التحسينات أو إصلاح المشكلات
  3. الأمن من خلال الانفتاح:يمكن تحديد نقاط الضعف وإصلاحها من قبل مجتمع عالمي
  4. لا يوجد حبس للبائع:أنت لا تعتمد أبدًا على وجود شركتنا

قاعدة التعليمات البرمجية بأكملها متاحة على GitHub على https://github.com/forwardemail/forwardemail.net، مرخصة بموجب ترخيص MIT.

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

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

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

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

[!TIP] اطلع على قائمتنا مزودي خدمة البريد الإلكتروني الرائعين

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="[email protected]"
      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 احتياطيًا عند تسجيل الدخول في حال وجود أي تغييرات على النسخ الاحتياطية الآمنة والمشفرة.
  • إعداد الترقية:إعداد cron للبحث عن التحديثات الليلية والتي ستعمل على إعادة بناء مكونات البنية الأساسية وإعادة تشغيلها بشكل آمن.
  • تجديد الشهاداتيُستخدم Certbot / lets encrypt لشهادات SSL، وتنتهي صلاحية مفاتيحه كل 3 أشهر. سيؤدي هذا إلى تجديد شهادات نطاقك ووضعها في المجلد المطلوب لاستخدام المكونات ذات الصلة. انظر مسارات الملفات المهمة
  • استعادة من النسخة الاحتياطية:سيؤدي ذلك إلى تشغيل mongodb و redis لاستعادة البيانات من النسخ الاحتياطي.

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

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

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

اسم الخدمةالمنفذ الافتراضيوصف
الويب443واجهة ويب لجميع تفاعلات الإدارة
API4000طبقة API لتجريد قواعد البيانات
بريلا أحدوظيفة الخلفية ومشغل المهام
SMTP465/587خادم SMTP للبريد الإلكتروني الصادر
SMTP بريلا أحدوظيفة خلفية SMTP
MX2525تبادل البريد للبريد الإلكتروني الوارد وإعادة توجيه البريد الإلكتروني
IMAP993/2993خادم IMAP لإدارة البريد الإلكتروني الوارد وصندوق البريد
POP3995/2995خادم POP3 لإدارة البريد الإلكتروني الوارد وصندوق البريد
سكليتي3456خادم SQLite للتفاعلات مع قواعد بيانات sqlite
SQLite بريلا أحدوظيفة خلفية SQLite
كالداف5000خادم CalDAV لإدارة التقويم
مونجو دي بي27017قاعدة بيانات MongoDB لإدارة معظم البيانات
ريديس6379Redis للتخزين المؤقت وإدارة الحالة
سكليتيلا أحدقاعدة بيانات 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

[!هام] احفظ .env ملفك بأمان. هذا ضروري لاستعادته في حال حدوث عطل.

يمكنك العثور على هذا في /root/forwardemail.net/self-hosting/.env.

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

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

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

سجل DNS / PTR العكسي

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

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

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

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

  2. تسجيل الدخول وإضافة المجال الخاص بك

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

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

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

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

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

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

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

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

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

لماذا لا يعمل هذا خارج أوبونتو

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

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

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

مثال: قد ترى تحديين كالتالي: _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 ملف يحتوي على رمز واجهة برمجة التطبيقات في ملف 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

ألق نظرة على الأسئلة الشائعة هنا.