跳转至内容

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 configuration

托管

注意 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:///"
    </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 可以代理应用程序服务器,例如运行动态 Web 应用程序的 php-fpmuWSGI。以下示例描述了一个基于文件夹的设置,使用非默认端口(为简单起见)。

php-fpm

安装 php-fpmphp-imapAUR。使用 php-fpm 配置 nginx,并使用一个以用户和组 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#Accessibility of uWSGI socket),并 激活 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 数据库布局已过时”。

您可以设置一个 hook,通过 pacman hook 自动运行所需的 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

故障排除

Configuration not found

如果您在 yourdomain/postfixadmin/setup.php 页面中看到应用程序提示无法找到 config.inc.php,请在 /etc/php/php.iniopen_basedir 行中添加 /etc/webapps/postfixadmin(请参阅 PHP#Configuration)。

Blank page on access

如果您看到一个空白页面,请使用 php -l /etc/webapps/postfixadmin/config.inc.php 检查配置文件的语法。

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.