使用 Docker 搭建 Poste.io 邮件服务器的完整指南
Poste.io 是一个功能强大的开源邮件服务器,集成了多个邮件服务组件,如SMTP、IMAP、POP3、Web邮件客户端等。通过 Docker,您可以轻松地在各种操作系统上部署和管理 Poste.io 邮件服务器。本指南将详细介绍如何在不同环境下安装 Docker,配置防火墙规则,并设置 Docker 容器的网络模式,以搭建一个稳定、安全的 Poste.io 邮件服务器。
目录
1. 系统准备
在开始之前,请确保您的服务器具备以下条件:
- 主机名和 DNS 配置:确保系统的主机名正确设置并与 DNS 配置匹配。为您的邮件域名添加 A 记录(指向服务器 IP)和 MX 记录(指向域名邮件服务器)。
- 操作系统更新:保持系统软件包为最新,确保安全性和兼容性。
# Ubuntu/Debian 系统
sudo apt-get update && sudo apt-get upgrade -y
# CentOS 系统
sudo yum update -y
2. Docker 安装方法
Docker 是一个开源的容器化平台,允许您打包应用及其依赖项到一个可移植的容器中。在不同的操作系统和版本上,Docker 的安装方法有所不同。以下将介绍在 Ubuntu、CentOS 和 Debian 系统上安装 Docker 的详细步骤,以及如何安装特定版本的 Docker。
2.1 在 Ubuntu 上安装 Docker
步骤1:卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
步骤2:安装必要的依赖包
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
步骤3:添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
步骤4:设置稳定版仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
步骤5:安装 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
步骤6:验证安装
sudo docker run hello-world
2.2 在 CentOS 上安装 Docker
步骤1:卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
步骤2:安装必要的依赖包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
步骤3:设置稳定版仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
步骤4:安装 Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io
步骤5:启动并启用 Docker
sudo systemctl start docker
sudo systemctl enable docker
步骤6:验证安装
sudo docker run hello-world
2.3 在 Debian 上安装 Docker
步骤1:卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
步骤2:安装必要的依赖包
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
步骤3:添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
步骤4:设置稳定版仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
步骤5:安装 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
步骤6:验证安装
sudo docker run hello-world
2.4 安装特定版本的 Docker
有时需要安装 Docker 的特定版本以兼容某些应用或满足特定需求。
步骤1:列出可用的 Docker 版本
apt-cache madison docker-ce
步骤2:选择并安装特定版本
假设选择版本 5:20.10.7~3-0~ubuntu-focal
:
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
示例:
sudo apt-get install docker-ce=5:20.10.7~3-0~ubuntu-focal docker-ce-cli=5:20.10.7~3-0~ubuntu-focal containerd.io
步骤3:锁定 Docker 版本(防止自动升级)
sudo apt-mark hold docker-ce docker-ce-cli containerd.io
说明:
apt-cache madison docker-ce
列出所有可用的 Docker 版本。- 通过指定版本字符串安装特定版本的 Docker。
- 使用
apt-mark hold
锁定版本,防止未来的系统更新自动升级 Docker。
3. 配置防火墙规则
邮件服务器需要开放特定端口以允许邮件的发送和接收。不同的防火墙管理工具有不同的配置方法,以下将介绍如何在使用 firewalld
、ufw
和 iptables
的系统上开放必要端口或关闭防火墙。
3.1 使用 firewalld
适用系统:主要用于 CentOS、Fedora 等使用 firewalld
作为防火墙管理工具的系统。
步骤1:启动并启用 firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld
步骤2:开放邮件服务器必要端口
# SMTP 端口
sudo firewall-cmd --permanent --add-port=25/tcp
sudo firewall-cmd --permanent --add-port=587/tcp
sudo firewall-cmd --permanent --add-port=465/tcp
# IMAP 端口
sudo firewall-cmd --permanent --add-port=143/tcp
sudo firewall-cmd --permanent --add-port=993/tcp
# POP3 端口
sudo firewall-cmd --permanent --add-port=110/tcp
sudo firewall-cmd --permanent --add-port=995/tcp
# 重载防火墙规则
sudo firewall-cmd --reload
步骤3:验证端口是否开放
sudo firewall-cmd --list-ports
3.2 使用 ufw
适用系统:主要用于 Ubuntu 等使用 ufw
(Uncomplicated Firewall)作为防火墙管理工具的系统。
步骤1:启用 ufw
sudo ufw enable
步骤2:开放邮件服务器必要端口
# SMTP 端口
sudo ufw allow 25/tcp
sudo ufw allow 587/tcp
sudo ufw allow 465/tcp
# IMAP 端口
sudo ufw allow 143/tcp
sudo ufw allow 993/tcp
# POP3 端口
sudo ufw allow 110/tcp
sudo ufw allow 995/tcp
步骤3:验证防火墙状态和开放端口
sudo ufw status verbose
3.3 使用 iptables
适用系统:适用于需要手动配置防火墙规则的系统,如部分 CentOS、Debian 等。
步骤1:开放邮件服务器必要端口
# SMTP 端口
sudo iptables -A INPUT -p tcp --dport 25 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 587 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 465 -j ACCEPT
# IMAP 端口
sudo iptables -A INPUT -p tcp --dport 143 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 993 -j ACCEPT
# POP3 端口
sudo iptables -A INPUT -p tcp --dport 110 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 995 -j ACCEPT
步骤2:保存 iptables 规则
不同的系统有不同的保存方法:
Ubuntu/Debian:
sudo apt-get install iptables-persistent sudo netfilter-persistent save
CentOS:
sudo yum install iptables-services sudo service iptables save sudo systemctl enable iptables
步骤3:验证防火墙规则
sudo iptables -L -v
注意:使用 iptables
需要谨慎操作,错误的规则可能导致服务器无法访问。建议在操作前备份现有规则。
4. 运行 Poste.io 容器
Poste.io 可以通过 Docker 容器运行,支持桥接网络和主机网络两种模式。根据您的网络需求选择合适的网络模式。
4.1 使用桥接网络
桥接网络是 Docker 的默认网络模式,容器通过虚拟网桥与主机和其他容器通信。
步骤1:运行 Docker 容器
sudo docker run -d \
-p 25:25 \
-p 80:80 \
-p 443:443 \
-p 587:587 \
-p 465:465 \
-p 110:110 \
-p 995:995 \
-p 143:143 \
-p 993:993 \
-v /your-data-path:/data \
--name "mailserver" \
analogic/poste.io
参数解释:
-d
:后台运行容器。-p
:端口映射,将主机端口映射到容器端口。-v
:挂载数据卷,确保邮件数据持久化。--name
:为容器指定名称,便于管理。
注意事项:
- 确保主机端口未被其他服务占用。
/your-data-path
替换为实际的数据存储路径。
4.2 使用主机网络
主机网络模式下,容器共享主机的网络堆栈,没有网络隔离,适用于需要高性能网络或与主机紧密集成的场景。
步骤1:运行 Docker 容器
sudo docker run -d \
--network host \
-v /your-data-path:/data \
--name "mailserver" \
analogic/poste.io
参数解释:
--network host
:使用主机网络模式,省略端口映射。- 其他参数与桥接网络模式相同。
优点:
- 更高的网络性能。
- 容器内的服务可以直接使用主机的网络接口。
缺点:
- 缺乏网络隔离,可能带来安全风险。
- 容器端口与主机端口可能冲突。
适用场景:
- 需要高性能网络通信的应用。
- 与主机网络紧密集成的服务。
5. 配置 Poste.io
启动 Docker 容器后,可以通过浏览器访问 http://<你的服务器IP>
或 https://<你的服务器IP>
进入 Poste.io 的管理界面。以下是一些配置建议:
5.1 创建管理员账户
首次访问时会提示创建管理员账户,确保此账户有足够的权限管理整个邮件服务器。
5.2 添加邮件域名
配置您打算管理的邮件域名。例如,添加 example.com
作为您的邮件域名。
5.3 用户和别名管理
为不同的邮件用户添加账号,设置相关别名和转发规则。例如,创建 user@example.com
用户,并设置别名 info@example.com
转发到该用户。
5.4 配置 SSL 证书
为了确保邮件传输的安全性,建议配置 SSL 证书。您可以使用 Let's Encrypt 免费获取 SSL 证书,并在 Poste.io 中应用。
步骤1:获取 SSL 证书
使用 Certbot 获取证书:
sudo apt-get install certbot
sudo certbot certonly --standalone -d mail.example.com
步骤2:配置 Poste.io 使用 SSL 证书
将获取到的证书和私钥挂载到 Docker 容器中,并在 Poste.io 的设置中配置 SSL。
sudo docker run -d \
-p 25:25 \
-p 80:80 \
-p 443:443 \
-p 587:587 \
-p 465:465 \
-p 110:110 \
-p 995:995 \
-p 143:143 \
-p 993:993 \
-v /your-data-path:/data \
-v /etc/letsencrypt/live/mail.example.com/fullchain.pem:/etc/ssl/certs/poste.crt \
-v /etc/letsencrypt/live/mail.example.com/privkey.pem:/etc/ssl/private/poste.key \
--name "mailserver" \
analogic/poste.io
说明:
- 挂载证书文件到容器中的相应路径。
- 在 Poste.io 管理界面中选择使用自定义 SSL 证书。
6. 故障排查
在运行 Poste.io 容器时,可能会遇到各种问题。以下是一些常见问题及解决方法。
6.1 端口冲突
症状:启动容器时提示端口已被占用。
解决方法:
检查占用端口的进程:
sudo lsof -i:25 sudo lsof -i:80 # 依此类推
停止占用端口的服务,例如 Apache 或 Nginx:
sudo systemctl stop apache2 sudo systemctl stop nginx
修改 Docker 容器的端口映射,将占用的端口映射到不同的主机端口。
6.2 数据持久化问题
症状:容器重启后邮件数据丢失。
解决方法:
确保数据卷正确挂载。使用
-v
参数将主机目录挂载到容器的/data
目录。检查挂载路径的权限,确保 Docker 有权限读写。
6.3 防火墙阻止访问
症状:无法通过外部访问邮件服务器。
解决方法:
确认防火墙已开放必要端口(详见3. 配置防火墙规则)。
检查服务器的安全组设置(适用于云服务器,如 AWS、阿里云等)。
6.4 容器日志查看
症状:邮件服务异常,需查看详细日志。
解决方法:
使用
docker logs
查看容器日志:sudo docker logs mailserver
通过 Poste.io 的管理界面查看日志和状态。
7. 安全性提升
为了确保邮件服务器的安全性,建议采取以下措施:
7.1 配置防火墙
- 限制访问:仅允许特定 IP 或网络访问管理界面。
- 启用防病毒和反垃圾邮件:结合 SpamAssassin 等工具,过滤恶意邮件。
7.2 使用强密码和双因素认证
- 为管理员账户和用户账户设置强密码。
- 启用双因素认证(2FA)以增加账户安全性。
7.3 定期更新 Docker 和 Poste.io
- 保持 Docker 引擎和 Poste.io 镜像的最新版本,修补已知的安全漏洞。
# 更新 Docker
sudo apt-get update
sudo apt-get upgrade -y docker-ce docker-ce-cli containerd.io
# 拉取最新的 Poste.io 镜像
sudo docker pull analogic/poste.io
# 重新启动容器
sudo docker stop mailserver
sudo docker rm mailserver
sudo docker run [OPTIONS] analogic/poste.io
7.4 备份数据
- 定期备份
/your-data-path
目录,确保邮件数据的安全和可恢复性。
sudo tar -czvf mailserver_backup_$(date +%F).tar.gz /your-data-path
8. 常见问题
邮件无法发送/接收:
- 确认 DNS 配置是否正确,尤其是 MX 记录指向邮件服务器的 IP 地址。
- 检查防火墙是否开放了所有必要端口。
- 查看容器日志,排查邮件服务异常。
防火墙问题:
- 确保已开放所有必要端口。
- 使用
iptables -L -v
或firewall-cmd --list-ports
检查防火墙规则。
数据持久化:
- 确保数据目录正确挂载,并具有适当的读写权限。
- 使用 Docker 卷管理工具(如 Docker Compose)简化数据卷配置。
SSL 证书问题:
- 确保 SSL 证书路径正确挂载到容器。
- 检查证书是否有效,避免过期或配置错误。
容器无法启动:
- 查看容器日志,识别启动错误。
- 确认 Docker 版本与 Poste.io 镜像兼容。
- 检查系统资源(如内存、磁盘空间)是否充足。
9. 总结
通过本文的详细步骤,您已经掌握了在不同操作系统和环境下使用 Docker 搭建 Poste.io 邮件服务器的完整方法。以下是关键要点总结:
Docker 安装与配置:
- 根据不同操作系统选择合适的 Docker 安装方法。
- 安装特定版本的 Docker 以满足兼容性需求。
防火墙配置:
- 使用
firewalld
、ufw
或iptables
开放必要端口,确保邮件服务的正常运行。 - 根据系统类型选择合适的防火墙管理工具,并正确应用规则。
- 使用
Docker 网络模式:
- 了解桥接网络和主机网络的区别,选择适合的网络模式部署 Poste.io。
- 配置端口映射或共享主机网络,确保容器与外部网络的连接正常。
Poste.io 配置与管理:
- 通过 Docker 容器运行 Poste.io,确保数据持久化。
- 配置管理员账户、邮件域名、用户管理以及 SSL 证书,提升邮件服务器的安全性和功能性。
故障排查与安全性:
- 通过查看容器日志、检查防火墙规则和 DNS 配置,快速定位和解决常见问题。
- 实施安全性措施,如强密码、双因素认证和定期更新,保障邮件服务器的安全。
通过合理配置 Docker 和 Poste.io,您可以构建一个高效、安全且灵活的邮件服务器,满足个人或企业的邮件服务需求。根据实际使用场景,您还可以进一步优化和扩展服务器功能,如集成更多安全工具、设置邮件过滤规则等,以提升邮件服务的质量和可靠性。
附录:常用命令汇总
以下是本文中提及的常用命令,方便快速查阅和使用。
# 2. Docker 安装方法
## 2.1 在 Ubuntu 上安装 Docker
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo docker run hello-world
## 2.2 在 CentOS 上安装 Docker
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
sudo docker run hello-world
## 2.3 在 Debian 上安装 Docker
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo docker run hello-world
## 2.4 安装特定版本的 Docker
apt-cache madison docker-ce
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
sudo apt-mark hold docker-ce docker-ce-cli containerd.io
# 3. 配置防火墙规则
## 3.1 使用 firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --permanent --add-port=25/tcp
sudo firewall-cmd --permanent --add-port=587/tcp
sudo firewall-cmd --permanent --add-port=465/tcp
sudo firewall-cmd --permanent --add-port=143/tcp
sudo firewall-cmd --permanent --add-port=993/tcp
sudo firewall-cmd --permanent --add-port=110/tcp
sudo firewall-cmd --permanent --add-port=995/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
## 3.2 使用 ufw
sudo ufw enable
sudo ufw allow 25/tcp
sudo ufw allow 587/tcp
sudo ufw allow 465/tcp
sudo ufw allow 143/tcp
sudo ufw allow 993/tcp
sudo ufw allow 110/tcp
sudo ufw allow 995/tcp
sudo ufw status verbose
## 3.3 使用 iptables
sudo iptables -A INPUT -p tcp --dport 25 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 587 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 465 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 143 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 993 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 110 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 995 -j ACCEPT
# Ubuntu/Debian
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
# CentOS
sudo yum install iptables-services
sudo service iptables save
sudo systemctl enable iptables
sudo iptables -L -v
# 4. 运行 Poste.io 容器
## 4.1 使用桥接网络
sudo docker run -d \
-p 25:25 \
-p 80:80 \
-p 443:443 \
-p 587:587 \
-p 465:465 \
-p 110:110 \
-p 995:995 \
-p 143:143 \
-p 993:993 \
-v /your-data-path:/data \
--name "mailserver" \
analogic/poste.io
## 4.2 使用主机网络
sudo docker run -d \
--network host \
-v /your-data-path:/data \
--name "mailserver" \
analogic/poste.io
# 5. 配置 Poste.io
- 访问管理界面:http://<你的服务器IP> 或 https://<你的服务器IP>
- 创建管理员账户
- 添加邮件域名
- 管理用户和别名
- 配置 SSL 证书
# 6. 故障排查
- **端口冲突**:
```bash
sudo lsof -i:25
kill -15 <process_id>
- 数据持久化:检查数据卷挂载和权限
- 防火墙阻止访问:确认防火墙规则已正确应用
- 容器日志查看:
sudo docker logs mailserver
7. 安全性提升
- 配置防火墙:限制管理界面访问
- 强密码和双因素认证
- 定期更新 Docker 和 Poste.io
- 定期备份数据
sudo tar -czvf mailserver_backup_$(date +%F).tar.gz /your-data-path
8. 常见问题
邮件无法发送/接收:
- 检查 DNS 配置(A记录、MX记录)
- 确认防火墙端口开放
- 查看容器日志
防火墙问题:
- 使用相应命令检查防火墙状态和规则
数据持久化:
- 确认数据卷正确挂载和权限设置
SSL 证书问题:
- 确保证书路径正确挂载
- 检查证书有效性
容器无法启动:
- 查看容器日志
- 检查 Docker 和 Poste.io 版本兼容性
- 确认系统资源充足
9. 总结
通过本文的详细步骤,您已经成功搭建了一个基于 Docker 的 Poste.io 邮件服务器。以下是关键要点总结:
Docker 安装与配置:
- 根据不同操作系统选择合适的 Docker 安装方法。
- 安装特定版本的 Docker 以满足兼容性需求。
防火墙配置:
- 使用
firewalld
、ufw
或iptables
开放必要端口,确保邮件服务的正常运行。 - 根据系统类型选择合适的防火墙管理工具,并正确应用规则。
- 使用
Docker 网络模式:
- 了解桥接网络和主机网络的区别,选择适合的网络模式部署 Poste.io。
- 配置端口映射或共享主机网络,确保容器与外部网络的连接正常。
Poste.io 配置与管理:
- 通过 Docker 容器运行 Poste.io,确保数据持久化。
- 配置管理员账户、邮件域名、用户管理以及 SSL 证书,提升邮件服务器的安全性和功能性。
故障排查与安全性:
- 通过查看容器日志、检查防火墙规则和 DNS 配置,快速定位和解决常见问题。
- 实施安全性措施,如强密码、双因素认证和定期更新,保障邮件服务器的安全。
通过合理配置 Docker 和 Poste.io,您可以构建一个高效、安全且灵活的邮件服务器,满足个人或企业的邮件服务需求。根据实际使用场景,您还可以进一步优化和扩展服务器功能,如集成更多安全工具、设置邮件过滤规则等,以提升邮件服务的质量和可靠性。
附录:常用命令汇总
以下是本文中提及的常用命令,方便快速查阅和使用。
# 2. Docker 安装方法
## 2.1 在 Ubuntu 上安装 Docker
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo docker run hello-world
## 2.2 在 CentOS 上安装 Docker
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
sudo docker run hello-world
## 2.3 在 Debian 上安装 Docker
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo docker run hello-world
## 2.4 安装特定版本的 Docker
apt-cache madison docker-ce
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
sudo apt-mark hold docker-ce docker-ce-cli containerd.io
# 3. 配置防火墙规则
## 3.1 使用 firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --permanent --add-port=25/tcp
sudo firewall-cmd --permanent --add-port=587/tcp
sudo firewall-cmd --permanent --add-port=465/tcp
sudo firewall-cmd --permanent --add-port=143/tcp
sudo firewall-cmd --permanent --add-port=993/tcp
sudo firewall-cmd --permanent --add-port=110/tcp
sudo firewall-cmd --permanent --add-port=995/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
## 3.2 使用 ufw
sudo ufw enable
sudo ufw allow 25/tcp
sudo ufw allow 587/tcp
sudo ufw allow 465/tcp
sudo ufw allow 143/tcp
sudo ufw allow 993/tcp
sudo ufw allow 110/tcp
sudo ufw allow 995/tcp
sudo ufw status verbose
## 3.3 使用 iptables
sudo iptables -A INPUT -p tcp --dport 25 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 587 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 465 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 143 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 993 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 110 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 995 -j ACCEPT
# 4. 运行 Poste.io 容器
## 4.1 使用桥接网络
sudo docker run -d \
-p 25:25 \
-p 80:80 \
-p 443:443 \
-p 587:587 \
-p 465:465 \
-p 110:110 \
-p 995:995 \
-p 143:143 \
-p 993:993 \
-v /your-data-path:/data \
--name "mailserver" \
analogic/poste.io
## 4.2 使用主机网络
sudo docker run -d \
--network host \
-v /your-data-path:/data \
--name "mailserver" \
analogic/poste.io
# 5. 配置 Poste.io
- 访问管理界面:http://<你的服务器IP> 或 https://<你的服务器IP>
- 创建管理员账户
- 添加邮件域名
- 管理用户和别名
- 配置 SSL 证书
# 6. 故障排查
- **端口冲突**:
```bash
sudo lsof -i:25
kill -15 <process_id>
- 数据持久化:检查数据卷挂载和权限
- 防火墙阻止访问:确认防火墙规则已正确应用
- 容器日志查看:
sudo docker logs mailserver