PostfixAdmin

来自 ArchWiki

PostfixAdmin 是一个用于 Postfix 的 Web 界面,用于管理邮箱、虚拟域名和别名。

安装

要使用 PostfixAdmin,您需要一个可用的 Web 服务器 设置。您可以选择可以直接服务 Web 应用程序的 Web 服务器(例如 Apache HTTP Server),或者一个 Web 服务器(例如 Nginx)将请求转发到应用程序服务器(例如 UWSGIphp-fpm)的设置。

注意: Arch Linux 不再支持 IMAP 功能,IMAP php 包不再打包。

接下来,安装 postfixadmin 软件包。

注意: Postfixadmin 应该仅通过 TLS 访问(除非直接从运行它的机器访问),因为它否则会暴露密码和用户数据。

配置

编辑 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 已被弃用。您还需要确保您的配置反映新的二进制文件名。

注意: 从 postfixadmin 2.91 开始,此项已默认正确设置。
/etc/webapps/postfixadmin/config.local.php
$CONF['dovecotpw'] = "/usr/sbin/doveadm pw";
注意: 为了使其工作,仅仅安装 dovecot 是不够的,还需要对其进行配置。请参阅 Dovecot#Dovecot 配置

托管

注意: PostfixAdmin 需要以其自己的用户和组(即 postfixadmin)运行。它正在使用 /etc/webapps/postfixadmin/var/lib/postfixadmin/run/postfixadmin 分别用于配置、模板缓存和(可能)套接字!

Apache

此文章或章节需要扩充。

原因: Apache 章节需要 uWSGI 示例。(在 Talk:PostfixAdmin 中讨论)

apache Web 服务器 可以借助模块(例如 mod_proxy_fcgimod_proxy_uwsgi)来服务动态 Web 应用程序。

php-fpm

安装 并配置 Apache HTTP Serverphp-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-fpmuWSGI,它们运行动态 Web 应用程序。以下示例描述了基于文件夹的设置,使用非默认端口(为了简单起见)。

注意

php-fpm

安装 php-fpmphp-imapAUR。设置 nginxphp-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 中激活 imappdo_mysqlmysqli 扩展。确保您还将 /var/cache/postfixadmin 添加到 php.ini 中的 open_basedir。重启 php-fpm 以使所有这些生效。

nginx 添加以下配置并重启它。

/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 单元。

为 nginx 添加以下配置并重启 nginx

/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 检查配置的语法。