Tự lưu trữ

Giải pháp email tự lưu trữ của chúng tôi, giống như tất cả các sản phẩm của chúng tôi, là 100% mã nguồn mở—cả giao diện và phần phụ trợ. Điều này có nghĩa là:

  1. Sự minh bạch hoàn toàn: Mọi dòng mã xử lý email của bạn đều có thể được công khai giám sát
  2. Đóng góp của cộng đồng: Bất kỳ ai cũng có thể đóng góp cải tiến hoặc khắc phục sự cố
  3. An ninh thông qua sự cởi mở: Các lỗ hổng có thể được xác định và khắc phục bởi cộng đồng toàn cầu
  4. Không có nhà cung cấp khóa: Bạn không bao giờ phụ thuộc vào sự tồn tại của công ty chúng tôi

Toàn bộ cơ sở mã có sẵn trên GitHub tại https://github.com/forwardemail/forwardemail.net, được cấp phép theo Giấy phép MIT.

Kiến trúc bao gồm các thùng chứa cho:

  • Máy chủ SMTP cho email gửi đi
  • Máy chủ IMAP/POP3 để truy xuất email
  • Giao diện web cho quản trị
  • Cơ sở dữ liệu để lưu trữ cấu hình
  • Redis để lưu trữ đệm và hiệu suất
  • SQLite để lưu trữ hộp thư an toàn, được mã hóa

Trước khi chạy tập lệnh cài đặt, hãy đảm bảo bạn có những điều sau:

  • Hệ điều hành: Máy chủ chạy hệ điều hành Linux (hiện hỗ trợ Ubuntu 22.04 trở lên).
  • Tài nguyên: 1 vCPU và 2GB RAM
  • Truy cập gốc: Quyền quản trị để thực hiện lệnh.
  • Tên miền: Một tên miền tùy chỉnh sẵn sàng cho việc cấu hình DNS.
  • IP sạch: Đảm bảo máy chủ của bạn có địa chỉ IP sạch, không có danh tiếng spam trước đó bằng cách kiểm tra danh sách đen. Thông tin thêm đây.
  • Địa chỉ IP công cộng có hỗ trợ cổng 25
  • Khả năng thiết lập đảo ngược PTR
  • Hỗ trợ IPv4 và IPv6

[!TIP] Xem danh sách của chúng tôi nhà cung cấp máy chủ thư tuyệt vời

Cloud-init / Dữ liệu người dùng

Hầu hết các nhà cung cấp đám mây đều hỗ trợ cấu hình cloud-init khi máy chủ riêng ảo (VPS) được cung cấp. Đây là cách tuyệt vời để thiết lập một số tệp và biến môi trường trước thời hạn để logic thiết lập ban đầu của tập lệnh sử dụng, bỏ qua nhu cầu nhắc nhở trong khi tập lệnh đang chạy để biết thêm thông tin.

Tùy chọn

  • EMAIL - email được sử dụng để nhắc nhở về ngày hết hạn certbot
  • DOMAIN - tên miền tùy chỉnh (ví dụ: example.com) được sử dụng để thiết lập tự lưu trữ
  • AUTH_BASIC_USERNAME - tên người dùng được sử dụng trong lần thiết lập đầu tiên để bảo vệ trang web
  • AUTH_BASIC_PASSWORD - passward được sử dụng trong lần thiết lập đầu tiên để bảo vệ trang web
  • /root/.cloudflare.ini - (Chỉ dành cho người dùng Cloudflare) tệp cấu hình cloudflare được certbot sử dụng để cấu hình DNS. Nó yêu cầu bạn đặt mã thông báo API của mình qua dns_cloudflare_api_token. Đọc thêm đây.

Ví dụ:

#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="[email protected]"
      export DOMAIN="mydomain.com"

runcmd:

  • chmod +x /etc/profile.d/env.sh

Chạy lệnh sau trên máy chủ của bạn để tải xuống và thực thi tập lệnh cài đặt:

bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)

Gỡ lỗi tập lệnh cài đặt

Thêm vào DEBUG=true trước tập lệnh cài đặt để có đầu ra chi tiết:

DEBUG=true bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)

Lời nhắc

1. Initial setup
2. Setup Backups
3. Setup Auto Upgrades
4. Renew certificates
5. Restore from Backup
6. Help
7. Exit
  • Thiết lập ban đầu: Tải xuống mã email chuyển tiếp mới nhất, cấu hình môi trường, nhắc nhở tên miền tùy chỉnh của bạn và thiết lập tất cả các chứng chỉ, khóa và bí mật cần thiết.
  • Thiết lập sao lưu: Sẽ thiết lập cron để sao lưu mongoDB và redis bằng kho lưu trữ tương thích S3 để lưu trữ từ xa an toàn. Riêng sqlite sẽ được sao lưu khi đăng nhập nếu có thay đổi đối với bản sao lưu được mã hóa an toàn.
  • Thiết lập nâng cấp: Thiết lập cron để tìm kiếm các bản cập nhật hàng đêm giúp xây dựng lại và khởi động lại các thành phần cơ sở hạ tầng một cách an toàn.
  • Gia hạn chứng chỉ: Certbot / lets encrypt được sử dụng cho chứng chỉ SSL và khóa sẽ hết hạn sau mỗi 3 tháng. Điều này sẽ gia hạn chứng chỉ cho tên miền của bạn và đặt chúng vào thư mục cần thiết để các thành phần liên quan sử dụng. Xem đường dẫn tập tin quan trọng
  • Khôi phục từ bản sao lưu: Sẽ kích hoạt mongodb và redis để khôi phục từ dữ liệu sao lưu.

Thiết lập ban đầu (Tùy chọn 1)

Chọn tùy chọn 1. Initial setup để bắt đầu.

Khi hoàn tất, bạn sẽ thấy thông báo thành công. Bạn thậm chí có thể chạy docker ps để xem cái các thành phần quay tròn. Thông tin thêm về các thành phần bên dưới.

Tên dịch vụCổng mặc địnhSự miêu tả
Trang web443Giao diện web cho tất cả các tương tác của quản trị viên
API4000Lớp API để trừu tượng hóa cơ sở dữ liệu
BreeKhông cóCông việc nền và trình chạy tác vụ
SMTP465/587Máy chủ SMTP cho email gửi đi
SMTP BreeKhông cóCông việc nền SMTP
MX2525Trao đổi thư cho email đến và chuyển tiếp email
IMAP993/2993Máy chủ IMAP để quản lý email đến và hộp thư
POP3995/2995Máy chủ POP3 để quản lý email đến và hộp thư
SQLite3456Máy chủ SQLite để tương tác với cơ sở dữ liệu SQLite
SQLite BreeKhông cóCông việc nền SQLite
CalDAV5000Máy chủ CalDAV để quản lý lịch
MongoDB27017Cơ sở dữ liệu MongoDB cho hầu hết việc quản lý dữ liệu
làm lại6379Redis để lưu trữ đệm và quản lý trạng thái
SQLiteKhông cóCơ sở dữ liệu SQLite cho hộp thư được mã hóa

Đường dẫn tập tin quan trọng

Ghi chú: Đường dẫn máy chủ dưới đây là tương đối với /root/forwardemail.net/self-hosting/.

Thành phầnĐường dẫn máy chủĐường dẫn chứa
MongoDB./mongo-backups/backups
làm lại./redis-data/data
Sqlite./sqlite-data/mnt/{SQLITE_STORAGE_PATH}
Tệp env./.env/app/.env
Chứng chỉ/khóa SSL./ssl/app/ssl/
Khóa riêng tư./ssl/privkey.pem/app/ssl/privkey.pem
Chứng chỉ chuỗi đầy đủ./ssl/fullchain.pem/app/ssl/fullchain.pem
CA được chứng nhận./ssl/cert.pem/app/ssl/cert.pem
Khóa riêng DKIM./ssl/dkim.key/app/ssl/dkim.key

[!QUAN TRỌNG] Lưu .env tập tin một cách an toàn. Điều này rất quan trọng để phục hồi trong trường hợp lỗi. Bạn có thể tìm thấy điều này trong /root/forwardemail.net/self-hosting/.env.

Thiết lập DNS ban đầu

