Linux docker 部署poste.io+nginx

recallmc 发布于 2026-01-29 122 次阅读


1、官方网站

官网:https://poste.io/

文档:Poste.io documentation

2、准备工作

首先我们要准备一台没有屏蔽25端口出站的服务器,我这里使用的是华为云Flexus应用服务器L实例

要查看是否支持部署邮箱服务,我们可以用以下命令测试

telnet smtp.qq.com 25

若输出是以下内容,则证明该服务器25端口正常的,可以进行部署邮局。

Trying 183.47.120.204…
Connected to smtp.qq.com.
Escape character is '^]'.

然后可以开始设置我们的域名解析,我这里使用的是阿里云,example.com这部分替换你自己的域名,IP替换成自己的服务器IP

主机记录记录类型记录值优先级/说明
@MXmail.example.com优先级 10,邮件服务器域名
mailAIP邮箱服务器IP
@TXTv=spf1 mx ~allSPF 记录,指定允许发送邮件的服务器
s20260121710._domainkeyTXTk=rsa;
p=...
DKIM 公钥记录,确保邮件真实性,这个需要我们部署好服务后获取,具体查看目录7
smtpCNAMEmail.example.com
popCNAMEmail.example.com
imapCNAMEmail.example.com
_dmarcTXTv=DMARC1; p=none; rua=mailto:no-reply@example.comDMARC 记录,处理验证失败的邮件

3、正式部署

这里我使用的是docker部署

关于docker和nginx可以查看:Linux Docker 部署openresty nginx – recallmc blog

创建文件夹:

mkdir -p /poste-captcha
mkdir -p /poste-captcha/data
cd /poste-captcha

创建docker-compose.yml:

vim docker-compose.yml

输入法切换英文输入按 i ,粘贴以下代码,然后按shift+:,输入wq按回车保存并退出

version: '3'

services:
  poste:
    image: analogic/poste.io
    container_name: poste-mail
    restart: unless-stopped
    ports:  #这里配置的所有端口,都需要在服务器控制台放行入方向防火墙规则
      #- "80:80"      #我这里没有添加80和443端口
      #- "443:443"    #因为我要用nginx配置反向代理,端口已经被nginx占用了
      - "25:25"
      - "110:110"
      - "143:143"
      - "465:465"
      - "587:587"
      - "993:993"
      - "995:995"
      - "4910:4910"
    volumes:
      - ./data:/data
    environment:
      - TZ=Asia/Shanghai
      - HTTPS=true
      - DISABLE_CLAMAV=TRUE  # 反病毒,根据需求禁用
      - DISABLE_RSPAMD=FALSE  # 反垃圾邮件,根据需求禁用
      - DISABLE_ROUNDCUBE=FALSE
    networks:
      - openresty-network
networks:   #这里开始是配置外部网络,也是为了反向代理做准备
  openresty-network:
    external: true
    name: openresty-network  

因为是配置外部网络,所有在我们拉取镜像前要先创建网络

docker network create openresty-network
docker-compose up -d 

4、配置反向代理

Linux Docker 部署openresty nginx – recallmc blog中,我已经部署好了nginx,那么我们进入放置配置文件的目录

cd /data/openresty/conf
vim mail.conf

输入法切换英文输入按 i ,粘贴以下代码,保存退出

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    # 原有 server_name,可继续新增更多当前证书支持的域名
    server_name mail.recallmc.com;
        location / {
            # 其它配置
            client_max_body_size 75M;  # 允许的最大文件大小为 20MB
            proxy_pass https://poste-mail;
            proxy_set_header Host $host;
            # real-ip
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header REMOTE-HOST $remote_addr;
            # websocket
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_read_timeout 86400;
            ## replace content ##
            sub_filter_once  off;
            sub_filter '撰写新邮件' '写信';
            sub_filter 'Dark mode' '深色';
            sub_filter 'Light mode' '浅色';
            sub_filter '[Administration]' '控制台';
            sub_filter '>Administration<' '>控制台<';
            sub_filter 'Trusted Senders' '可信发件人';
            sub_filter 'Collected Recipients' '收件人集合';
            sub_filter '' '\n.pro,.brand,.nav-sidebar p.alert{display:none !important}\n';
        }
        
        # ========== 错误页面 ==========
        
        error_page 401 /login;
        error_page 403 /login;
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;
        
        location = /404.html {
            internal;
            return 404 '{"error": "Not Found"}';
        }
        
        location = /50x.html {
            internal;
            return 500 '{"error": "Internal Server Error"}';
        }
}

其中example.com替换你自己的域名,可以看到在配置中多了一段replace content下方的配置,这个是参考了自建邮局poste.io踩坑填坑(文末有彩蛋)-腾讯云开发者社区-腾讯云的文章,可以将付费的pro部分隐藏掉,显得更干净美观

重载nginx

docker exec openresty nginx -s reload

5、注册

然后就可以访问自己的域名进行注册了

在Mailserver hostname填入自己的邮箱域名,例如mail.example.com

Administrator email填入管理员邮箱,例如admin@example.com

然后设置好密码,注册完后进入管理员页面

这里可以看到我还添加了一个no-reply的邮箱,这里和我们在域名解析时设置的DMARC 记录相对应,这样才能生效并给你的邮箱加分

6、配置 Let’s encrypt 证书

recallmc.com替换自己的域名然后保存

7、创建 DKIM 密钥

8、配置服务器反向解析

我部署的服务器是华为云的,华为云是支持配置反向解析到域名的服务的,这个解析也能为你的邮箱加分,以免被识别为垃圾邮箱

顺便提供一个邮箱测试地址:Newsletters spam test by mail-tester.com

邮箱检测工具:Network Tools: DNS,IP,Email

每天有三次免费测试,可以看到自己的邮箱分数和扣分原因,测试发送的邮箱主题和内容建议都使用纯文本,不要带附件,我的已经是满分了哈哈哈