使用 Poste.io 在 Docker 中快速搭建邮件服务

Poste.io 是一个基于 Docker 的开源邮件服务器,采用 Haraka + Dovecot + SQLite 作为技术基础。它提供了邮件收发、多域名管理、邮箱容量控制、邮件杀毒、邮件过滤以及 Webmail 等基础功能。此外,Poste.io 还支持投递统计分析、客户端自动适配、一键安装 SSL、邮件转发、邮件别名、Catch-All 等实用功能。


准备工作

  1. 服务器配置
    必须支持 25 端口,推荐配置为 4 核 CPU + 4GB 内存。如果服务器不支持 25 端口,可尝试向服务商申请开放。
  2. 域名准备
    在 DNS 平台(如 Cloudflare)解析以下记录:

    A       mail          <服务器IP地址>
    CNAME   smtp          mail.your-name.com
    CNAME   pop           mail.your-name.com
    CNAME   imap          mail.your-name.com
    MX      @             mail.your-name.com
    TXT     @             v=spf1 mx -all
    TXT     (添加DKIM Key)
    TXT     _dmarc        v=DMARC1; p=none; pct=100; rua=mailto:admin@your-name.com

以下以 mail.your-name.com 为例。


开始安装

  1. 系统准备
    重置服务器系统为 Debian 12。
  2. 安装 Docker 和 Docker Compose
    执行以下命令安装:

    sudo apt update
    sudo apt upgrade -y
    sudo apt install -y docker.io docker-compose

配置 Poste.io

1. 创建目录

执行以下命令创建目录:

sudo mkdir -p /opt/poste/data
sudo mkdir -p /opt/poste/letsencrypt
sudo mkdir -p /opt/poste/www

2. 进入目录

cd /opt/poste

3. 创建 Docker Compose 文件

编辑 docker-compose.yml 文件:

sudo nano /opt/poste/docker-compose.yml

将以下内容粘贴到文件中:

version: '3'

services:
  poste:
    image: analogic/poste.io
    container_name: poste
    hostname: mail.your-name.com
    domainname: your-name.com
    restart: always
    ports:
      - "25:25"
      - "80:80"
      - "443:443"
      - "110:110"
      - "995:995"
      - "143:143"
      - "993:993"
      - "587:587"
    volumes:
      - /opt/poste/data:/data
      - /opt/poste/letsencrypt/live:/etc/letsencrypt/live
      - /opt/poste/letsencrypt/archive:/etc/letsencrypt/archive
      - /opt/poste/letsencrypt/renewal:/etc/letsencrypt/renewal
      - /opt/poste/www:/var/www/html
    environment:
      - HTTPS=ON

  certbot:
    image: certbot/certbot
    container_name: certbot
    volumes:
      - /opt/poste/letsencrypt:/etc/letsencrypt
      - /opt/poste/www:/var/www/html
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done'"

保存并退出。


4. 启动服务

运行以下命令启动 Poste.io:

sudo docker-compose up -d poste

服务启动后,访问 https://mail.your-name.com,即可进行邮件服务的进一步配置。


更新脚本:自动化配置工具(可选)

如果希望通过脚本简化安装过程,可使用以下 Bash 脚本:

创建脚本文件

nano install_poste.sh

粘贴以下内容:

#!/bin/bash
# Poste.io 邮件服务器安装脚本

echo "Poste.io 是一个开源的邮件服务器解决方案。"
echo "教程介绍: https://www.youtube.com/watch?v=vGkkoZQlBJ8"
echo "-------------------------------------------------------"

# 检测端口 25 是否可用
echo "端口检测"
port=25
timeout=3
if echo "quit" | timeout $timeout telnet smtp.qq.com $port | grep 'Connected'; then
  echo "端口 $port 当前可用"
else
  echo "端口 $port 当前不可用,请检查网络设置"
  exit 1
fi

echo "------------------------"
echo "1. 安装           2. 更新           3. 卸载"
echo "------------------------"
echo "0. 返回上一级"
echo "------------------------"
read -e -p "输入你的选择: " choice

case $choice in
    1)
        read -e -p "请设置邮箱域名 (例如 mail.your-name.com): " yuming
        mkdir -p /home/docker
        echo "$yuming" > /home/docker/mail.txt
        echo "------------------------"
        echo "先解析以下 DNS 记录:"
        echo "A           mail            <你的服务器IP>"
        echo "CNAME       imap            $yuming"
        echo "CNAME       pop             $yuming"
        echo "CNAME       smtp            $yuming"
        echo "MX          @               $yuming"
        echo "TXT         @               v=spf1 mx ~all"
        echo "TXT         ?               ?"
        echo "------------------------"
        echo "按任意键继续..."
        read -n 1 -s -r -p ""

        # 启动 Poste.io 容器
        docker run \
            --net=host \
            -e TZ=Europe/Prague \
            -v /home/docker/mail:/data \
            --name "mailserver" \
            -h "$yuming" \
            --restart=always \
            -d analogic/poste.io

        echo "Poste.io 已安装完成。访问 https://$yuming 进行配置。"
        ;;

    2)
        echo "正在更新 Poste.io 邮件服务器..."
        docker rm -f mailserver
        docker pull analogic/poste.io
        docker run \
            --net=host \
            -e TZ=Europe/Prague \
            -v /home/docker/mail:/data \
            --name "mailserver" \
            -h "$yuming" \
            --restart=always \
            -d analogic/poste.io
        echo "更新完成,访问 https://$yuming 进行检查。"
        ;;

    3)
        echo "正在卸载 Poste.io..."
        docker rm -f mailserver
        docker rmi -f analogic/poste.io
        rm /home/docker/mail.txt
        rm -rf /home/docker/mail
        echo "Poste.io 已卸载。"
        ;;

    0)
        echo "返回上一级。"
        ;;
    *)
        echo "无效的选择,请重试。"
        ;;
esac

保存后,赋予脚本执行权限:

chmod +x install_poste.sh

运行脚本:

./install_poste.sh

至此,Poste.io 邮件服务已配置完成,您可以登录 Web 界面继续相应的设置工作。

添加新评论

7 + 9 =