Перенос почтового сервера с PostfixAdmin и iRedMail

В этой заметке я описываю свой опыт переноса действующего почтового сервера с одной системы на другую. Оба сервера настроены на iRedMail с прикрученным PostfixAdmin. ОС Debian 8 и Debian 9.

Действующий сервер на ОС Debian 8, iRedMail 0.9.7, PostfixAdmin 3.0.0, который я прикручивал используя эту статью — https://serveradmin.ru/ustanovka-i-nastroyka-iredmail/#_postfixadmin. При обновлении PostfixAdmin переставали работать вновь созданные alias (или не не создавались, не суть. О проблеме несовместимости двух продуктов есть много упоминаний на разных форумах, но нового решения так и не поступало.

На данный момент стабильная версия iRedMail 0.9.9 нормально дружит с PostfixAdmin 3.0.2, если всё устанавливать с чистого листа. Я нашёл эту информацию в сети и выполнил чистую установку. Alias из PostfixAdmin 3.0.2 делаются без ошибок и работают.

#Установка на Debian 9.

Советую брать не обрезанный (не минимальный) образ и после установки отключить/удалить apache, если он установлен.

Проверяем содержание файла /etc/hosts. У меня он вида:

<ip-адрес> mail.my-domain.tk mail

Тут должен быть ip вашего сервера и имя вашего домена вместо my-domain.tk. В некоторых инструкциях указан ещё localhost. Что с ним, что без него работает одинаково.

Начало установки:

wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.9.tar.bz2
tar xjf iRedMail-0.9.9.tar.bz2
cd iRedMail-0.9.9
bash iRedMail.sh

Тут соответственно смотрите какой новый пакет вышел и выполняете аналогичные действия.

В процессе установки на первый вопрос ответ Yes, далее каталог почты остаётся по умолчанию, first mail domain — указывается имя домена второго уровня. Т.е. если зарегистрирован домен my-domain.com, почта будет с доменом mail.my-domain.com, то указывается my-domain.com. Но если указать и с mail, то вроде ничего страшного. SOGo и netdata не устанавливаю, потому что не использую.

После установки почтовый сервер надо перезагрузить и проверить доступ веб-панелей по ip. По окончанию установки адреса и пароли, которые были введены показываются на экране. Где остальные данных и пароли тоже пишется в конце установки.

#Перенос старого сервера на новый. Подготовка.

Перед начало можно ознакомиться с официальной инструкцией и пояснениями по переносу — https://docs.iredmail.org/migrate.to.new.iredmail.server.html. Эта самая достоверная, актуальная и правильная информация. Все подготовки я делал согласно ей.

1. Актуализировать структуру SQL на старом сервере под новый (применить все обновления, касаемые SQL). Т.е. если версия почтового сервера 0.9.6, например, а ехать надо на 0.9.9, это значит, что желательно чтобы вид mysql баз был максимально похож на то, что ожидает увидеть последняя версии iRedMail. Поэтому надо по порядку по возможности обновиться с 0.9.6 до 0.9.7, потом с 0.9.7 на 0.9.8, ну и до 0.9.9.

На каком-то из обновлений как раз и ломается связь PostfixAdmin с структурой базы vmail, в которую пишет iRedmail. Теоретически это чинится. Практически ну его в баню. Почему ломается и как можно починить информация есть в виде официальной информации, что именно «поломали» создатели iRedmail при очередном обновлении. Но т.к. на сегодняшний день актуальные версии почтовых инструментов работают без особых проблем на свежей установке, то смысла в ковырянии со старыми версиями не вижу. Тем более всё равно надо обновляться и обновлять ОС.

2. Миграция почтовых ящиков. На этом этапе желательно остановить всю движуху по почте ну или минизировать её.

Чтобы наверняка скопировать нужные каталоги, подключаемся к mysql:

и выполняем запрос такого вида:

mysql> USE vmail;
mysql> SELECT CONCAT(storagebasedirectory, '/', storagenode, '/', maildir) FROM mailbox WHERE username='user@domain.com';

Должно вернуть что-то вроде:

/var/vmail/vmail1/domain.com/z/a/b/user-2017.03.06.14.10.54/

Это означает, что всё хранится в каталогах по умолчанию, а именно в /var/vmail/vmail1. Значит всё это надо скопировать в аналогичный каталог на новом почтовом сервере, если не указывался иной каталог для хранения почты при установке. Я копировал через rsync:

rsync -a /var/vmail/vmail1/ root@22.22.222.222:/var/vmail/vmail1/

Не забываем выставить соответствующие права новым скопированным данным согласно официальной инструкции: это владелец vmail и 0700 по правам.

