在上一篇文章中,我们解决了最棘手的 SSL 证书与 Cloudflare 架构问题。现在,基础环境已经就绪,我们需要一个图形化界面来管理我们的邮箱域名和用户,而不是去手撸复杂的数据库。PostfixAdmin 就是这样一个基于 Web 的管理工具。
本篇将讲解如何部署 PostfixAdmin,并解决安装过程中常见的加密后端报错问题。
1. 邮件系统的基本工作流
在开始部署前,我们先复习一下邮件是如何发送和接收的,这有助于理解后面 Postfix 和 Dovecot 的关系。
- 编写与发送:用户登录
[email protected],在本地客户端(MUA,如 Thunderbird)编写邮件,通过 SMTP 协议 发送到自己的服务器(MTA,如 Postfix)。 - 中转与投递:发件服务器通过 DNS 查询目标地址,通过 SMTP 协议 将邮件投递到
b.com的服务器。 - 接收与存储:目标服务器收到邮件后,交给投递代理(MDA,如 Dovecot)存入硬盘。
- 拉取阅读:目标用户通过 IMAP/POP3 协议 连接 Dovecot,读取新邮件。

架构提示:虽然我们可以只部署 SMTP 发信,收信走 Cloudflare 转发,但为了拥有完整的收发能力,本系列将带你搭建一套完整的邮件系统。
2. 准备工作:域名与软件下载
2.1 域名解析
前往 DNS 服务商(如 Cloudflare),添加一条 A 记录:
- Type: A
- Name:
mail - Content: 你的 VPS IP 地址
- Proxy Status: DNS Only (灰云) —— 注意:如前文所述,邮件域名必须关闭 CDN。
2.2 下载并解压
进入 Web 目录下载 PostfixAdmin 源码(请根据实际 Web 目录调整路径):
# 下载软件包
wget https://github.com/postfixadmin/postfixadmin/archive/refs/tags/postfixadmin-3.3.15.zip -P /apache/htdocs
# 解压
unzip /apache/htdocs/postfixadmin-3.3.15.zip -d /apache/htdocs
# 重命名为 mail 目录,方便访问
mv /apache/htdocs/postfixadmin-postfixadmin-3.3.15 /apache/htdocs/mail
# 创建必要的缓存目录
mkdir -p /apache/htdocs/mail/templates_c
# 修改权限 (确保 Web 服务器用户有权写入)
chown -R apache:apache /apache/htdocs/mail
chmod 777 -R /apache/htdocs/mail/templates_c2.3 配置 Apache 虚拟主机
修改 Apache 的 SSL 配置文件,新增一个 VirtualHost 指向 /apache/htdocs/mail/public 目录。注意要复用我们在上一篇教程中申请的 Let's Encrypt 证书。

3. 数据库创建
PostfixAdmin 需要一个独立的数据库来存储域名和用户数据。你可以通过 SSH 命令行或 phpMyAdmin 创建。
- 数据库名:例如
postfix - 用户名:例如
postfix - 权限:授予该用户对该数据库的所有权限。


4. 核心配置与加密报错修复
4.1 修改 config.inc.php
复制配置文件模板:
cd /apache/htdocs/mail
cp config.inc.php config.inc.php.bak 编辑 config.inc.php,修改以下关键项:
// 1. 启用配置
$CONF['configured'] = true;
// 2. 数据库信息 (填入第3步创建的信息)
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = '你的数据库密码';
$CONF['database_name'] = 'postfix';
// 3. 关键:更改加密方式为 Dovecot SHA512
// 这样 PostfixAdmin 生成的密码才能被 Dovecot 正确识别
$CONF['encrypt'] = 'dovecot:SHA512';
4.2 解决 Dovecot 依赖报错与权限修正
当你配置完上述加密方式后,访问 setup.php 可能会遇到 doveadm pw failed 报错,或者在登录时提示 Your email address or password are not correct。
原因:PostfixAdmin(运行在 Web 用户下)调用 doveadm 加密密码时,需要读取 Dovecot 的 SSL 配置。而 SSL 私钥文件(server.key)默认权限极高(仅 root 可读),导致 Web 用户因“Permission denied”无法读取,进而加密失败。
解决方案(执行以下 4 步):
安装 Dovecot:
yum install -y dovecot dovecot-mysql配置 Dovecot SSL:
编辑/etc/dovecot/conf.d/10-ssl.conf,指向上一篇教程生成的证书:
注意:路径前必须加<符号ssl = required ssl_cert = </usr/local/apache/conf/ssl/server.crt ssl_key = </usr/local/apache/conf/ssl/server.key关键:赋予权限:
我们需要将 Web 用户(apache)加入 dovecot 组,并且允许该组读取 SSL 私钥。# 1. 将 apache 加入 dovecot 用户组 usermod -aG dovecot apache # 2. 修改私钥文件的所属组为 dovecot chgrp dovecot /usr/local/apache/conf/ssl/server.key # 3. 赋予组读取权限 (640: 只有拥有者和组员可读) chmod 640 /usr/local/apache/conf/ssl/server.key重启生效:
修改权限和组后,必须重启服务才能生效。systemctl restart dovecot systemctl restart httpd # 或 /usr/local/apache/bin/apachectl -k graceful
小技巧:你可以运行 sudo -u apache doveadm pw -s SHA512 -p 'test' 来测试权限是否配置正确。如果能输出哈希值,说明一切正常。
5. 完成安装与管理员设置
解决了报错后,再次刷新 setup.php 页面,应该全绿通过检查。系统会自动在数据库中创建所需的数据表。
5.1 设置 Setup 密码
页面会要求你设置一个 setup_password。输入一个强密码,点击 Generate。系统会生成一串哈希值。

将这串哈希值复制回 config.inc.php:
$CONF['setup_password'] = 'sha512:......'; 5.2 创建超级管理员
回到网页刷新,填写刚才的 Setup 密码,然后创建第一个管理员账号(例如 [email protected])。

5.3 登录验证
访问 login.php,使用刚才创建的管理员账号登录。

至此,PostfixAdmin 面板已部署完成!你可以在这里添加虚拟域名(Virtual Domain)和邮箱用户了。但请注意,此时邮件服务还未生效,因为核心的 Postfix 和 Dovecot 尚未配置。我们将在下一篇教程中完成这最后也是最核心的一步。