Postfix Admin: различия между версиями
Igor (обсуждение | вклад) |
Igor (обсуждение | вклад) |
||
| (не показаны 4 промежуточные версии этого же участника) | |||
| Строка 148: | Строка 148: | ||
$CONF['database_host'] = '192.168.0.103'; | $CONF['database_host'] = '192.168.0.103'; | ||
$CONF['database_user'] = 'mailadmin'; | $CONF['database_user'] = 'mailadmin'; | ||
$CONF['database_password'] = | $CONF['database_password'] = <пароль к базе данных Postfix Admin>; | ||
$CONF['database_name'] = 'mailadmin'; | $CONF['database_name'] = 'mailadmin'; | ||
| Строка 160: | Строка 160: | ||
Настройка автоматической генерации паролей: | Настройка автоматической генерации паролей: | ||
$CONF['generate_password'] = 'YES'; | $CONF['generate_password'] = 'YES'; | ||
Настройка хранение почтовых ящиков в папках вида domain/username@domain: | |||
$CONF['domain_in_mailbox'] = 'YES'; | |||
Создание базы данных Postfix Admin: | Создание базы данных Postfix Admin: | ||
| Строка 186: | Строка 189: | ||
⛔SQLSTATE[HY000] [2002] No such file or directory | ⛔SQLSTATE[HY000] [2002] No such file or directory | ||
Параметр "Database connection string" содержит строку "'''mysql:mysql:'''host=192.168.0.103;dbname=mailadmin;charset=UTF8". Требуется исправление ошибки в функции "function db_connection_string()" в файле /usr/local/www/mailadmin.mydomain.ru/functions.inc.php: | Параметр "Database connection string" содержит строку "'''mysql:mysql:'''host=192.168.0.103;dbname=mailadmin;charset=UTF8", в которой дублируется подстрока "mysql:". Требуется исправление ошибки в функции "function db_connection_string()" в файле /usr/local/www/mailadmin.mydomain.ru/functions.inc.php: | ||
$dsn = 'mysql:'; | $dsn = 'mysql:'; | ||
if ($socket) { | if ($socket) { | ||
| Строка 199: | Строка 202: | ||
на строку: | на строку: | ||
$dsn .= "host={$CONF['database_host']}"; | $dsn .= "host={$CONF['database_host']}"; | ||
Пример вывода сайта: | Пример вывода сайта: | ||
✅ PHP version - 8.4.12 | |||
✅ PHP version - 8.4. | |||
✅ Postfixadmin public url detected as http://mailadmin.mydomain.ru/ use $CONF['site_url'] to override | ✅ Postfixadmin public url detected as http://mailadmin.mydomain.ru/ use $CONF['site_url'] to override | ||
✅ Postfixadmin installed at - /usr/local/www/mailadmin.mydomain.ru/public | ✅ Postfixadmin installed at - /usr/local/www/mailadmin.mydomain.ru/public | ||
| Строка 213: | Строка 212: | ||
✅ Password hashing - $CONF["encrypt"] = cleartext | ✅ Password hashing - $CONF["encrypt"] = cleartext | ||
✅ Password hashing - $CONF["encrypt"] - hash generation OK | ✅ Password hashing - $CONF["encrypt"] - hash generation OK | ||
✅ Database connection configured OK (using PDO | ✅ Database connection configured OK (using PDO mysql:host=192.168.0.103;dbname=mailadmin;charset=UTF8) | ||
✅ Database connection - Connected OK | ✅ Database connection - Connected OK | ||
✅ Depends on: PHP session support - OK | ✅ Depends on: PHP session support - OK | ||
| Строка 219: | Строка 218: | ||
✅ Depends on: PHP mbstring support - OK | ✅ Depends on: PHP mbstring support - OK | ||
✅ Optional - PHP IMAP functions - OK | ✅ Optional - PHP IMAP functions - OK | ||
Сайт предложит настроить учётную запись администратора, после чего можно использовать Postfix Admin для администрирования почтовых доменов, ящиков и алиасов. | Сайт предложит настроить учётную запись администратора, после чего можно использовать Postfix Admin для администрирования почтовых доменов, ящиков и алиасов. | ||
Текущая версия от 20:56, 5 декабря 2025
Установка postfixadmin-php84
Postfix Admin — веб-инструмент управления, написанный на PHP для Postfix (но прекрасно подходит и для Exim) с виртуальными доменами в стиле Postfix, использующими поиск в MySQL или PostgreSQL. Так-же Postfix Admin работает на Apache, Lighttpd и на любом веб-сервере с поддержкой PHP 5.1.2+.
Подробная информация о Postfix Admin на сайте http://www.postfixadmin.org/
Установка из пакета (предварительная установка пакетов PKG и PHP не требуется, дополнительная информация о которых в статьях PKG и Установка lang/php84; потребуется установка СУБД, например - MySQL, дополнительная информация о которой в статье MySQL):
# pkg install postfixadmin-php84
Проверка установки postfixadmin-php84:
# pkg version -v | grep php84 php84-8.4.5_1 = up-to-date with remote php84-mbstring-8.4.5_1 = up-to-date with remote php84-pdo-8.4.5_1 = up-to-date with remote php84-pdo_sqlite-8.4.5_1 = up-to-date with remote php84-pecl-imap-1.0.3 = up-to-date with remote php84-session-8.4.5_1 = up-to-date with remote postfixadmin-php84-3.4.d.20211018 = up-to-date with remote
Вывод команды содержит список установленных расширений PHP. В списке отсутствует расширение php84-pdo_mysql, которое требуется для СУБД MySQL, если для Postfix Admin будет использована она.
Установка из пакета расширения php84-pdo_mysql:
# pkg install php84-pdo_mysql
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 1 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
php84-pdo_mysql: 8.4.5_1
Number of packages to be installed: 1
19 KiB to be downloaded.
Proceed with this action? [y/N]: y
[1/1] Fetching php84-pdo_mysql-8.4.5_1.pkg: 100% 19 KiB 19.7kB/s 00:01
Checking integrity... done (0 conflicting)
[1/1] Installing php84-pdo_mysql-8.4.5_1...
[1/1] Extracting php84-pdo_mysql-8.4.5_1: 100%
=====
Message from php84-pdo_mysql-8.4.5_1:
--
This file has been added to automatically load the installed extension:
/usr/local/etc/php/ext-30-pdo_mysql.ini.sample
Повторная проверка установки:
# pkg version -v | grep php84 php84-8.4.5_1 = up-to-date with remote php84-mbstring-8.4.5_1 = up-to-date with remote php84-pdo-8.4.5_1 = up-to-date with remote php84-pdo_mysql-8.4.5_1 = up-to-date with remote php84-pdo_sqlite-8.4.5_1 = up-to-date with remote php84-pecl-imap-1.0.3 = up-to-date with remote php84-session-8.4.5_1 = up-to-date with remote postfixadmin-php84-3.4.d.20211018 = up-to-date with remote
Вывод команды содержит список всех необходимых установленных расширений PHP.
Перезапуск PHP-FPM после установки расширений PHP:
# service php_fpm restart Performing sanity check on php-fpm configuration: [28-Apr-2025 16:58:14] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful Stopping php_fpm. Performing sanity check on php-fpm configuration: [28-Apr-2025 16:58:14] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful Starting php_fpm.
Начальная настройка postfixadmin-php84
Копирование структуры сайта:
# cd /usr/local/www # cp -Rp postfixadmin mailadmin.mydomain.ru
Настройка сайта Postfix Admin в файле /usr/local/etc/nginx/mailadmin.mydomain.ru.conf:
server {
listen 80;
server_name mailadmin.mydomain.ru;
access_log /var/log/nginx/mailadmin.mydomain.ru.access.log;
error_log /var/log/nginx/mailadmin.mydomain.ru.error.log;
location / {
root /usr/local/www/mailadmin.mydomain.ru/public;
index index.php;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/www/mailadmin.mydomain.ru/public$fastcgi_script_name;
include fastcgi_params;
}
}
Включение конфигурации сайта Postfix Admin в файл /usr/local/etc/nginx/nginx.conf:
include /usr/local/etc/nginx/mailadmin.mydomain.ru.conf;
Перезагрузка конфигурации Nginx после первоначальной настройки сайта для доступа к нему со стороны Let's Encrypt по HTTP:
# service nginx reload Performing sanity check on nginx configuration: nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Получение сертификата
Получение сертификата для домена:
# certbot --nginx -d mailadmin.mydomain.ru
Скрипт включит следующие строки в файл конфигурации сайта /usr/local/etc/nginx/mailadmin.mydomain.ru.conf:
listen 443 ssl; # managed by Certbot
ssl_certificate /usr/local/etc/letsencrypt/live/mailadmin.mydomain.ru/fullchain.pem; # managed by Certbot
ssl_certificate_key /usr/local/etc/letsencrypt/live/mailadmin.mydomain.ru/privkey.pem; # managed by Certbot
include /usr/local/etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
Перезагрузка конфигурации Nginx для включения доступа по HTTPS:
# service nginx reload Performing sanity check on nginx configuration: nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Окончательная настройка сайта
Настройки Postfix Admin по умолчанию находятся в файле /usr/local/www/mailadmin.mydomain.ru/config.inc.php. Его не рекомендуется изменять на случай обновлений пакета.
Редактирование настроек следует делать в файле /usr/local/www/mailadmin.mydomain.ru/config.local.php (он должен начинаться с префикса):
<?php
Параметр означает, что все необходимые настройки внесены в файл /usr/local/www/mailadmin.mydomain.ru/config.local.php:
$CONF['configured'] = true;
Создание хеша установочного пароля:
# php -r 'echo password_hash("<пароль>", PASSWORD_DEFAULT); echo "\n";'
$2y$12$w7H3Vo2EIuHOHRxObmUWZ.DpsujtU5yy8PWbfYxzXBSe2tun/qjTG
Добавление полученного хеша в файл настроек /usr/local/www/mailadmin.mydomain.ru/config.local.php:
$CONF['setup_password'] = '$2y$12$w7H3Vo2EIuHOHRxObmUWZ.DpsujtU5yy8PWbfYxzXBSe2tun/qjTG';
Настройка языка:
$CONF['default_language'] = 'ru';
Пример настройки доступа Postfix Admin к СУБД в файле /usr/local/www/mailadmin.mydomain.ru/config.local.php
$CONF['database_type'] = 'mysqli'; $CONF['database_host'] = '192.168.0.103'; $CONF['database_user'] = 'mailadmin'; $CONF['database_password'] = <пароль к базе данных Postfix Admin>; $CONF['database_name'] = 'mailadmin';
Настройка SMTP-сервера, куда будут отправляться уведомления о создании почтовых ящиков:
$CONF['smtp_server'] = '192.68.0.105'; $CONF['smtp_port'] = '25';
Настройка способа шифрования паролей почтовых ящиков (в данном случае пароли сохраняются в базе данных Postfix Admin в открытом виде, что небезопасно):
$CONF['encrypt'] = 'cleartext';
Настройка автоматической генерации паролей:
$CONF['generate_password'] = 'YES';
Настройка хранение почтовых ящиков в папках вида domain/username@domain: $CONF['domain_in_mailbox'] = 'YES';
Создание базы данных Postfix Admin:
# mysql -u root -p > create database mailadmin; Query OK, 1 row affected (0.01 sec)
Предоставление доступа пользователю 'mailadmin' к базе данных 'mailadmin' с хоста '<IP-адрес>' (потребуется доступ с хостов, где расположены Postfix Admin, SMTP-сервер и IMAP-сервер) и применение изменений:
> create user 'mailadmin'@'<IP-адрес>' identified by '<пароль>'; Query OK, 0 rows affected (0.04 sec) > grant all on mailadmin.* to 'mailadmin'@'<IP-адрес>'; Query OK, 0 rows affected (0.00 sec) > flush privileges; Query OK, 0 rows affected (0.01 sec)
Переход на сайт:
https://mailadmin.mydomain.ru/setup.php
Вывод команды содержит ошибки:
Errors (MUST be fixed) ⛔Database connection string : mysql:mysql:host=192.168.128.13;dbname=mailadmin;charset=UTF8 ⛔Problem connecting to database, check database configuration ($CONF['database_*'] entries in config.local.php) ⛔SQLSTATE[HY000] [2002] No such file or directory
Параметр "Database connection string" содержит строку "mysql:mysql:host=192.168.0.103;dbname=mailadmin;charset=UTF8", в которой дублируется подстрока "mysql:". Требуется исправление ошибки в функции "function db_connection_string()" в файле /usr/local/www/mailadmin.mydomain.ru/functions.inc.php:
$dsn = 'mysql:';
if ($socket) {
$dsn .= "unix_socket={$socket}";
} else {
$dsn .= "mysql:host={$CONF['database_host']}";
}
Необходима замена строки:
$dsn .= "mysql:host={$CONF['database_host']}";
на строку:
$dsn .= "host={$CONF['database_host']}";
Пример вывода сайта:
✅ PHP version - 8.4.12 ✅ Postfixadmin public url detected as http://mailadmin.mydomain.ru/ use $CONF['site_url'] to override ✅ Postfixadmin installed at - /usr/local/www/mailadmin.mydomain.ru/public ✅ config.local.php file found : /usr/local/www/mailadmin.mydomain.ru/config.local.php ✅ Database - MySQL support available ✅ Database - SQLite support available ✅ Password hashing - $CONF["encrypt"] = cleartext ✅ Password hashing - $CONF["encrypt"] - hash generation OK ✅ Database connection configured OK (using PDO mysql:host=192.168.0.103;dbname=mailadmin;charset=UTF8) ✅ Database connection - Connected OK ✅ Depends on: PHP session support - OK ✅ Depends on: PHP pcre support - OK ✅ Depends on: PHP mbstring support - OK ✅ Optional - PHP IMAP functions - OK
Сайт предложит настроить учётную запись администратора, после чего можно использовать Postfix Admin для администрирования почтовых доменов, ящиков и алиасов.
Приглашение в управление Postfix Admin:

Вид главной страницы Postfix Admin:

Пример почтового алиаса домена и домена, на который будет приходить почта:
