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

ความต้องการ

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

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

[!TIP] ดูรายการของเรา ผู้ให้บริการเซิร์ฟเวอร์อีเมลที่ยอดเยี่ยม

การเริ่มต้นระบบคลาวด์ / ข้อมูลผู้ใช้

ผู้ให้บริการระบบคลาวด์ส่วนใหญ่สนับสนุนการกำหนดค่า cloud-init เมื่อมีการจัดเตรียมเซิร์ฟเวอร์ส่วนตัวเสมือน (VPS) นี่เป็นวิธีที่ดีในการตั้งค่าไฟล์และตัวแปรสภาพแวดล้อมบางส่วนล่วงหน้าเพื่อให้ตรรกะการตั้งค่าเริ่มต้นของสคริปต์ใช้งาน ซึ่งจะหลีกเลี่ยงความจำเป็นในการขอข้อมูลเพิ่มเติมขณะที่สคริปต์กำลังทำงาน

ตัวเลือก

  • EMAIL - EMAIL ตัวแปรสภาพแวดล้อมที่ใช้สำหรับการแจ้งเตือนการหมดอายุของ certbot
  • DOMAIN - โดเมนที่กำหนดเองที่ใช้สำหรับการตั้งค่าโฮสติ้งด้วยตนเอง
  • 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อินเทอร์เฟซเว็บสำหรับการโต้ตอบของผู้ดูแลระบบทั้งหมด
API4000เลเยอร์ API สู่ฐานข้อมูลนามธรรม
บรีไม่มีงานเบื้องหลังและงานผู้ดำเนินการ
SMTP465/587เซิร์ฟเวอร์ SMTP สำหรับอีเมล์ขาออก
SMTP บรีไม่มีงานเบื้องหลัง SMTP
MX2525การแลกเปลี่ยนเมล์สำหรับอีเมล์ขาเข้าและการส่งต่ออีเมล์
IMAP993/2993เซิร์ฟเวอร์ IMAP สำหรับการจัดการอีเมลขาเข้าและกล่องจดหมาย
POP3995/2995เซิร์ฟเวอร์ POP3 สำหรับการจัดการอีเมลขาเข้าและกล่องจดหมาย
SQLite3456เซิร์ฟเวอร์ SQLite สำหรับการโต้ตอบกับฐานข้อมูล SQLite
SQLite บรีไม่มีงานพื้นหลัง SQLite
คาลเดฟ5000เซิร์ฟเวอร์ CalDAV สำหรับการจัดการปฏิทิน
มอนโกดีบี27017ฐานข้อมูล MongoDB สำหรับการจัดการข้อมูลส่วนใหญ่
เรดิส6379Redis สำหรับการแคชและการจัดการสถานะ
SQLiteไม่มีฐานข้อมูล SQLite สำหรับกล่องจดหมายที่เข้ารหัส

เส้นทางไฟล์ที่สำคัญ

บันทึก: เส้นทางโฮสต์ ด้านล่างนี้สัมพันธ์กับ /root/forwardemail.net/self-hosting/.

ส่วนประกอบเส้นทางโฮสต์เส้นทางคอนเทนเนอร์
มอนโกดีบี./mongo-backups/backups
เรดิส./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เอพี<ชื่อโดเมน>อัตโนมัติ
CNAMEคาลดาว<ชื่อโดเมน>อัตโนมัติ
CNAMEเฟ-เด้ง<ชื่อโดเมน>อัตโนมัติ
CNAMEไอแมป<ชื่อโดเมน>อัตโนมัติ
CNAMEเอ็มเอ็กซ์<ชื่อโดเมน>อัตโนมัติ
CNAMEป๊อป3<ชื่อโดเมน>อัตโนมัติ
CNAMEเอสเอ็มทีพี<ชื่อโดเมน>อัตโนมัติ
MX"@", "." หรือเว้นว่างไว้mx.<ชื่อโดเมน> (ลำดับความสำคัญ 0)อัตโนมัติ
TXT"@", "." หรือเว้นว่างไว้"v=spf1 ทั้งหมด"อัตโนมัติ
ย้อนกลับบันทึก DNS / PTR

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

พอร์ต 25 ถูกบล็อค

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

การต้อนรับแขก

  1. เปิดหน้า Landing Page ไปที่ https://<ชื่อโดเมน> โดยแทนที่ <ชื่อโดเมน> ด้วยโดเมนที่กำหนดค่าไว้ในการตั้งค่า DNS ของคุณ คุณควรจะเห็นหน้า Landing Page สำหรับการส่งต่ออีเมล

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

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

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

การทดสอบ

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

  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รหัสผ่านปกติ

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

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

การซ่อมบำรุง

How do I backup my data

ติดตาม ติดตั้งสคริปต์ และเลือก option 2 ในข้อความแจ้งเตือน

How do I renew my certificates

ติดตาม ติดตั้งสคริปต์ และเลือก option 3 ในข้อความแจ้งเตือน

How do I upgrade to the latest forward email code

ติดตาม ติดตั้งสคริปต์ และเลือก option 4 ในข้อความแจ้งเตือน

How do I restore from a backup

ติดตาม ติดตั้งสคริปต์ และเลือก option 6 ในข้อความแจ้งเตือน

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

Why is the certbot acme challenge failing

ข้อผิดพลาดที่พบบ่อยที่สุดคือ 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 และอัปเดตความท้าทายโดยอัตโนมัติ

What is the basic auth username and password

สำหรับการโฮสต์ด้วยตนเอง เราเพิ่มป๊อปอัปการยืนยันตัวตนแบบเนทีฟของเบราว์เซอร์ครั้งแรกด้วยชื่อผู้ใช้ธรรมดา (admin) และรหัสผ่าน (สร้างแบบสุ่มในการตั้งค่าเริ่มต้น) เราเพียงแค่เพิ่มสิ่งนี้เป็นการป้องกันในกรณีที่ระบบอัตโนมัติ/โปรแกรมสแกนข้อมูลเอาชนะคุณในการลงชื่อสมัครใช้งานครั้งแรกบนเว็บ คุณสามารถค้นหารหัสผ่านนี้ได้หลังจากการตั้งค่าเริ่มต้นใน .env จัดเก็บภายใต้ AUTH_BASIC_USERNAME และ AUTH_BASIC_PASSWORD.

How do I know what is running

คุณสามารถเรียกใช้ docker ps เพื่อดูคอนเทนเนอร์ที่กำลังทำงานทั้งหมดซึ่งถูกหมุนขึ้นมาจาก docker-compose-self-hosting.yml ไฟล์ คุณยังสามารถเรียกใช้ docker ps -a เพื่อดูทุกอย่าง (รวมถึงคอนเทนเนอร์ที่ไม่ได้ทำงานอยู่)

How do I know if something isn't running that should be

คุณสามารถเรียกใช้ docker ps -a เพื่อดูทุกอย่าง (รวมถึงคอนเทนเนอร์ที่ไม่ได้ทำงานอยู่) คุณอาจเห็นบันทึกหรือหมายเหตุการออก

How do I find logs

คุณสามารถรับบันทึกเพิ่มเติมได้ผ่าน docker logs -f <container_name>. ถ้ามีอะไรเกิดขึ้น มันน่าจะเกี่ยวข้องกับ .env ไฟล์ถูกกำหนดค่าไม่ถูกต้อง

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

Why are my outgoing emails timing out

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

What tool(s) should I use to test email configuration best practices and IP reputation

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

กล่องเครื่องมือ mx

เครื่องมือ Google Postmaster

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

สแปมเฮาส์

สแปม