โฮสต์ด้วยตนเอง

เริ่มต้นใช้งาน

โซลูชันอีเมลโฮสต์ด้วยตนเองของเรา เช่นเดียวกับผลิตภัณฑ์ทั้งหมดของเรา เป็นโอเพนซอร์ส 100% ทั้งส่วนหน้าและส่วนหลัง ซึ่งหมายความว่า:

  1. ความโปร่งใสอย่างสมบูรณ์: ทุกบรรทัดของโค้ดที่ประมวลผลอีเมลของคุณเปิดให้ตรวจสอบโดยสาธารณะ
  2. การมีส่วนร่วมของชุมชน: ทุกคนสามารถมีส่วนร่วมในการปรับปรุงหรือแก้ไขปัญหาได้
  3. ความปลอดภัยผ่านความโปร่งใส: ช่องโหว่สามารถถูกระบุและแก้ไขโดยชุมชนทั่วโลก
  4. ไม่มีการล็อกกับผู้ขาย: คุณจะไม่ขึ้นอยู่กับการดำรงอยู่ของบริษัทของเรา

โค้ดทั้งหมดพร้อมให้ดูได้ที่ GitHub ที่ https://github.com/forwardemail/forwardemail.net ภายใต้ใบอนุญาต MIT License

สถาปัตยกรรมประกอบด้วยคอนเทนเนอร์สำหรับ:

  • เซิร์ฟเวอร์ SMTP สำหรับอีเมลขาออก
  • เซิร์ฟเวอร์ IMAP/POP3 สำหรับการดึงอีเมล
  • อินเทอร์เฟซเว็บสำหรับการบริหารจัดการ
  • ฐานข้อมูลสำหรับเก็บการกำหนดค่า
  • Redis สำหรับแคชและประสิทธิภาพ
  • SQLite สำหรับเก็บกล่องจดหมายที่ปลอดภัยและเข้ารหัส

Note

อย่าลืมตรวจสอบ บล็อกโฮสต์ด้วยตนเอง ของเรา

และสำหรับผู้ที่สนใจเวอร์ชันที่แยกขั้นตอนอย่างละเอียดดูได้จากคู่มือ Ubuntu หรือ Debian

ข้อกำหนด

ก่อนรันสคริปต์ติดตั้ง ให้แน่ใจว่าคุณมีสิ่งต่อไปนี้:

  • ระบบปฏิบัติการ: เซิร์ฟเวอร์ที่ใช้ระบบปฏิบัติการลินุกซ์ (รองรับ Ubuntu 22.04+ ในปัจจุบัน)
  • ทรัพยากร: 1 vCPU และ RAM 2GB
  • สิทธิ์ root: สิทธิ์ผู้ดูแลระบบในการรันคำสั่ง
  • ชื่อโดเมน: โดเมนที่กำหนดเองพร้อมสำหรับการตั้งค่า DNS
  • IP ที่สะอาด: ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ของคุณมีที่อยู่ IP ที่สะอาด ไม่มีประวัติสแปมโดยตรวจสอบจากรายการบล็อกต่างๆ ดูข้อมูลเพิ่มเติม ที่นี่
  • ที่อยู่ IP สาธารณะที่รองรับพอร์ต 25
  • ความสามารถในการตั้งค่า reverse PTR
  • รองรับ IPv4 และ IPv6

Tip

ดูรายชื่อผู้ให้บริการ mail server ที่ยอดเยี่ยม ของเรา

Cloud-init / User-data

