1. 资源准备
  • 系统debian10,AMD EPYC Processor,1h2g
  • 开放外网防火墙 880 8443 25 110 143 465 587 993 995 4190
  • 域名(最好是 .com.net,搭建域名邮箱不能使用纯数字域名,不被信任 )
  • 通配符证书,推荐萌咖杂货店购买一年期的ssl证书,命名为 ca.crtserver.key
  1. docker安装
  1. 部署 poste.io
  • 安装命令: docker pull analogic/poste.io
  • 制作启动脚本: vi poste-start.sh
docker run -d \
    -p 880:80 -p 8443:443 -p 25:25 -p 110:110 -p 143:143 -p 465:465 -p 587:587 -p 993:993 -p 995:995 -p 4190:4190 \
    -e TZ=Asia/Shanghai \
    -v /home/mail-data:/data \
    --name "mailserver" \
    -h "mail.95270811.xyz" \
    --restart=always \
    -t analogic/poste.io
  • 注意: mail.95270811.xyz 要改成自己的域名
  • 启动poste.io: ./poste-start.sh
  1. mailserver设置
  • 浏览器输入: https://ip:8443
  • 注册一个系统管理员,接着跳转到后台
  • 依次点击 System settingsTLS certificate

开启ssl

  1. 域名解析设置(以阿里云为例)
主机记录记录类型记录值
@A1.2.3.4(ip地址)
mailA1.2.3.4(ip地址)
smtpCNAMEmail.95270811.xyz
popCNAMEmail.95270811.xyz
imapCNAMEmail.95270811.xyz
@MXmail.95270811.xyz
@TXTv=spf1 mx ~all
s20220922397._domainkeyTXTk=rsa; p=MII......AB
  • 表里最后一行的数据获得:点击 Virtual domainsshowcreate new key

DKIM

  1. 使用 NginxProxyManager反向代理
  • 编辑 vi docker-compose.yml
version: "3"
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm"
      DB_MYSQL_NAME: "npm"
      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:
      - /home/docker/NginxProxyManager/data:/data
      - /home/docker/NginxProxyManager/letsencrypt:/etc/letsencrypt
    depends_on:
      - db

  db:
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
    volumes:
      - /home/docker/NginxProxyManager/data/mysql:/var/lib/mysql
  • 安装命令: docker compose up -d
  • 验证成功:访问 http://ip:81

后台显示

  • 上图表示 mail.95270811.xyz:8443mail.95270811.xyz 代理,以后访问 mail.95270811.xyz 就不用带端口号啦
  1. 性能调优
  • 运行两日内时不时发现邮件服务不可用,具体表现在后台和前端访问超时无响应,显示 Bad Gateway ,查看官方文档,可在启动脚本加 -e "DISABLE_CLAMAV=TRUE" 参数禁用 CLAMAV (一款用于检测木马、病毒、恶意软件的防病毒引擎),能显著降低对低内存机器的压力。

参考文章: