Hướng dẫn cài đặt Mailpit trên Amazon Linux 2023 và cấu hình cho Laravel
Mailpit là một công cụ kiểm thử email tuyệt vời dành cho các nhà phát triển, được xem là người kế nhiệm hiện đại của MailHog (đã không còn được bảo trì tích cực). Mailpit nhanh hơn, nhẹ hơn và được viết bằng Go.
Bài viết này sẽ hướng dẫn bạn cài đặt Mailpit trên Amazon Linux 2023, cấu hình Nginx làm reverse proxy và kết nối với ứng dụng Laravel.
1. Cài đặt Mailpit
Đầu tiên, hãy tải xuống và cài đặt Mailpit binary mới nhất.
sudo curl -sL https://raw.githubusercontent.com/axllent/mailpit/develop/install.sh | bash
Lệnh trên sẽ tự động tải binary và đặt vào /usr/local/bin/mailpit.
Sau đó, chúng ta sẽ tạo một người dùng hệ thống riêng cho Mailpit để đảm bảo bảo mật:
sudo useradd -r -s /usr/sbin/nologin mailpit
Lấy đường dẫn binary để đảm bảo chính xác:
which mailpit
# Output thường là: /usr/local/bin/mailpit
2. Cấu hình Systemd Service
Để Mailpit chạy nền và tự động khởi động cùng hệ thống, hãy tạo một file service systemd.
Tạo file /etc/systemd/system/mailpit.service:
sudo nano /etc/systemd/system/mailpit.service
Dán nội dung sau vào:
[Unit]
Description=Mailpit
After=network.target
[Service]
User=mailpit
# MP_UI_AUTH_FILE=/etc/mailpit/authfile # Nếu bạn muốn authen
ExecStart=/usr/local/bin/mailpit
Restart=always
[Install]
WantedBy=multi-user.target
Lưu file và thoát. Sau đó reload daemon và khởi động Mailpit:
sudo systemctl daemon-reload
sudo systemctl enable mailpit
sudo systemctl start mailpit
Kiểm tra trạng thái:
sudo systemctl status mailpit
Mặc định, Mailpit sẽ lắng nghe SMTP trên cổng 1025 và Web UI trên cổng 8025.
3. Cấu hình Nginx Reverse Proxy (Tùy chọn)
Nếu bạn muốn truy cập Web UI qua tên miền hoặc subdomain (ví dụ: mail.example.com) thay vì mở cổng 8025 (điều này an toàn hơn), hãy cấu hình Nginx.
Tạo một file cấu hình Nginx mới:
sudo nano /etc/nginx/conf.d/mailpit.conf
Nội dung mẫu:
server {
listen 80;
server_name mail.example.com; # Thay bằng domain của bạn
location / {
proxy_pass http://127.0.0.1:8025;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Cấu hình cho WebSocket (Mailpit sử dụng WebSocket để live update)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Kiểm tra cú pháp và reload Nginx:
sudo nginx -t
sudo systemctl reload nginx
Bảo mật Web UI (Khuyên dùng)
Vì Web UI chứa nội dung email test (có thể nhạy cảm), bạn nên đặt mật khẩu.
- Cài đặt
httpd-toolsđể có lệnhhtpasswd(nếu chưa có):sudo dnf install httpd-tools -y - Tạo file mật khẩu:
sudo htpasswd -c /etc/nginx/.mailpit_htpasswd admin - Cập nhật cấu hình Nginx:
location / { auth_basic "Restricted Area"; auth_basic_user_file /etc/nginx/.mailpit_htpasswd; # ... các cấu hình proxy khác giữ nguyên }
4. Cấu hình Laravel
Cuối cùng, hãy cấu hình ứng dụng Laravel để gửi email qua Mailpit. Mở file .env của dự án Laravel:
MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
Nếu Laravel của bạn nằm trên một server khác với Mailpit, hãy thay MAIL_HOST bằng IP của server cài Mailpit và đảm bảo cổng 1025 được mở trong Security Group (AWS). Tuy nhiên, mô hình phổ biến là cài Mailpit trên cùng server dev/staging.
5. Kiểm tra
- Dùng
tinkerđể gửi thử email:php artisan tinkerMail::raw('Mailpit test on Amazon Linux 2023!', function($msg) { $msg->to('test@example.com')->subject('Test Mailpit'); }); - Truy cập Web UI (qua cổng 8025 hoặc domain Nginx đã cấu hình) để xem email vừa gửi.
Vậy là xong! Bạn đã có một hệ thống hứng email test mạnh mẽ và an toàn.