ผู้ให้บริการคลาวด์ส่วนใหญ่รองรับการตั้งค่า 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. การตั้งค่าเริ่มต้น
2. ตั้งค่าการสำรองข้อมูล
3. ตั้งค่าการอัปเกรดอัตโนมัติ
4. ต่ออายุใบรับรอง
5. กู้คืนจากการสำรองข้อมูล
6. ความช่วยเหลือ
7. ออกจากระบบ
  • การตั้งค่าเริ่มต้น: ดาวน์โหลดโค้ด forward email ล่าสุด กำหนดค่าสภาพแวดล้อม ถามโดเมนที่กำหนดเองของคุณ และตั้งค่าใบรับรอง กุญแจ และความลับที่จำเป็นทั้งหมด
  • ตั้งค่าการสำรองข้อมูล: จะตั้งค่า cron เพื่อสำรองข้อมูล mongoDB และ redis โดยใช้ที่เก็บข้อมูลแบบเข้ากันได้กับ S3 สำหรับการจัดเก็บระยะไกลที่ปลอดภัย แยกต่างหาก sqlite จะถูกสำรองข้อมูลเมื่อเข้าสู่ระบบหากมีการเปลี่ยนแปลง เพื่อการสำรองข้อมูลที่ปลอดภัยและเข้ารหัส
  • ตั้งค่าการอัปเกรด: ตั้งค่า cron เพื่อตรวจสอบการอัปเดตประจำคืนซึ่งจะสร้างและรีสตาร์ทส่วนประกอบโครงสร้างพื้นฐานอย่างปลอดภัย
  • ต่ออายุใบรับรอง: ใช้ 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(s)
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 ./.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> (priority 0) auto
TXT "@", ".", หรือว่าง "v=spf1 a -all" auto

Reverse DNS / PTR record

Reverse DNS (rDNS) หรือบันทึกตัวชี้ย้อนกลับ (PTR records) มีความสำคัญสำหรับเซิร์ฟเวอร์อีเมลเพราะช่วยยืนยันความถูกต้องของเซิร์ฟเวอร์ที่ส่งอีเมล ผู้ให้บริการคลาวด์แต่ละรายจะมีวิธีการที่แตกต่างกัน ดังนั้นคุณจะต้องค้นหาวิธีเพิ่ม "Reverse DNS" เพื่อแมปโฮสต์และ IP ให้ตรงกับชื่อโฮสต์ที่เกี่ยวข้อง โดยส่วนใหญ่จะอยู่ในส่วนเครือข่ายของผู้ให้บริการ

Port 25 ถูกบล็อก

ผู้ให้บริการอินเทอร์เน็ตและคลาวด์บางรายบล็อกพอร์ต 25 เพื่อป้องกันผู้ไม่หวังดี คุณอาจต้องส่งคำขอสนับสนุนเพื่อเปิดพอร์ต 25 สำหรับ SMTP / อีเมลขาออก

การเริ่มต้นใช้งาน

  1. เปิดหน้า Landing Page ไปที่ https://<domain_name> โดยแทนที่ <domain_name> ด้วยโดเมนที่ตั้งค่าใน DNS ของคุณ คุณจะเห็นหน้า Landing Page ของ Forward Email

  2. เข้าสู่ระบบและเพิ่มโดเมนของคุณ

  • ลงชื่อเข้าใช้ด้วยอีเมลและรหัสผ่านที่ถูกต้อง
  • ป้อนชื่อโดเมนที่คุณต้องการตั้งค่า (ต้องตรงกับการตั้งค่า DNS)
  • ทำตามคำแนะนำเพื่อเพิ่มบันทึก MX และ TXT ที่จำเป็นสำหรับการยืนยัน
  1. เสร็จสิ้นการตั้งค่า
  • เมื่อตรวจสอบเรียบร้อยแล้ว ให้เข้าไปที่หน้าสร้างนามแฝง (Aliases) เพื่อสร้างนามแฝงแรกของคุณ
  • หากต้องการ สามารถตั้งค่า SMTP สำหรับอีเมลขาออก ใน การตั้งค่าโดเมน ซึ่งต้องมีบันทึก DNS เพิ่มเติม

Note

ไม่มีข้อมูลใดถูกส่งออกนอกเซิร์ฟเวอร์ของคุณ ตัวเลือกโฮสต์ด้วยตนเองและบัญชีเริ่มต้นนี้ใช้สำหรับการเข้าสู่ระบบผู้ดูแลและดูเว็บเพื่อจัดการโดเมน นามแฝง และการตั้งค่าอีเมลที่เกี่ยวข้องเท่านั้น

การทดสอบ

