โฮสต์ด้วยตนเอง
การติดตั้ง
ความต้องการ
ก่อนที่จะรันสคริปต์การติดตั้ง ให้แน่ใจว่าคุณมีสิ่งต่อไปนี้:
- ระบบปฏิบัติการ:เซิร์ฟเวอร์ที่ใช้ระบบปฏิบัติการ Linux (เช่น Ubuntu 22.04+)
- ทรัพยากร:1 vCPU และ RAM 2GB
- การเข้าถึงรูท: สิทธิ์การดูแลระบบในการดำเนินการคำสั่ง
- ชื่อโดเมน:โดเมนที่กำหนดเองพร้อมสำหรับการกำหนดค่า DNS
- IP ที่สะอาด:ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ของคุณมีที่อยู่ IP ที่สะอาดและไม่มีประวัติสแปมมาก่อนโดยการตรวจสอบบัญชีดำ ข้อมูลเพิ่มเติม ที่นี่.
[!TIP] ดูรายการของเรา ผู้ให้บริการเซิร์ฟเวอร์อีเมลที่ยอดเยี่ยม
การเริ่มต้นระบบคลาวด์ / ข้อมูลผู้ใช้
ผู้ให้บริการระบบคลาวด์ส่วนใหญ่สนับสนุนการกำหนดค่า cloud-init เมื่อมีการจัดเตรียมเซิร์ฟเวอร์ส่วนตัวเสมือน (VPS) นี่เป็นวิธีที่ดีในการตั้งค่าไฟล์และตัวแปรสภาพแวดล้อมบางส่วนล่วงหน้าเพื่อให้ตรรกะการตั้งค่าเริ่มต้นของสคริปต์ใช้งาน ซึ่งจะหลีกเลี่ยงความจำเป็นในการขอข้อมูลเพิ่มเติมขณะที่สคริปต์กำลังทำงาน
ตัวเลือก
EMAIL
-EMAIL
ตัวแปรสภาพแวดล้อมที่ใช้สำหรับการแจ้งเตือนการหมดอายุของ certbotDOMAIN
- โดเมนที่กำหนดเองที่ใช้สำหรับการตั้งค่าโฮสติ้งด้วยตนเอง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 บรี | ไม่มี | งานพื้นหลัง SQLite |
คาลเดฟ | 5000 | เซิร์ฟเวอร์ CalDAV สำหรับการจัดการปฏิทิน |
มอนโกดีบี | 27017 | ฐานข้อมูล MongoDB สำหรับการจัดการข้อมูลส่วนใหญ่ |
เรดิส | 6379 | Redis สำหรับการแคชและการจัดการสถานะ |
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 / อีเมลขาออก
การต้อนรับแขก
-
เปิดหน้า Landing Page ไปที่ https://<ชื่อโดเมน> โดยแทนที่ <ชื่อโดเมน> ด้วยโดเมนที่กำหนดค่าไว้ในการตั้งค่า DNS ของคุณ คุณควรจะเห็นหน้า Landing Page สำหรับการส่งต่ออีเมล
-
เข้าสู่ระบบและออนบอร์ดโดเมนของคุณ
- เข้าสู่ระบบด้วยอีเมล์และรหัสผ่านที่ถูกต้อง
- กรอกชื่อโดเมนที่คุณต้องการตั้งค่า (ต้องตรงกับการกำหนดค่า DNS)
- ปฏิบัติตามคำแนะนำเพื่อเพิ่มสิ่งที่จำเป็น MX และ TXT บันทึกเพื่อการตรวจยืนยัน
- ทำการตั้งค่าให้เสร็จสมบูรณ์
- เมื่อตรวจสอบแล้ว ให้เข้าถึงหน้านามแฝงเพื่อสร้างนามแฝงแรกของคุณ
- การกำหนดค่าตามตัวเลือก SMTP สำหรับอีเมล์ขาออก ใน การตั้งค่าโดเมนสิ่งนี้ต้องมีบันทึก DNS เพิ่มเติม
[!NOTE] ไม่มีการส่งข้อมูลออกนอกเซิร์ฟเวอร์ของคุณ ตัวเลือกโฮสต์ด้วยตนเองและบัญชีเริ่มต้นมีไว้สำหรับการเข้าสู่ระบบของผู้ดูแลระบบและมุมมองเว็บเพื่อจัดการโดเมน นามแฝง และการกำหนดค่าอีเมลที่เกี่ยวข้องเท่านั้น
การทดสอบ
การสร้างนามแฝงแรกของคุณ
- ไปที่หน้านามแฝง เปิดหน้าการจัดการนามแฝง:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
- เพิ่มนามแฝงใหม่
- คลิก เพิ่มนามแฝง (ขวาบน)
- กรอกชื่อนามแฝงและปรับแต่งการตั้งค่าอีเมลตามต้องการ
- (ทางเลือก) เปิดใช้งาน IMAP/POP3/CalDAV สนับสนุนโดยการเลือกช่องกาเครื่องหมาย
- คลิก สร้างนามแฝง
- ตั้งรหัสผ่าน
- คลิก สร้างรหัสผ่าน เพื่อสร้างรหัสผ่านที่ปลอดภัย
- รหัสผ่านนี้จำเป็นสำหรับการเข้าสู่ระบบไคลเอนต์อีเมลของคุณ
- กำหนดค่าไคลเอนต์อีเมลของคุณ
- ใช้ไคลเอนต์อีเมล์เช่น Thunderbird
- กรอกชื่อนามแฝงและรหัสผ่านที่สร้างขึ้น
- กำหนดค่า IMAP และ SMTP ตั้งค่าให้เหมาะสม
การตั้งค่าเซิร์ฟเวอร์อีเมล์
ชื่อผู้ใช้: <alias name>
ชนิด | ชื่อโฮสต์ | ท่าเรือ | ความปลอดภัยในการเชื่อมต่อ | การรับรอง |
---|---|---|---|---|
SMTP | smtp.<ชื่อโดเมน> | 465 | SSL / TLS | รหัสผ่านปกติ |
IMAP | imap.<ชื่อโดเมน> | 993 | SSL / 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
ลองมาดูของเรา คำถามที่พบบ่อยที่นี่.
ใช้ที่อยู่ IP ของเซิร์ฟเวอร์ของคุณเพื่อตรวจสอบกับไซต์ต่อไปนี้ว่าอยู่ในบัญชีดำหรือไม่ น่าเสียดายที่ผู้ให้บริการคลาวด์ทั่วไปมักประสบปัญหาเกี่ยวกับชื่อเสียงของ IP เนื่องจากการใช้งานสแปมอีเมล หากคุณพบว่า IP ของคุณอยู่ในบัญชีดำ ขอแนะนำให้สร้างเซิร์ฟเวอร์ใหม่และตรวจสอบที่อยู่ IP ใหม่