Cài mailcow trên VPS để Gmail chấp nhận email
Kiểm tra outbound port 25 trước khi cài mailcow để tránh mail nằm trong queue rồi bounce. Cấu hình DNS đúng để xử lý lỗi Gmail 550 5.7.25 do thiếu PTR.
Bạn sẽ xây dựng gì
Một mail server hoàn chỉnh trên máy chủ do bạn sở hữu: SMTP để gửi và nhận email, IMAP để điện thoại và laptop luôn đồng bộ, một webmail client và một spam filter chấm điểm mọi message theo cả hai chiều. mailcow-dockerized đóng gói Postfix, Dovecot, Rspamd, SOGo webmail, MariaDB, Redis và một ACME client trong cùng một Docker Compose stack, nên phần mềm không phải là phần khó. Bạn sẽ chạy được hệ thống trong nửa giờ.
Phần khó là mọi thứ xung quanh nó. Email là dịch vụ duy nhất mà phần còn lại của Internet chủ động không tin tưởng một server mới, và khoảng cách giữa “chạy được” với “Gmail âm thầm nuốt hết mọi message” chủ yếu nằm ở 4 DNS record và 1 thiết lập về IP reputation mà bạn có thể không hoàn toàn kiểm soát. Hãy đọc các điều kiện tiên quyết bên dưới trước khi thuê bất kỳ thứ gì. Nếu đọc xong mà bạn quyết định việc xây dựng reputation không đáng công, đó vẫn là một lựa chọn hợp lý; bài tổng hợp về những gì thực sự đáng tự host trong 2026 xếp email vào nhóm “chỉ nên làm nếu bạn thực sự muốn” chính vì các lý do này.
Điều kiện tiên quyết chính là toàn bộ dự án
Chỉ cần thiếu một điều kiện là bạn sẽ gửi email nhưng email không bao giờ đến nơi. Theo thứ tự tương đối về tần suất khiến mọi người gặp sự cố:
Phải mở port outbound 25. Server của bạn gửi email đến Gmail và Microsoft qua TCP port 25. Nhiều nhà cung cấp VPS và cloud mặc định chặn outbound 25 để chống spam. Việc chặn này thường không có thông báo: lúc boot không có lỗi, mọi thứ vẫn trông bình thường, còn email nằm ở trạng thái deferred trong queue cho đến khi Postfix bỏ cuộc và trả lại email dưới dạng bounce (mailcow đặt thời gian tối đa lưu email trong queue là năm ngày). Hãy test trước khi cài bất kỳ thứ gì. Nếu port bị chặn, cách xử lý duy nhất là gửi support ticket và yêu cầu nhà cung cấp mở port; một số nhà cung cấp sẽ mở cho các tài khoản đã hoạt động đủ lâu, một số khác thì không bao giờ mở.
IP sạch và có reputation chấp nhận được. IP VPS được tái sử dụng thường đã có trong blocklist vì spam từ tenant trước. Hãy kiểm tra IP của bạn bằng dịch vụ như Spamhaus lookup hoặc mxtoolbox trước khi quyết định triển khai. IP đã bị liệt kê sẽ khiến email bị reject, và bạn không thể xử lý việc này chỉ bằng code.
Có quyền quản lý DNS và record PTR chính xác. Bạn cần thêm record vào zone của domain, đồng thời cần reverse DNS (PTR) cho IP của server, trỏ ngược về mail hostname. PTR gần như không bao giờ được cấu hình trong DNS panel của bạn. Record này do bên sở hữu IP quản lý, nên bạn phải cấu hình trong control panel của nhà cung cấp VPS hoặc yêu cầu qua ticket.
6 GiB RAM và 2 vCPU là mức tối thiểu thoải mái. Mức tối thiểu riêng của mailcow là 6 GiB RAM cộng với 1 GiB swap cho một installation riêng, và mailcow khuyến nghị 8 GiB khi có một số lượng người dùng nhất định phụ thuộc vào hệ thống. Khi RAM thấp hơn khoảng 2.5 GiB, generate_config.sh sẽ đề nghị tắt virus scanner ClamAV để kernel không bắt đầu kill các container. Mức disk tối thiểu được mailcow ghi rõ là 20 GiB trước khi lưu bất kỳ email nào. Vì vậy, hãy bắt đầu với dung lượng lớn hơn mức đó và chừa thêm chỗ để mailbox tăng dần.
Cần có DNS name, không dùng IP trần. Chọn một hostname như mail.example.com. Tên duy nhất này sẽ trở thành MAILCOW_HOSTNAME, subject của TLS certificate, đích của PTR và SMTP banner. Hãy dùng nhất quán ở mọi nơi.
Bước 1: Xác nhận cổng outbound 25 đang mở
Hãy làm việc này trước. Nếu bước này thất bại thì mọi việc khác đều tốn công vô ích. Từ VPS mới tạo, hãy thử mở một phiên SMTP với mail server thực:
sudo apt update && sudo apt install -y netcat-openbsd
nc -vz -w 5 gmail-smtp-in.l.google.com 25Kết quả hoạt động sẽ trả về ngay:
Connection to gmail-smtp-in.l.google.com (142.250.x.x) 25 port [tcp/smtp] succeeded!Nếu cổng bị chặn, lệnh sẽ treo đủ năm giây rồi thất bại:
nc: connect to gmail-smtp-in.l.google.com port 25 (tcp) timed out: Operation now in progressTrên VPS mới tạo không có outbound firewall rule do bạn tự cấu hình, timeout đó là do provider chặn. Đây là bộ lọc mạng ở phía provider, không phải firewall của bạn, nên không có thay đổi cục bộ nào có thể khắc phục. Hãy mở ticket với nội dung: "Please enable outbound TCP port 25 for my VPS at <IP>; I am running a legitimate mail server." Không cài mailcow cho đến khi lệnh này trả về "succeeded". Lưu ý rằng inbound 25 (các server khác kết nối đến bạn) là một đường kết nối riêng và thường được mở; provider thường giới hạn phía outbound.
Bước 2, Thiết lập các bản ghi DNS ngay
Thay đổi DNS cần thời gian để propagate, vì vậy hãy publish mọi thứ có thể trước khi cài đặt. Giả sử domain của bạn là example.com, mail host là mail.example.com và IP là 10.0.0.10. Trong zone, hãy tạo:
mail.example.com. A 10.0.0.10
mail.example.com. AAAA 2001:db8::10 ; only if you have IPv6
example.com. MX 10 mail.example.com.
example.com. TXT "v=spf1 mx -all"
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:postmaster@example.com"Bản ghi SPF có nghĩa là “chỉ MX của tôi được phép gửi cho domain này, từ chối các nguồn còn lại”. Bắt đầu DMARC với p=none để theo dõi các report mà không làm bounce mail của chính bạn; chuyển sang p=quarantine rồi p=reject sau khi xác nhận alignment hoạt động đúng. Cố ý còn thiếu 2 bản ghi: DKIM, do mailcow tạo cho bạn ở Bước 6, và PTR, bạn thiết lập ngay trong panel của provider.
Đặt PTR (reverse DNS) của 10.0.0.10 thành mail.example.com, chính xác là giá trị MAILCOW_HOSTNAME. Đây là bản ghi mà đa số mọi người quên, và các provider lớn sẽ từ chối mail nếu thiếu hoặc sai bản ghi này. Nếu panel không có trường rDNS, hãy mở ticket.
Bước 3, Cài đặt Docker
mailcow cần Docker Engine 24.0 trở lên và Docker Compose 2.0 trở lên. Compose plugin (docker compose) là cách đơn giản nhất, nhưng mailcow cũng hỗ trợ binary docker-compose độc lập. Hãy dùng convenience script chính thức của Docker thay vì package docker.io của Ubuntu. Package này hoàn toàn không kèm Compose plugin:
curl -fsSL https://get.docker.com | sudo sh
sudo docker compose versionBạn sẽ thấy một dòng Docker Compose version báo phiên bản v2.x hoặc v5.x. Compose v5, được phát hành vào năm 2025, có chức năng giống hệt v2. Cả hai đều đáp ứng yêu cầu của mailcow. Nếu docker compose version in ra docker: 'compose' is not a docker command, Docker Engine đã được cài đặt nhưng Compose plugin chưa có. Hãy cài plugin từ repository của Docker, chạy lại script ở trên hoặc xem hướng dẫn cơ bản về Docker Compose của chúng tôi. Hướng dẫn này cài đặt cả hai thành phần từ apt repository của Docker.
Bước 4, Clone mailcow và tạo cấu hình
cd /opt
sudo git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
umask
sudo ./generate_config.shViệc kiểm tra `umask in ra 0022 là theo đúng các bước cài đặt của mailcow. Các bước này đặt umask 0022 trước khi clone. mailcow không kiểm tra giá trị này. Một root shell mới trên Ubuntu 24.04 đã có sẵn 0022. Sau đó, script hỏi thông tin quan trọng duy nhất: hostname đầy đủ. Nhập mail.example.com. Giá trị này phải khớp chính xác với bản ghi A và PTR. Script ghi cấu hình vào mailcow.conf, là environment file duy nhất mà toàn bộ stack đọc. Mở file này nếu cần đổi các web port (HTTP_PORT, HTTPS_PORT`) hoặc tắt ClamAV trên máy có cấu hình nhỏ:
MAILCOW_HOSTNAME=mail.example.com
HTTP_PORT=80
HTTPS_PORT=443
SKIP_CLAMD=n # set to y to drop the virus scanner on a <2.5 GiB box`SKIP_FTS=y` là tùy chọn khác cần cân nhắc trên máy có ít RAM. Full-text search là thành phần ngốn bộ nhớ nhiều thứ hai theo tài liệu mailcow. Bỏ qua nó chỉ khiến bạn không thể tìm kiếm nội dung email trong webmail.
Giữ nguyên `HTTP_PORT=80 và HTTPS_PORT=443, trừ khi một dịch vụ khác trên host đã dùng các port này. ACME client tích hợp của mailcow mặc định dùng HTTP-01 challenge. Challenge này cần port 80 có thể truy cập từ Internet để cấp certificate. (mailcow 2026-03 trở lên có thể dùng DNS-01 challenge với ACME_DNS_CHALLENGE=y`. Cách này không cần port 80 nhưng cần API access đến DNS host của bạn.) Vì vậy, layout đơn giản không chạy một cấu hình nginx-Certbot riêng trên cùng máy. mailcow tự cấp và gia hạn TLS nội bộ. Một service thứ hai chiếm port 80/443 sẽ làm hỏng cơ chế này.
mailcow có tài liệu về phương án thay thế: bind các web listener vào localhost bằng `HTTP_BIND=127.0.0.1 HTTP_PORT=8080 HTTPS_BIND=127.0.0.1 HTTPS_PORT=8443`, đặt reverse proxy trên port 80 và 443, rồi trỏ mailcow đến các certificate nếu bạn muốn Certbot cục bộ quản lý chúng. Bạn cũng cần thêm renewal hook. Cách này có nhiều thành phần phải quản lý hơn trên mail server. Trade-off tương tự cũng áp dụng cho mọi service khác cần public web front end: một build như Halcyon biến thư viện Jellyfin thành cửa hàng video kiểu thập niên 90, vốn yêu cầu reverse proxy riêng trên port 443, nên chạy trên host khác trừ khi bạn đặt mailcow phía sau proxy đó. Ngoại lệ là service không bao giờ yêu cầu public web port: một RustDesk relay tự host chỉ listen trên dải port 21115 đến 21119 riêng của nó. Service này có thể dùng chung máy, miễn là máy vẫn còn đủ băng thông dự phòng.
Bước 5, Khởi động stack và đăng nhập
sudo docker compose pull
sudo docker compose up -d
sudo docker compose psLệnh pull sẽ tải khoảng hai chục image. Hãy chờ vài phút. Khi `docker compose ps hiển thị mọi container đều running (hoặc healthy), mở https://mail.example.com/admin trong browser. Tài khoản admin mặc định có username admin và password moohoo. Đổi password ngay trong admin UI tại System → Configuration, sau đó vào Access → Administrators. Nếu browser cảnh báo NET::ERR_CERT_AUTHORITY_INVALID`, certificate ACME chưa được cấp. Xem phần xử lý lỗi ACME bên dưới trước khi kết luận hệ thống bị lỗi. Trong 1 hoặc 2 phút đầu, certificate self-signed tạm thời là bình thường.
Bước 6, Thêm domain, mailbox và publish DKIM
Trong admin UI, mở E-Mail → Configuration. Trong tab Domains, nhấp Add domain và nhập `example.com. Sau đó, trong mục Mailboxes, nhấp Add mailbox để tạo you@example.com` cùng password. Mailbox này đã có thể truy cập qua IMAP.
Tiếp theo là DKIM key. Vào System → Configuration, rồi chọn Options → ARC/DKIM keys. mailcow có thể đã tự tạo key khi bạn thêm domain. Nếu chưa có, hãy tạo key tại đây, chọn domain, giữ selector `dkim`, chọn 2048-bit rồi nhấp Add. Sao chép giá trị TXT dài mà giao diện hiển thị và publish record đó như sau:
dkim._domainkey.example.com. TXT "v=DKIM1;k=rsa;t=s;s=email;p=MIIBIjANBgkqh...long-key...QAB"Trang Domains của mailcow có nút DNS, liệt kê mọi record cần có và hiển thị dấu tick màu xanh hoặc dấu chéo màu đỏ theo trạng thái record thực tế đã publish. Dùng trang này làm checklist. Hãy làm cho mọi dòng đều màu xanh trước khi kiểm tra khả năng gửi nhận email. Dòng DKIM màu đỏ sau khi publish thường là do key bị chia sai thành các TXT chunk. Key 2048-bit dài hơn giới hạn 255 ký tự của một chuỗi TXT đơn, vì vậy hãy dán nó thành một giá trị logic duy nhất và để DNS host tự chia thành các chunk.
Bước 7, Kiểm tra khả năng gửi mail và đạt 10/10
Truy cập mail-tester.com, sao chép địa chỉ ngẫu nhiên được hiển thị, rồi gửi một message đến địa chỉ đó từ mailbox mới. Đăng nhập vào SOGo webmail tại https://mail.example.com/SOGo và gửi từ đó. Sau đó nhấp vào "Then check your score".
Mục tiêu là đạt 10/10. Các lỗi thường bị trừ điểm và nguyên nhân:
- SPF không khớp, bản ghi
MX/SPF bị thiếu hoặc không bao gồm IP gửi mail. Kiểm tra lại SPF TXT. - Không xác minh được chữ ký DKIM, bản ghi TXT của
dkim._domainkeybị thiếu, chưa propagate xong hoặc bị sai nội dung. Đây là lỗi thường gặp nhất. - Không có PTR / PTR không khớp, reverse DNS không phân giải về
mail.example.com. Sửa tại nhà cung cấp. - IP có trong blocklist, do reputation trước đó của IP. Yêu cầu gỡ khỏi danh sách hoặc xin một IP sạch hơn.
Không gửi mail thật đến Gmail hoặc Outlook cho đến khi kết quả đạt 10/10. Điểm thấp cùng với IP mới có thể khiến domain của bạn bị đánh dấu ngay từ ngày đầu.
Bước 8, Kết nối mail client thực
Cấu hình Thunderbird, Apple Mail hoặc điện thoại của bạn kết nối đến server bằng các thiết lập sau. Host của server cho tất cả client là mail.example.com:
- IMAP: port 993, SSL/TLS (hoặc 143 với STARTTLS)
- SMTP submission: port 465, SSL/TLS (hoặc 587 với STARTTLS)
- Username: địa chỉ đầy đủ,
you@example.com - Password: mật khẩu mailbox bạn đã đặt
Không bao giờ gửi mail từ client qua port 25. Port này chỉ dùng cho kết nối server-to-server. mailcow không cung cấp authenticated submission trên port đó, nên client kết nối đến port này sẽ bị từ chối. Nếu client báo Relay access denied, client đang cố gửi qua port 25 hoặc không có authentication. Hãy chuyển sang port 465 hoặc 587 và dùng credentials của mailbox.
Bước 9, Sao lưu những dữ liệu thực sự quan trọng
mailcow có sẵn script sao lưu, tạo snapshot cho mọi volume có trạng thái. Chạy script này để lưu vào một disk bên ngoài hoặc một remote đã mount:
sudo MAILCOW_BACKUP_LOCATION=/opt/mailcow-backups \
./helper-scripts/backup_and_restore.sh backup allall sao lưu 6 thành phần. Mất bất kỳ thành phần nào cũng làm mất dữ liệu: vmail (các mailbox thực tế), crypt (các key dùng để giải mã vmail; không có thành phần này thì key vô dụng), mysql (MariaDB lưu domain, user, alias và các thiết lập), redis (trạng thái queue và cache), rspamd (dữ liệu spam/ham đã học), và postfix (mail queue). Script chạy bên trong một helper container và ghi các archive đã nén, nên backup vẫn nhất quán ngay cả khi stack đang hoạt động. Tự động chạy script bằng cron hằng đêm và thêm --delete-days 14 để xóa các bộ backup cũ. Cron job khi bị lỗi thường sẽ fail im lặng, vì vậy hãy gửi exit status của script đến nơi bạn thực sự có thể nhận biết; một ntfy server tự host có thể dùng một lệnh curl trên cùng cron entry để gửi thông báo lỗi đến điện thoại ngay trong đêm xảy ra lỗi. Restore dùng chính script này với restore. Tùy chọn đó liệt kê các snapshot và cho phép bạn chọn dữ liệu cần khôi phục. Một backup chưa từng được test restore chỉ là hy vọng, không phải backup. Hãy chạy thử một dry run trên một VPS tạm.
Bước 10, cập nhật theo lịch
mailcow cập nhật bằng script riêng. Script này kéo code mới, migrate mailcow.conf, tải trước các image và lần lượt restart các container:
cd /opt/mailcow-dockerized
sudo ./update.sh --check # reports whether an update exists, changes nothing
sudo ./update.sh # applies itHãy backup trước (Bước 9), vì việc migrate schema rất khó đảo ngược. Các bản cập nhật thường xuyên được phát hành và bao gồm các bản sửa lỗi bảo mật cho những daemon public Internet, vì vậy không để mail server không được cập nhật trong nhiều tháng. Nếu một bản cập nhật khiến một container chuyển sang trạng thái không healthy, sudo docker compose logs --tail=50 <service>-mailcow sẽ cho biết daemon không khởi động lại thành công.
Lưu ý về hardening
mailcow tự chạy service netfilter (netfilter-mailcow) để ban các IP liên tục gửi request vào các cổng mail và webmail, nên phần mail đã được bảo vệ sẵn. Tuy nhiên, cơ chế này không bảo vệ SSH trên chính host. SSH vẫn được expose và vẫn bị brute-force. Hãy kết hợp bản triển khai này với Fail2ban monitor log xác thực SSH và chỉ cho phép đăng nhập bằng key. Đặt mật khẩu mạnh cho admin UI của mailcow. Tốt nhất là không expose UI này ra public Internet hoặc đặt nó phía sau VPN.
Các tình huống lỗi và chuỗi lỗi chính xác
Mail queue bị treo và không bao giờ gửi được. Chạy sudo docker compose exec postfix-mailcow postqueue -p hoặc xem mail queue trong admin UI; các entry sẽ ở trạng thái deferred, có thể kéo dài đến năm ngày trước khi Postfix bounce chúng, với:
status=deferred (connect to gmail-smtp-in.l.google.com[142.250.x.x]:25: Connection timed out)Gần như luôn là do provider chặn port 25 outbound (Bước 1). Rule outbound trong firewall của chính host cũng gây ra timeout tương tự, vì vậy hãy loại trừ nguyên nhân này trước; nếu host không có vấn đề, không thể sửa bằng config, hãy mở ticket. Đây không phải lỗi DNS hay TLS; dấu hiệu nhận biết là từ timed out xuất hiện khi kết nối đến remote MX trên port 25.
Gmail đánh dấu mọi thư là spam hoặc bounce thư. Mở message trong Gmail, chọn "Show original", rồi đọc kết quả xác thực. dkim=fail hoặc dkim=none có nghĩa là TXT dkim._domainkey bị thiếu, sai nội dung hoặc chưa propagate xong. Publish lại chính xác nội dung mà trang ARC/DKIM hiển thị và chờ TTL. spf=fail có nghĩa là các record SPF/MX không bao phủ IP của bạn. Alignment là yếu tố quyết định; chỉ cần một bước kiểm tra fail là thư có thể vào spam.
Bị các provider lớn từ chối ngay khi connect. Bounce hoặc log của Postfix sẽ chứa lỗi từ chối PTR của Gmail:
550-5.7.25 [10.0.0.10] The IP address sending this message does not have a PTR
550-5.7.25 record setup, or the corresponding forward DNS entry does not match
550 5.7.25 the sending IP. As a policy, Gmail does not accept messages from IPs
550 5.7.25 with missing PTR records.Mã 550 5.7.25 có nghĩa là reverse DNS bị thiếu hoặc không khớp. Đặt PTR của IP thành mail.example.com tại provider (Bước 2). Forward (A) và reverse (PTR) phải khớp, đồng thời cả hai phải chỉ đến cùng một host mà mailcow dùng để chào các server khác.
Browser hiển thị cảnh báo certificate và không bao giờ hết. Container acme-mailcow không lấy được certificate hợp lệ. Kiểm tra log của container:
sudo docker compose logs acme-mailcow | tail -n 40Dòng như Cannot validate any hostnames, skipping Let's Encrypt for 1 hour. hoặc lỗi challenge có nghĩa là port 80 không thể truy cập từ Internet, hoặc A record không trỏ đến server này. Nếu bạn đã publish record AAAA, hãy kiểm tra cả record đó: mailcow validate dựa trên record AAAA trước và bỏ qua bước kiểm tra A khi AAAA tồn tại. Vì vậy, AAAA sai hoặc đường IPv6 không thể truy cập port 80 sẽ làm bước validation fail dù A record đúng. Xác nhận mail.example.com resolve đến máy này, mở port 80 và 443 qua mọi host firewall, đồng thời bảo đảm không có process khác bind vào các port đó. Sau khi sửa nguyên nhân, restart client bằng sudo docker compose restart acme-mailcow thay vì chờ hết thời gian back-off một giờ.
FAQ
Tự host email có thực sự đáng không?
Nếu bạn muốn tự sở hữu dữ liệu, dùng alias không giới hạn và toàn quyền kiểm soát, thì có. mailcow cung cấp một stack chuyên nghiệp với chi phí tương đương một VPS. Nhưng khả năng email vào inbox luôn cần được theo dõi: reputation của IP, việc đồng bộ DNS và giám sát blocklist không bao giờ kết thúc hoàn toàn. Với địa chỉ email doanh nghiệp quan trọng, nơi chỉ một ngày nằm trong spam folder của người khác cũng gây thiệt hại, managed provider là lựa chọn thực tế hơn. Hãy tự host khi bạn coi trọng quyền kiểm soát hơn sự tiện lợi và thực sự sẵn sàng vận hành hệ thống. Nếu mục tiêu thực sự của bạn là đưa dữ liệu ra khỏi server của người khác chứ không nhất thiết phải là email, hãy bắt đầu với một dịch vụ không gặp vấn đề deliverability: thư viện ảnh hoàn toàn không có vấn đề này, và bài so sánh PhotoPrism và Immich của chúng tôi trình bày mức RAM tối thiểu cùng các lệnh backup cho mô hình chạy trên cùng loại VPS.
Làm sao biết outbound port 25 có bị chặn không?
Chạy nc -vz -w 5 gmail-smtp-in.l.google.com 25 trên server. "succeeded!" nghĩa là port đang mở; nếu thấy timed out sau thời gian chờ thì port bị chặn. Nếu máy không có outbound firewall rule nào do bạn tự cấu hình, nguyên nhân là provider. Đây là lý do phổ biến nhất khiến server tự host có thể nhận mail nhưng không gửi được mail. Cách duy nhất để xử lý provider block là yêu cầu provider mở port; không có thiết lập local nào thay đổi được việc này.
Tại sao mail của tôi vẫn vào spam folder của Gmail?
Gần như luôn là do chuỗi xác thực bị lỗi. Trong Gmail, dùng "Show original" rồi tìm spf=pass, dkim=pass và dmarc=pass. dkim=fail cho thấy bản ghi TXT dkim._domainkey bị thiếu hoặc sai. PTR không khớp hoặc IP mới chưa có lịch sử gửi mail cũng làm giảm khả năng vào inbox. Trước tiên, hãy đưa kết quả trên mail-tester.com lên 10/10. Sau đó warm up IP từ từ, bắt đầu với vài message mỗi ngày rồi tăng dần, thay vì gửi một lượng lớn ngay từ ngày đầu.
Chính xác thì tôi cần backup những gì?
Chạy backup_and_restore.sh backup all và lưu toàn bộ dữ liệu backup bên ngoài server. Lệnh này backup vmail (mailbox), crypt (các key dùng để giải mã mailbox), database MariaDB (domain, user, alias và setting), Redis, dữ liệu đã học của Rspamd và Postfix queue. Volume crypt là phần nhiều người bỏ sót. Không có volume này, bản backup vmail chỉ là ciphertext không thể đọc được. Hãy test restore lên một máy tạm ít nhất một lần.
Tôi có thể chạy mailcow trên VPS 2 GB không?
Không ổn định. generate_config.sh đề nghị tắt ClamAV khi RAM thấp hơn khoảng 2.5 GiB. Ngay cả khi đã tắt ClamAV, Rspamd, Dovecot, MariaDB và các thành phần khác trong stack vẫn tranh chấp memory. Vì vậy, hệ thống sẽ dùng swap và gặp OOM kill khi có tải thực tế. Hãy xem 6 GiB RAM cộng 1 GiB swap là mức tối thiểu cho một installation ổn định chỉ có một user. Chuyển lên 8 GiB ngay khi có hơn một vài người phụ thuộc vào hệ thống.