Trong nhà cung cấp DNS bạn chọn, hãy cấu hình các bản ghi DNS phù hợp. Lưu ý bất kỳ điều gì trong dấu ngoặc vuông (<>) là động và cần được cập nhật theo giá trị của bạn.

KiểuTênNội dungTTL
A"@", "." hoặc để trống<địa chỉ ip>tự động
CNAMEAPI<tên_miền>tự động
CNAMEcaldav<tên_miền>tự động
CNAMEfe-nảy<tên_miền>tự động
CNAMEbản đồ<tên_miền>tự động
CNAMEmx<tên_miền>tự động
CNAMEnhạc pop3<tên_miền>tự động
CNAMEsmtp<tên_miền>tự động
MX"@", "." hoặc để trốngmx.<tên_miền> (mức độ ưu tiên 0)tự động
TXT"@", "." hoặc để trống"v=spf1 a -tất cả"tự động

Bản ghi DNS / PTR đảo ngược

Reverse DNS (rDNS) hoặc reverse pointer records (PTR records) là cần thiết cho máy chủ email vì chúng giúp xác minh tính hợp pháp của máy chủ gửi email. Mỗi nhà cung cấp dịch vụ đám mây thực hiện việc này theo cách khác nhau, vì vậy bạn sẽ cần tìm hiểu cách thêm "Reverse DNS" để ánh xạ máy chủ và IP với tên máy chủ tương ứng. Nhiều khả năng là trong phần mạng của nhà cung cấp.

Cổng 25 bị chặn

Một số ISP và nhà cung cấp dịch vụ đám mây chặn 25 để tránh những kẻ xấu. Bạn có thể cần phải gửi phiếu hỗ trợ để mở cổng 25 cho SMTP/email gửi đi.

  1. Mở Trang đích Điều hướng đến https://<tên_miền>, thay thế <tên_miền> bằng tên miền được định cấu hình trong cài đặt DNS của bạn. Bạn sẽ thấy trang đích Chuyển tiếp Email.

  2. Đăng nhập và đưa tên miền của bạn lên tàu

  • Đăng nhập bằng email và mật khẩu hợp lệ.
  • Nhập tên miền bạn muốn thiết lập (tên miền này phải khớp với cấu hình DNS).
  • Làm theo lời nhắc để thêm các thông tin cần thiết MXTXT hồ sơ để xác minh.
  1. Hoàn tất thiết lập
  • Sau khi xác minh, hãy truy cập trang Biệt danh để tạo biệt danh đầu tiên của bạn.
  • Tùy chọn, cấu hình SMTP cho email gửi đi bên trong Thiết lập tên miền. Điều này yêu cầu thêm bản ghi DNS.

[!LƯU Ý] Không có thông tin nào được gửi ra ngoài máy chủ của bạn. Tùy chọn tự lưu trữ và tài khoản ban đầu chỉ dành cho đăng nhập quản trị viên và chế độ xem web để quản lý tên miền, bí danh và cấu hình email liên quan.

Tạo bí danh đầu tiên của bạn

  1. Điều hướng đến Trang bí danh Mở trang quản lý bí danh:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
  1. Thêm một bí danh mới
  • Nhấp chuột Thêm bí danh (phía trên bên phải).
  • Nhập tên bí danh và điều chỉnh cài đặt email nếu cần.
  • (Tùy chọn) Kích hoạt IMAP/POP3/CalDAV hỗ trợ bằng cách chọn hộp kiểm.
  • Nhấp chuột Tạo bí danh.
  1. Đặt mật khẩu
  • Nhấp chuột Tạo mật khẩu để tạo mật khẩu an toàn.
  • Mật khẩu này sẽ được yêu cầu để đăng nhập vào ứng dụng email của bạn.
  1. Cấu hình máy khách email của bạn
  • Sử dụng ứng dụng email như Thunderbird.
  • Nhập tên bí danh và mật khẩu đã tạo.
  • Cấu hình IMAPSMTP cài đặt cho phù hợp.

Cài đặt máy chủ email

Tên người dùng: <alias name>

KiểuTên máy chủCảngBảo mật kết nốiXác thực
SMTPsmtp.<tên_miền>465SSL / TLSMật khẩu bình thường
IMAPimap.<tên_miền>993SSL / TLSMật khẩu bình thường

