В этой заметке я описываю свой опыт переноса действующего почтового сервера с одной системы на другую. Оба сервера настроены на 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, но автор так и не признался где он это спёр (или сам додумал), но под копирку взято у меня.