PostfixAdmin
PostfixAdmin 是一个用于 Postfix 的 Web 界面,用于管理邮箱、虚拟域名和别名。
安装
要使用 PostfixAdmin,您需要一个可用的 Web 服务器 设置。您可以选择可以直接服务 Web 应用程序的 Web 服务器(例如 Apache HTTP Server),或者一个 Web 服务器(例如 Nginx)将请求转发到应用程序服务器(例如 UWSGI 或 php-fpm)的设置。
接下来,安装 postfixadmin 软件包。
配置
编辑 PostfixAdmin 配置文件,全局更改所有 change-this-to-your.domain.tld 实例为适当的值
/etc/webapps/postfixadmin/config.local.php
<?php $CONF['configured'] = true; // correspond to dovecot maildir path /home/vmail/%d/%u $CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'NO'; $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix_user'; $CONF['database_password'] = 'hunter2'; $CONF['database_name'] = 'postfix_db'; $CONF['default_aliases'] = array ( 'abuse' => 'abuse@change-this-to-your.domain.tld', 'hostmaster' => 'hostmaster@change-this-to-your.domain.tld', 'postmaster' => 'postmaster@change-this-to-your.domain.tld', 'webmaster' => 'webmaster@change-this-to-your.domain.tld' ); $CONF['vacation_domain'] = 'autoreply.change-this-to-your.domain.tld'; $CONF['footer_text'] = 'Return to change-this-to-your.domain.tld'; $CONF['footer_link'] = 'http://change-this-to-your.domain.tld';
如果安装了 dovecot 并且您更改了 dovecot 中的密码方案(例如更改为 SHA512-CRYPT),请在 Postfix 中反映这一点
/etc/webapps/postfixadmin/config.local.php
$CONF['encrypt'] = 'dovecot:SHA512-CRYPT';
从 dovecot 2 开始,dovecotpw 已被弃用。您还需要确保您的配置反映新的二进制文件名。
/etc/webapps/postfixadmin/config.local.php
$CONF['dovecotpw'] = "/usr/sbin/doveadm pw";
托管
postfixadmin
)运行。它正在使用 /etc/webapps/postfixadmin
、/var/lib/postfixadmin
和 /run/postfixadmin
分别用于配置、模板缓存和(可能)套接字!Apache
apache Web 服务器 可以借助模块(例如 mod_proxy_fcgi 或 mod_proxy_uwsgi)来服务动态 Web 应用程序。
php-fpm
安装 并配置 Apache HTTP Server 与 php-fpm。使用以用户和组 postfixadmin
运行的 池。套接字文件应可由 http
用户和/或组访问。
在您的 Apache HTTP Server 配置(即 /etc/httpd/conf/httpd.conf
)中包含以下配置,并重启 Web 服务器
/etc/httpd/conf/postfixadmin.conf
Alias /postfixadmin "/usr/share/webapps/postfixadmin/public" <Directory "/usr/share/webapps/postfixadmin/public"> DirectoryIndex index.html index.php <FilesMatch \.php$> SetHandler "proxy:unix:/run/postfixadmin/postfixadmin.sock|fcgi://127.0.0.1/" </FilesMatch> AllowOverride All Options FollowSymlinks Require all granted SetEnv PHP_ADMIN_VALUE "open_basedir = /tmp/:/usr/share/webapps/postfixadmin:/etc/webapps/postfixadmin/:/var/cache/postfixadmin/templates_c" </Directory>
为 postfixadmin 创建一个池,并重启 php-fpm.service
/etc/php/php-fpm.d/postfixadmin.conf
[postfixadmin] user = postfixadmin group = postfixadmin listen = /run/postfixadmin/postfixadmin.sock listen.owner = root listen.group = http listen.mode = 0660 pm = ondemand pm.max_children = 4 php_admin_value['date.timezone'] = Europe/Berlin php_admin_value['session.save_path'] = /tmp php_admin_value['open_basedir'] = /tmp/:/usr/share/webapps/postfixadmin/:/etc/webapps/postfixadmin/:/usr/bin/doveadm:/var/cache/postfixadmin
要仅允许 localhost 访问 postfixadmin(为了提高安全性),请将此添加到之前的 <Directory>
指令中
Order Deny,Allow Deny from all Allow from 127.0.0.1
Nginx
Nginx 可以代理应用程序服务器,例如 php-fpm 和 uWSGI,它们运行动态 Web 应用程序。以下示例描述了基于文件夹的设置,使用非默认端口(为了简单起见)。
- 有关 nginx 中的服务器条目管理,请查看 Nginx#管理服务器条目。
- PostfixAdmin 附带了 uWSGI 的配置。
php-fpm
安装 php-fpm 和 php-imapAUR。设置 nginx 与 php-fpm,并使用以用户和组 postfixadmin
运行的 池。套接字文件应可由 http
用户和/或组访问,但需要位于 /run/postfixadmin
下。这可以通过添加以下行来实现。
/etc/php/php-fpm.d/postfixadmin.conf
[postfixadmin] user = postfixadmin group = postfixadmin listen = /run/postfixadmin/postfixadmin.sock listen.owner = root listen.group = http listen.mode = 0660 pm = ondemand pm.max_children = 4 php_admin_value['date.timezone'] = Europe/Berlin php_admin_value['session.save_path'] = /tmp php_admin_value['open_basedir'] = /tmp/:/usr/share/webapps/postfixadmin/:/etc/webapps/postfixadmin/:/usr/bin/doveadm:/var/cache/postfixadmin
您至少需要在 /etc/php/php.ini
中激活 imap
、pdo_mysql
和 mysqli
扩展。确保您还将 /var/cache/postfixadmin
添加到 php.ini
中的 open_basedir
。重启 php-fpm 以使所有这些生效。
/etc/nginx/sites-available/postfixadmin.conf
server { listen 8081; server_name postfixadmin; root /usr/share/webapps/postfixadmin/public/; index index.php; charset utf-8; access_log /var/log/nginx/postfixadmin-access.log; error_log /var/log/nginx/postfixadmin-error.log; location / { try_files $uri $uri/ index.php; } location ~* \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_pass unix:/run/postfixadmin/postfixadmin.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; } }
uWSGI
安装 uwsgi-plugin-php,为 uWSGI 创建每个应用程序的套接字(请参阅 UWSGI#uWSGI 套接字的可访问性 以供参考),并激活 uwsgi-secure@postfixadmin.socket
单元。
/etc/nginx/sites-available/postfixadmin.conf
server { listen 8081; server_name postfixadmin; root /usr/share/webapps/postfixadmin/public/; index index.php; charset utf-8; access_log /var/log/nginx/postfixadmin-access.log; error_log /var/log/nginx/postfixadmin-error.log; location / { try_files $uri $uri/ index.php; } # pass all .php or .php/path urls to uWSGI location ~ ^(.+\.php)(.*)$ { include uwsgi_params; uwsgi_modifier1 14; uwsgi_pass unix:/run/postfixadmin/postfixadmin.sock; } }
设置
最后,如果您使用 Apache,请导航到 http://127.0.0.1/postfixadmin/setup.php;如果您使用 Nginx,请导航到 http://127.0.0.1:8081/setup.php 以完成设置。在页面底部生成您的设置密码哈希值。
/etc/webapps/postfixadmin/config.local.php
$CONF['setup_password'] = 'yourhashhere';
现在,如果您使用 Apache,您可以在 http://127.0.0.1/postfixadmin/setup.php 创建一个超级管理员帐户;如果您使用 Nginx,则可以在 http://127.0.0.1:8081/setup.php 创建。
技巧与诀窍
Pacman 钩子
有时,在版本升级后需要升级数据库。在这种情况下,您会在登录页面上看到一条消息,提示“PostfixAdmin 数据库布局已过时”。
您可以设置一个钩子,通过 pacman 钩子自动运行所需的 upgrade.php 脚本
/etc/pacman.d/hooks/postfixadmin.hook
[Trigger] Operation = Install Operation = Upgrade Type = Package Target = postfixadmin [Action] Description = Run Postfixadmin upgrade.php to make sure database is up to date When = PostTransaction Exec = /usr/bin/runuser -u postfixadmin -- /usr/bin/php /usr/share/webapps/postfixadmin/public/upgrade.php
故障排除
找不到配置
如果您访问 yourdomain/postfixadmin/setup.php,并且应用程序声明它无法找到 config.inc.php,请将 /etc/webapps/postfixadmin
添加到 /etc/php/php.ini
中的 open_basedir
行(有关参考,请参阅 PHP#配置)。
访问时空白页
如果您得到一个空白页,请使用 php -l /etc/webapps/postfixadmin/config.inc.php
检查配置的语法。