Gửi / Nhận email đầu tiên của bạn

Sau khi cấu hình xong, bạn sẽ có thể gửi và nhận email đến địa chỉ email mới tạo và tự lưu trữ của mình!

Tại sao điều này không hoạt động bên ngoài Ubuntu

Hiện tại chúng tôi đang tìm cách hỗ trợ Debian, MacOS và sẽ tìm kiếm những người khác. Vui lòng mở một cuộc thảo luận hoặc đóng góp nếu bạn muốn thấy người khác được hỗ trợ.

Tại sao thử thách certbot acme lại thất bại

Lỗi phổ biến nhất là certbot / letsencrypt đôi khi sẽ yêu cầu 2 thách thức. Bạn cần chắc chắn để thêm BOTH bản ghi txt.

Ví dụ: Bạn có thể thấy hai thử thách như thế này: _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"

Cũng có thể quá trình truyền DNS chưa hoàn tất. Bạn có thể sử dụng các công cụ như: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>. Điều này sẽ cho bạn biết liệu những thay đổi trong bản ghi TXT của bạn có nên được phản ánh hay không. Cũng có thể bộ đệm DNS cục bộ trên máy chủ của bạn vẫn đang sử dụng giá trị cũ, không còn hiệu lực hoặc chưa nhận được những thay đổi gần đây.

Một lựa chọn khác là sử dụng các thay đổi DNS tự động của cerbot bằng cách thiết lập /root/.cloudflare.ini tệp có mã thông báo api trong cloud-init/user-data của bạn khi thiết lập VPS ban đầu hoặc tạo tệp này và chạy lại tập lệnh. Thao tác này sẽ tự động quản lý các thay đổi DNS và cập nhật thử thách.

Tên người dùng và mật khẩu xác thực cơ bản là gì?

Đối với việc tự lưu trữ, chúng tôi thêm cửa sổ bật lên xác thực gốc của trình duyệt lần đầu tiên với tên người dùng đơn giản (admin) và mật khẩu (được tạo ngẫu nhiên khi thiết lập ban đầu). Chúng tôi chỉ thêm điều này như một biện pháp bảo vệ trong trường hợp tự động hóa/trình thu thập dữ liệu bằng cách nào đó đánh bại bạn để đăng ký lần đầu tiên trên trải nghiệm web. Bạn có thể tìm thấy mật khẩu này sau khi thiết lập ban đầu trong .env lưu trữ dưới AUTH_BASIC_USERNAMEAUTH_BASIC_PASSWORD.

Làm sao tôi biết được cái gì đang chạy

Bạn có thể chạy docker ps để xem tất cả các container đang chạy đang được quay từ docker-compose-self-hosting.yml tập tin. Bạn cũng có thể chạy docker ps -a để xem mọi thứ (bao gồm cả các container không chạy).

Làm sao tôi biết được nếu có thứ gì đó không chạy mà đáng lẽ phải chạy?

Bạn có thể chạy docker ps -a để xem mọi thứ (bao gồm cả các container không chạy). Bạn có thể thấy nhật ký thoát hoặc ghi chú.

Làm thế nào để tôi tìm thấy nhật ký

Bạn có thể nhận được nhiều bản ghi hơn thông qua docker logs -f <container_name>. Nếu có bất cứ điều gì thoát ra, nó có thể liên quan đến .env tập tin được cấu hình không đúng.

Trong giao diện người dùng web, bạn có thể xem /admin/emails/admin/logs tương ứng với nhật ký email gửi đi và nhật ký lỗi.

Tại sao email gửi đi của tôi lại hết thời gian

Nếu bạn thấy thông báo như Connection timed out khi kết nối đến máy chủ MX... thì bạn có thể cần kiểm tra xem cổng 25 có bị chặn không. Các ISP hoặc nhà cung cấp dịch vụ đám mây thường chặn cổng này theo mặc định, trong trường hợp này bạn có thể cần liên hệ với bộ phận hỗ trợ/gửi phiếu yêu cầu mở cổng này.

Tôi nên sử dụng công cụ nào để kiểm tra các biện pháp thực hành tốt nhất về cấu hình email và danh tiếng IP?

Hãy xem chúng tôi Câu hỏi thường gặp ở đây.