การสร้างนามแฝงแรกของคุณ

  1. ไปที่หน้าจัดการนามแฝง เปิดหน้าจัดการนามแฝง:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
  1. เพิ่มนามแฝงใหม่
  • คลิก Add Alias (มุมขวาบน)
  • ป้อนชื่อนามแฝงและปรับการตั้งค่าอีเมลตามต้องการ
  • (ไม่บังคับ) เปิดใช้งานการสนับสนุน IMAP/POP3/CalDAV/CardDAV โดยเลือกช่องทำเครื่องหมาย
  • คลิก Create Alias
  1. ตั้งรหัสผ่าน
  • คลิก Generate Password เพื่อสร้างรหัสผ่านที่ปลอดภัย
  • รหัสผ่านนี้จะต้องใช้สำหรับเข้าสู่ระบบไคลเอนต์อีเมลของคุณ
  1. ตั้งค่าไคลเอนต์อีเมลของคุณ
  • ใช้ไคลเอนต์อีเมลเช่น Thunderbird
  • ป้อนชื่อนามแฝงและรหัสผ่านที่สร้างขึ้น
  • ตั้งค่า IMAP และ SMTP ตามที่กำหนด

การตั้งค่าเซิร์ฟเวอร์อีเมล

ชื่อผู้ใช้: <alias name>

ประเภท ชื่อโฮสต์ พอร์ต ความปลอดภัยการเชื่อมต่อ การรับรองความถูกต้อง
SMTP smtp.<domain_name> 465 SSL / TLS รหัสผ่านปกติ
IMAP imap.<domain_name> 993 SSL / TLS รหัสผ่านปกติ

การส่ง / รับอีเมลแรกของคุณ

เมื่อการตั้งค่าเสร็จสมบูรณ์ คุณจะสามารถส่งและรับอีเมลไปยังที่อยู่อีเมลที่สร้างและโฮสต์ด้วยตนเองได้!

การแก้ไขปัญหา

ทำไมสิ่งนี้ถึงไม่ทำงานนอก Ubuntu และ Debian

ขณะนี้เรากำลังมองหาการสนับสนุน MacOS และจะพิจารณาแพลตฟอร์มอื่น ๆ โปรดเปิด การสนทนา หรือมีส่วนร่วมหากคุณต้องการให้สนับสนุนแพลตฟอร์มอื่น ๆ

ทำไมการท้าทาย certbot acme ถึงล้มเหลว

ข้อผิดพลาดที่พบบ่อยที่สุดคือ certbot / letsencrypt บางครั้งจะร้องขอ 2 การท้าทาย คุณต้องแน่ใจว่าได้เพิ่มระเบียน 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 และการอัปเดตการท้าทายโดยอัตโนมัติ

ชื่อผู้ใช้และรหัสผ่านสำหรับ basic auth คืออะไร

สำหรับการโฮสต์ด้วยตนเอง เราจะเพิ่มการแจ้งเตือนการยืนยันตัวตนแบบเนทีฟของเบราว์เซอร์ครั้งแรกด้วยชื่อผู้ใช้ง่าย ๆ (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 ที่ไม่ถูกต้อง

ภายใน UI เว็บ คุณสามารถดูที่ /admin/emails และ /admin/logs สำหรับบันทึกอีเมลขาออกและบันทึกข้อผิดพลาดตามลำดับ

ทำไมอีเมลขาออกของฉันถึงหมดเวลา

หากคุณเห็นข้อความเช่น Connection timed out when connecting to MX server... คุณอาจต้องตรวจสอบว่าพอร์ต 25 ถูกบล็อกหรือไม่ โดยปกติ ISP หรือผู้ให้บริการคลาวด์จะบล็อกพอร์ตนี้โดยค่าเริ่มต้น ซึ่งคุณอาจต้องติดต่อฝ่ายสนับสนุน / ส่งคำร้องเพื่อขอเปิดใช้งาน

ฉันควรใช้เครื่องมือใดในการทดสอบการตั้งค่าอีเมลและชื่อเสียง IP ที่ดีที่สุด

ลองดูที่ คำถามที่พบบ่อยของเรา