Poste.io 邮局搭建
使用 Poste.io 在 Docker 中快速搭建邮件服务
Poste.io 是一个基于 Docker 的开源邮件服务器,采用 Haraka + Dovecot + SQLite 作为技术基础。它提供了邮件收发、多域名管理、邮箱容量控制、邮件杀毒、邮件过滤以及 Webmail 等基础功能。此外,Poste.io 还支持投递统计分析、客户端自动适配、一键安装 SSL、邮件转发、邮件别名、Catch-All 等实用功能。
准备工作
- 服务器配置
必须支持 25 端口,推荐配置为 4 核 CPU + 4GB 内存。如果服务器不支持 25 端口,可尝试向服务商申请开放。 域名准备
在 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
为例。
开始安装
- 系统准备
重置服务器系统为 Debian 12。 安装 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 界面继续相应的设置工作。