3. В официальном документе есть ещё такой шаг, но я тут ничего не делал. Migrate Roundcube webmail data.

4. Migrate Amavisd, iRedAPD, iRedAdmin databases. Миграция баз данных.

Я мигрировал вот эти базы:

mysql> SHOW DATABASES;
+———————+
| Database |
+———————+
| amavisd |
| iredadmin |
| iredapd |
| roundcubemail |
| vmail |

mysqldump -u root -pxxxxx amavisd > /var/mysqldump/amavisd.sql
mysqldump -u root -pxxxxx iredadmin > /var/mysqldump/iredadmin.sql
mysqldump -u root -pxxxxx iredapd > /var/mysqldump/iredapd.sql
mysqldump -u root -pxxxxx roundcubemail > /var/mysqldump/roundcubemail.sql
mysqldump -u root -pxxxxx vmail > /var/mysqldump/vmail.sql

Через rsync всё копируется на новый почтовый сервер и восстанавливается:

mysql -u root -pxxxxx amavisd < amavisd.sql

#Установка PostfixAdmin

apt install postfixadmin

Если mysql уже установлен (а он установлен), то на первый вопрос ответить Yes, на второй (про пароль), поле можно оставить пустым и тогда пароль сгенирируется автоматически (и будет доступен в этом файле — nano /etc/dbconfig-common/postfixadmin.conf).

Установка заканчивается вот так и это нормально:

apache2.service is not active, cannot reload.
invoke-rc.d: initscript apache2, action "reload" failed.
Processing triggers for libc-bin (2.24-11+deb9u4) ...
Processing triggers for php7.0-fpm (7.0.33-0+deb9u6) ...
NOTICE: Not enabling PHP 7.0 FPM by default.
NOTICE: To enable PHP 7.0 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php7.0-fpm
NOTICE: You are seeing this message because you have apache2 package installed.

Настройка далее.

ln -s /usr/share/postfixadmin /var/www/html
chown -R www-data /usr/share/postfixadmin

Правка конфига
nano /etc/postfixadmin/config.inc.php

Вот эти строки приводим в соответствии имеющимся данным:

$CONF['database_type'] = $dbtype;
$CONF['database_host'] = $dbserver;
$CONF['database_user'] = $dbuser;
$CONF['database_password'] = $dbpass;
$CONF['database_name'] = $dbname;

В моё случае это выглядело вот так:

$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'хХхХхХхХоооХх';
$CONF['database_name'] = 'vmail';
Если что-то не заработает, то можно прописать данные root пользователя mysql, у него всяк с правами всё хорошо, а потом уже по хорошему сделать отдельного пользователя для базы vmail.

Правка базы. Подключаемся и выполняем команды.

mysql -u root -p

USE vmail;
DROP INDEX domain on mailbox;
DROP INDEX domain on alias;
ALTER TABLE alias ADD COLUMN `goto` text NOT NULL;

У меня проходит всё вот так вот:

Database changed
MariaDB [vmail]> DROP INDEX domain on mailbox;
Query OK, 0 rows affected (0.16 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [vmail]> DROP INDEX domain on alias;
Query OK, 0 rows affected (0.23 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [vmail]> ALTER TABLE alias ADD COLUMN `goto` text NOT NULL;
Query OK, 0 rows affected (0.46 sec)
Records: 0 Duplicates: 0 Warnings: 0

Даём права postfixadmin на базу vmail:

GRANT ALL PRIVILEGES ON vmail. * TO 'postfixadmin'@'localhost';

И чтобы заработали alias, выполнить правку файла /etc/postfix/mysql/virtual_alias_maps.cf, меняем переменную query на ту, что ниже:

query = SELECT alias.goto FROM alias,domain WHERE alias.address='%s' AND alias.domain='%d' AND alias.domain=domain.domain AND alias.active=1 AND domain.backupmx=0 AND domain.active=1

Про то, почему надо сделать замену данных по этой переменной тут — https://unix-garage.tk/?p=168).

Всё готово для окончательной настройки через веб-морду. Переходим в браузер https://ip-address/postfixadmin/setup.php

Генерируем хэш пароль и вставляем в nano /var/www/html/postfixadmin/config.inc.php

Создаём пользователя и проверяем вход. Профит.


Хороший материал, который дал информацию о том, что можно подружить PostfixAdmin и iRedMail — https://itseason.ru/iredmail-install/. Ещё там есть информация как починить alias, но автор так и не признался где он это спёр (или сам додумал), но под копирку взято у меня.

Добавить комментарий