استضافة ذاتية
البدء
حل البريد الإلكتروني المُستضاف ذاتيًا لدينا، كجميع منتجاتنا، مفتوح المصدر بنسبة 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.
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. 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. ستظهر لك صفحة إعادة توجيه البريد الإلكتروني.
- تسجيل الدخول وإضافة نطاقك
- سجّل الدخول باستخدام بريد إلكتروني وكلمة مرور صالحين.
- أدخل اسم النطاق الذي ترغب بإعداده (يجب أن يتطابق مع إعدادات 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.<اسم_النطاق> | 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؟
قم بإلقاء نظرة على الأسئلة الشائعة هنا الخاص بنا.