אירוח עצמי
מתחילים
פתרון הדואר האלקטרוני שלנו המאוחסן בעצמו, כמו כל המוצרים שלנו, הוא 100% קוד פתוח - גם בחזית וגם בקצה העורפי. המשמעות היא:
- שקיפות מלאה: כל שורת קוד שמעבדת את המיילים שלך זמינה לבדיקה ציבורית
- תרומות לקהילה: כל אחד יכול לתרום שיפורים או לתקן בעיות
- אבטחה באמצעות פתיחות: ניתן לזהות ולתקן פגיעויות על ידי קהילה גלובלית
- אין נעילת ספק: אתה אף פעם לא תלוי בקיומה של החברה שלנו
בסיס הקוד כולו זמין ב-GitHub בכתובת https://github.com/forwardemail/forwardemail.net, מורשה תחת רישיון MIT.
הארכיטקטורה כוללת מכולות עבור:
- שרת SMTP לאימייל יוצא
- שרתי IMAP/POP3 לאחזור דואר אלקטרוני
- ממשק אינטרנט לניהול
- מסד נתונים לאחסון תצורה
- Redis עבור שמירה במטמון וביצועים
- SQLite לאחסון תיבת דואר מאובטח ומוצפן
דרישות
לפני הפעלת סקריפט ההתקנה, ודא שיש לך את הדברים הבאים:
- מַעֲרֶכֶת הַפעָלָה: שרת מבוסס לינוקס (כיום תומך באובונטו 22.04+).
- אֶמְצָעִי: 1 vCPUs ו-2GB RAM
- גישה לשורשים: הרשאות ניהול לביצוע פקודות.
- שם דומיין: דומיין מותאם אישית מוכן לתצורת DNS.
- IP נקי: ודא שלשרת שלך יש כתובת IP נקייה ללא מוניטין ספאם קודם על ידי בדיקת רשימות שחורות. מידע נוסף כָּאן.
- כתובת IP ציבורית עם תמיכה ביציאה 25
- יכולת הגדרה PTR הפוך
- תמיכה ב-IPv4 ו-IPv6
[!עֵצָה] ראה את הרשימה שלנו של ספקי שרתי דואר מדהימים
Cloud-init / נתוני משתמש
רוב ספקי הענן תומכים בתצורת ענן-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
- הגדרה ראשונית: הורד את קוד הדואר האלקטרוני האחרון, הגדר את הסביבה, בקש את הדומיין המותאם אישית שלך והגדר את כל האישורים, המפתחות והסודות הדרושים.
- הגדר גיבוי: יגדיר cron לגיבוי mongoDB ו-redis באמצעות חנות תואמת S3 לאחסון מאובטח ומרוחק. בנפרד, sqlite יגובו בכניסה אם יהיו שינויים עבור גיבויים מאובטחים ומוצפנים.
- שדרוג התקנה: הגדר cron כדי לחפש עדכונים ליליים שייבנו מחדש ויפעילו מחדש את רכיבי התשתית בבטחה.
- חידוש תעודות: 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 Bree | אף אחד | עבודת רקע של SQLite |
CalDAV | 5000 | שרת CalDAV לניהול לוח שנה |
MongoDB | 27017 | מסד נתונים MongoDB עבור רוב ניהול הנתונים |
Redis | 6379 | Redis עבור מטמון וניהול מצב |
SQLite | אף אחד | מסדי נתונים של SQLite עבור תיבות דואר מוצפנות |
נתיבי קבצים חשובים
הערה: נתיב מארח להלן יחסית ל /root/forwardemail.net/self-hosting/
.
רְכִיב | נתיב מארח | נתיב מיכל |
---|---|---|
MongoDB | ./mongo-backups | /backups |
Redis | ./redis-data | /data |
סקלייט | ./sqlite-data | /mnt/{SQLITE_STORAGE_PATH} |
קובץ Env | ./.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 |
[!חָשׁוּב] שמור את
.env
קובץ בצורה מאובטחת. זה קריטי להתאוששות במקרה של כשל. אתה יכול למצוא את זה ב/root/forwardemail.net/self-hosting/.env
.
תְצוּרָה
הגדרת DNS ראשונית
בספק ה-DNS שבחרת, הגדר את רשומות ה-DNS המתאימות. רשום משהו בסוגריים (<>
) הוא דינמי ויש לעדכן אותו בערך שלך.
סוּג | שֵׁם | תוֹכֶן | TTL |
---|---|---|---|
A | "@", ".", או ריק | <כתובת_ip> | אוטומטי |
CNAME | API | <שם_דומיין> | אוטומטי |
CNAME | קלדב | <שם_דומיין> | אוטומטי |
CNAME | קופצני fe | <שם_דומיין> | אוטומטי |
CNAME | imap | <שם_דומיין> | אוטומטי |
CNAME | mx | <שם_דומיין> | אוטומטי |
CNAME | פופ3 | <שם_דומיין> | אוטומטי |
CNAME | smtp | <שם_דומיין> | אוטומטי |
MX | "@", ".", או ריק | mx.<domain_name> (עדיפות 0) | אוטומטי |
TXT | "@", ".", או ריק | "v=spf1 a -all" | אוטומטי |
הפוך רשומת DNS / PTR
רשומות DNS הפוך (rDNS) או רשומות מצביע הפוך (רשומות PTR) חיוניות עבור שרתי דוא"ל מכיוון שהן עוזרות לאמת את הלגיטימיות של השרת ששולח את האימייל. כל ספק ענן עושה זאת בצורה שונה, אז תצטרך לחפש כיצד להוסיף "DNS הפוך" כדי למפות את המארח וה-IP לשם המארח המתאים לו. ככל הנראה בקטע הרשת של הספק.
יציאה 25 חסומה
חלק מספקי האינטרנט וספקי הענן חוסמים 25 כדי להימנע משחקנים גרועים. ייתכן שיהיה עליך להגיש כרטיס תמיכה כדי לפתוח את יציאה 25 עבור SMTP / דואר אלקטרוני יוצא.
עלייה למטוס
-
פתח את דף הנחיתה נווט אל https://<domain_name>, החלף את <domain_name> בדומיין שהוגדר בהגדרות ה-DNS שלך. אתה אמור לראות את דף הנחיתה של העבר אימייל.
-
התחבר והכנס לדומיין שלך
- היכנס עם אימייל וסיסמה חוקיים.
- הזן את שם הדומיין שברצונך להגדיר (זה חייב להתאים לתצורת ה-DNS).
- עקוב אחר ההנחיות כדי להוסיף את הדרוש MX ו TXT רשומות לאימות.
- השלם את ההגדרה
- לאחר האימות, גש לדף הכינויים כדי ליצור את הכינוי הראשון שלך.
- אופציונלי, הגדר SMTP עבור דוא"ל יוצא בתוך ה הגדרות דומיין. זה דורש רשומות DNS נוספות.
[!פֶּתֶק] שום מידע לא נשלח מחוץ לשרת שלך. האפשרות לאירוח עצמי והחשבון הראשוני מיועדים רק לכניסת המנהל ולתצוגת האינטרנט לניהול דומיינים, כינויים ותצורות דוא"ל קשורות.
בּוֹחֵן
יצירת הכינוי הראשון שלך
- נווט אל דף הכינויים פתח את דף ניהול הכינוי:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
- הוסף כינוי חדש
- נְקִישָׁה הוסף כינוי (מימין למעלה).
- הזן את שם הכינוי והתאם את הגדרות הדוא"ל לפי הצורך.
- (אופציונלי) הפעל IMAP/POP3/CalDAV תמיכה על ידי סימון תיבת הסימון.
- נְקִישָׁה צור כינוי.
- הגדר סיסמה
- נְקִישָׁה צור סיסמה כדי ליצור סיסמה מאובטחת.
- סיסמה זו תידרש כדי להיכנס ללקוח הדוא"ל שלך.
- הגדר את לקוח הדוא"ל שלך
- השתמש בלקוח דוא"ל כמו Thunderbird.
- הזן את שם הכינוי והסיסמה שנוצרה.
- הגדר את IMAP ו SMTP הגדרות בהתאם.
הגדרות שרת דואר אלקטרוני
שם משתמש: <alias name>
סוּג | שם מארח | נָמָל | אבטחת חיבור | אימות |
---|---|---|---|---|
SMTP | smtp.<domain_name> | 465 | SSL / TLS | סיסמה רגילה |
IMAP | imap.<domain_name> | 993 | SSL / TLS | סיסמה רגילה |
שולח/קבל את האימייל הראשון שלך
לאחר ההגדרה, אתה אמור להיות מסוגל לשלוח ולקבל דוא"ל לכתובת הדוא"ל החדשה שלך שנוצרה ומתארחת בעצמך!
פתרון בעיות
למה זה לא עובד מחוץ לאובונטו
כרגע אנחנו מחפשים לתמוך בדביאן, MacOS ונחפש אחרים. נא לפתוח א דִיוּן או תרום אם תרצה לראות אחרים נתמכים.
מדוע אתגר acme certbot נכשל
המהומה הנפוצה ביותר היא ש-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
קובץ עם אסימון ה-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
תסתכל על שלנו שאלות נפוצות כאן.