الاستضافة الذاتية
البدء
حل البريد الإلكتروني المستضاف ذاتيًا لدينا، مثل جميع منتجاتنا، مفتوح المصدر بنسبة 100% — الواجهة الأمامية والخلفية. هذا يعني:
- شفافية كاملة: كل سطر من الكود الذي يعالج رسائلك الإلكترونية متاح للفحص العام
- مساهمات المجتمع: يمكن لأي شخص المساهمة في تحسينات أو إصلاح مشكلات
- الأمان من خلال الانفتاح: يمكن تحديد الثغرات وإصلاحها بواسطة مجتمع عالمي
- عدم الاعتماد على مزود واحد: أنت لست معتمدًا أبدًا على وجود شركتنا
كود المصدر الكامل متاح على GitHub على https://github.com/forwardemail/forwardemail.net، مرخص بموجب رخصة MIT.
تشمل البنية الحاويات لـ:
- خادم SMTP للبريد الصادر
- خوادم IMAP/POP3 لاسترجاع البريد الإلكتروني
- واجهة ويب للإدارة
- قاعدة بيانات لتخزين التكوين
- Redis للتخزين المؤقت والأداء
- SQLite لتخزين صناديق البريد المشفرة والآمنة
Note
تأكد من الاطلاع على مدونتنا الخاصة بالاستضافة الذاتية
وللمهتمين بنسخة أكثر تفصيلاً خطوة بخطوة، راجع أدلتنا الخاصة بـ أوبونتو أو ديبيان.
المتطلبات
قبل تشغيل نص التثبيت، تأكد من توفر ما يلي:
- نظام التشغيل: خادم يعمل بنظام لينكس (يدعم حاليًا أوبونتو 22.04+).
- الموارد: 1 وحدة معالجة افتراضية (vCPU) و2 جيجابايت من ذاكرة الوصول العشوائي
- صلاحيات الجذر: امتيازات إدارية لتنفيذ الأوامر.
- اسم النطاق: نطاق مخصص جاهز لتكوين DNS.
- IP نظيف: تأكد من أن عنوان IP الخاص بالخادم نظيف ولا يحمل سمعة بريد مزعج سابقة من خلال التحقق من القوائم السوداء. مزيد من المعلومات هنا.
- عنوان IP عام مع دعم المنفذ 25
- القدرة على تعيين PTR العكسي
- دعم IPv4 و IPv6
Tip
راجع قائمتنا لـ مزودي خوادم البريد الرائعين
Cloud-init / بيانات المستخدم
معظم مزودي السحابة يدعمون تكوين cloud-init عند تجهيز الخادم الافتراضي الخاص (VPS). هذه طريقة رائعة لإعداد بعض الملفات والمتغيرات البيئية مسبقًا لاستخدامها في منطق الإعداد الأولي للنص، مما يتجنب الحاجة إلى المطالبة بمعلومات إضافية أثناء تشغيل النص.
الخيارات
EMAIL- البريد الإلكتروني المستخدم لتذكيرات انتهاء صلاحية certbotDOMAIN- النطاق المخصص (مثلاً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. الإعداد الأولي
2. إعداد النسخ الاحتياطية
3. إعداد التحديثات التلقائية
4. تجديد الشهادات
5. الاستعادة من النسخة الاحتياطية
6. المساعدة
7. الخروج
- الإعداد الأولي: تحميل أحدث كود forward email، تكوين البيئة، طلب نطاقك المخصص وإعداد جميع الشهادات والمفاتيح والأسرار اللازمة.
- إعداد النسخ الاحتياطية: سيقوم بإعداد مهمة مجدولة لنسخ mongoDB و redis احتياطيًا باستخدام مخزن متوافق مع S3 للتخزين الآمن عن بُعد. بشكل منفصل، سيتم نسخ sqlite احتياطيًا عند تسجيل الدخول إذا كانت هناك تغييرات لضمان نسخ احتياطية آمنة ومشفرة.
- إعداد التحديثات: إعداد مهمة مجدولة للبحث عن تحديثات ليلية ستعيد بناء وإعادة تشغيل مكونات البنية التحتية بأمان.
- تجديد الشهادات: يستخدم Certbot / lets encrypt لشهادات SSL والمفاتيح التي تنتهي صلاحيتها كل 3 أشهر. سيقوم هذا بتجديد الشهادات لنطاقك ووضعها في المجلد اللازم ليتم استهلاكها من قبل المكونات ذات الصلة. انظر مسارات الملفات المهمة
- الاستعادة من النسخة الاحتياطية: سيؤدي إلى استعادة mongodb و redis من بيانات النسخة الاحتياطية.
الإعداد الأولي (الخيار 1)
اختر الخيار 1. الإعداد الأولي للبدء.
عند الانتهاء، يجب أن ترى رسالة نجاح. يمكنك حتى تشغيل docker ps لرؤية المكونات التي تم تشغيلها. مزيد من المعلومات عن المكونات أدناه.
الخدمات
| اسم الخدمة | المنفذ الافتراضي | الوصف |
|---|---|---|
| الويب | 443 |
واجهة الويب لجميع التفاعلات الإدارية |
| API | 4000 |
طبقة API لتجريد قواعد البيانات |
| Bree | لا شيء | مشغل المهام والوظائف في الخلفية |
| SMTP | 465 (موصى به) / 587 |
خادم SMTP للبريد الصادر |
| SMTP Bree | لا شيء | مهمة SMTP في الخلفية |
| MX | 2525 |
تبادل البريد للبريد الوارد وإعادة توجيه البريد |
| IMAP | 993/2993 |
خادم IMAP للبريد الوارد وإدارة صندوق البريد |
| POP3 | 995/2995 |
خادم POP3 للبريد الوارد وإدارة صندوق البريد |
| SQLite | 3456 |
خادم SQLite للتفاعل مع قواعد بيانات sqlite |
| SQLite Bree | لا شيء | مهمة SQLite في الخلفية |
| CalDAV | 5000 |
خادم CalDAV لإدارة التقويم |
| CardDAV | 6000 |
خادم CardDAV لإدارة التقويم |
| MongoDB | 27017 |
قاعدة بيانات MongoDB لمعظم إدارة البيانات |
| Redis | 6379 |
Redis للتخزين المؤقت وإدارة الحالة |
| SQLite | لا شيء | قواعد بيانات SQLite لصناديق البريد المشفرة |
مسارات الملفات المهمة
ملاحظة: مسار المضيف أدناه نسبي إلى /root/forwardemail.net/self-hosting/.
| المكون | مسار المضيف | مسار الحاوية |
|---|---|---|
| MongoDB | ./mongo-backups |
/backups |
| Redis | ./redis-data |
/data |
| Sqlite | ./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 |
| شهادة CA | ./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_address> | auto |
| CNAME | api | <domain_name> | auto |
| CNAME | caldav | <domain_name> | auto |
| CNAME | carddav | <domain_name> | auto |
| CNAME | fe-bounces | <domain_name> | auto |
| CNAME | imap | <domain_name> | auto |
| CNAME | mx | <domain_name> | auto |
| CNAME | pop3 | <domain_name> | auto |
| CNAME | smtp | <domain_name> | auto |
| MX | "@", ".", أو فارغ | mx.<domain_name> (الأولوية 0) | auto |
| TXT | "@", ".", أو فارغ | "v=spf1 a -all" | auto |
سجل DNS العكسي / PTR
سجلات DNS العكسية (rDNS) أو سجلات المؤشر العكسي (PTR) ضرورية لخوادم البريد الإلكتروني لأنها تساعد في التحقق من شرعية الخادم الذي يرسل البريد. كل مزود سحابي يفعل ذلك بطريقة مختلفة، لذا ستحتاج إلى البحث عن كيفية إضافة "DNS عكسي" لربط المضيف و IP باسم المضيف المقابل. على الأرجح في قسم الشبكات لدى المزود.
حظر المنفذ 25
بعض مزودي خدمة الإنترنت والمزودين السحابيّين يحظرون المنفذ 25 لتجنب الجهات السيئة. قد تحتاج إلى تقديم تذكرة دعم لفتح المنفذ 25 لبروتوكول SMTP / البريد الصادر.
بدء الاستخدام
-
افتح صفحة الهبوط انتقل إلى https://<domain_name>، مع استبدال <domain_name> بالنطاق الذي تم تكوينه في إعدادات DNS الخاصة بك. يجب أن ترى صفحة الهبوط الخاصة بـ Forward Email.
-
تسجيل الدخول وإعداد النطاق الخاص بك
- سجّل الدخول باستخدام بريد إلكتروني وكلمة مرور صالحة.
- أدخل اسم النطاق الذي ترغب في إعداده (يجب أن يتطابق مع تكوين DNS).
- اتبع التعليمات لإضافة سجلات MX و TXT المطلوبة للتحقق.
- إكمال الإعداد
- بمجرد التحقق، ادخل إلى صفحة الأسماء المستعارة لإنشاء الاسم المستعار الأول.
- اختياريًا، قم بتكوين SMTP للبريد الصادر في إعدادات النطاق. هذا يتطلب سجلات DNS إضافية.
Note
لا يتم إرسال أي معلومات خارج خادمك. خيار الاستضافة الذاتية والحساب الأولي هو فقط لتسجيل دخول المسؤول وعرض الويب لإدارة النطاقات والأسماء المستعارة وتكوينات البريد ذات الصلة.
الاختبار
إنشاء الاسم المستعار الأول
- انتقل إلى صفحة الأسماء المستعارة افتح صفحة إدارة الأسماء المستعارة:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
- أضف اسمًا مستعارًا جديدًا
- انقر على إضافة اسم مستعار (أعلى اليمين).
- أدخل اسم الاسم المستعار واضبط إعدادات البريد حسب الحاجة.
- (اختياري) فعّل دعم IMAP/POP3/CalDAV/CardDAV بتحديد مربع الاختيار.
- انقر على إنشاء اسم مستعار.
- تعيين كلمة مرور
- انقر على توليد كلمة مرور لإنشاء كلمة مرور آمنة.
- ستكون هذه الكلمة مطلوبة لتسجيل الدخول إلى عميل البريد الإلكتروني الخاص بك.
- تكوين عميل البريد الإلكتروني الخاص بك
- استخدم عميل بريد إلكتروني مثل Thunderbird.
- أدخل اسم الاسم المستعار وكلمة المرور التي تم إنشاؤها.
- قم بتكوين إعدادات IMAP و SMTP وفقًا لذلك.
إعدادات خادم البريد الإلكتروني
اسم المستخدم: <alias name>
| النوع | اسم المضيف | المنفذ | أمان الاتصال | المصادقة |
|---|---|---|---|---|
| SMTP | smtp.<domain_name> | 465 | SSL / TLS | كلمة مرور عادية |
| IMAP | imap.<domain_name> | 993 | SSL / TLS | كلمة مرور عادية |
إرسال / استقبال أول بريد إلكتروني
بمجرد التكوين، يجب أن تكون قادرًا على إرسال واستقبال البريد إلى عنوان البريد الإلكتروني الذي أنشأته والمستضاف ذاتيًا!
استكشاف الأخطاء وإصلاحها
لماذا لا يعمل هذا خارج أوبونتو وديبيان
نحن حالياً نعمل على دعم MacOS وسننظر في أنظمة أخرى. يرجى فتح نقاش أو المساهمة إذا كنت ترغب في رؤية دعم لأنظمة أخرى.
لماذا يفشل تحدي certbot acme
أكثر الأخطاء شيوعًا هو أن certbot / letsencrypt يطلب أحيانًا تحديين. يجب أن تتأكد من إضافة كلا سجلي 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 التلقائية لـ certbot عن طريق إعداد ملف /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 لسجلات البريد الصادر وسجلات الأخطاء على التوالي.
لماذا تتوقف رسائل البريد الصادرة عن العمل بسبب انتهاء المهلة
إذا رأيت رسالة مثل Connection timed out when connecting to MX server... فقد تحتاج إلى التحقق مما إذا كان المنفذ 25 محظورًا. من الشائع أن يقوم مزودو خدمة الإنترنت أو مزودو السحابة بحظر هذا بشكل افتراضي حيث قد تحتاج إلى التواصل مع الدعم / تقديم تذكرة لفتح هذا المنفذ.
ما هي الأدوات التي يجب أن أستخدمها لاختبار أفضل ممارسات تكوين البريد الإلكتروني وسمعة IP
اطلع على الأسئلة الشائعة هنا.