Migrate old iRedMail server to the latest stable release

Attention

Check out the lightweight on-premises email archiving software developed by iRedMail team: Spider Email Archiver.

Warning

Please practise the migration on a test server first, make sure you understand the whole procedure and migrate all required data.

Since new iRedMail server will install same components as old server, you can choose what data you want to migrate.

Most important data are:

Warning

Do not restore database mysql exported from old server, it contains SQL usernames/passwords for Roundcube/Amavisd/iRedAPD/iRedAdmin/... used on old server. New iRedMail server has the same SQL usernames, but different passwords. So please do not restore it.

Client settings (Outlook, Thunderbird)

Since iRedMail-0.8.7, iRedMail enforces secure POP3/IMAP/SMTP connections, please update your mail client applications to use TLS connection.

Note

LDAP: migrate mail accounts

Steps to migrate LDAP mail accounts:

Normally, LDAP data can be exported into LDIF format. Here's backup/restore procedure: Backup and Restore.

Notes:

MySQL/MariaDB/PostgreSQL: Migrate mail accounts

All mail accounts are stored in database vmail.

MySQL/MariaDB inside FreeBSD Jail

If you run iRedMail server in a jailed FreeBSD system, restored SQL database on new jailed system may have privilege error like this:

ERROR 1449 (HY000): The user specified as a definer ('root'@'10.195.20.1') does not exist

iRedMail installer created SQL tables (or VIEWs, TRIGGERs) as root@10.195.20.1 (10.195.20.1 was private IP address of your old Jail system), but this address was gone on new jailed system. You must replace old IP address by the new one before restoring the SQL tables, otherwise, triggers might have to be re-created manualy later. For example,

perl -pi -e 's#`root`@`10.195.20.1`#`root`@`10.20.21.3`#g' vmail-2020-04-26-01:25:21.sql
perl -pi -e 's#`root`@`10.195.20.1`#`root`@`10.20.21.3`#g' amavisd-2020-04-26-01:25:21.sql

Then import this modified SQL file instead.

Migrate mailboxes (Maildir format)

Warning

mysql> USE vmail;
mysql> SELECT CONCAT(storagebasedirectory, '/', storagenode, '/', maildir) FROM mailbox WHERE username='user@domain.com';
ldapsearch -x -o ldif-wrap=no -D 'cn=Manager,dc=xx,dc=xx' -W -b 'o=domains,dc=xx,dc=xx' "(mail=user@domain.com)" homeDirectory

Migrate sieve rules

Migrate (mlmmj) mailing lists

Attention

mlmmj mailing list was introduced in iRedMail-0.9.8.

Mailing lists are stored in 2 places:

For mailing list accounts, they should be migrated while migrating mail accounts mentioned in steps above.

For mailing list data, you can simply copy them to new server. After copied, the data must be owned by user/group mlmmj:mlmmj with permission 0700.

Migrate Roundcube webmail data

Reference: https://github.com/roundcube/roundcubemail/wiki/Upgrade

Migrate SOGo Groupware data

Solution 1: Export and import SQL database

If you run same version of SOGo on old and new server, it's ok to migrate data by simply exporting the sogo SQL database and import to new server.

For SQL backends, you need to re-create SQL table sogo.users after restored database:

GRANT SELECT ON vmail.mailbox TO sogo@"127.0.0.1";
CREATE VIEW sogo.users (
        c_uid, c_name, c_password, c_cn, mail, domain,
        c_webmail, c_calendar, c_activesync
    ) AS SELECT
            username, username, password, name, username, domain,
            enablesogowebmail, enablesogocalendar, enablesogoactivesync
        FROM vmail.mailbox WHERE enablesogo=1 AND active=1;
-- create SQL view in vmail database.

CREATE VIEW sogo_users AS
     SELECT username AS c_uid,
            username AS c_name,
            password AS c_password,
            name     AS c_cn,
            username AS mail,
            domain   AS domain,
            enablesogowebmail     AS c_webmail,
            enablesogocalendar    AS c_calendar,
            enablesogoactivesync  AS c_activesync
       FROM mailbox
      WHERE enablesogo=1 AND active=1;

-- allow end users to change their own passwords.
GRANT SELECT,UPDATE ON mailbox TO sogo;
GRANT SELECT,UPDATE ON sogo_users TO sogo;

Solution 2: Backup and restore data

Attention

It's strongly recommended to practice with a testing machine and verify the calendars, events and contacts after migrated.

iRedMail has daily cron job to backup SOGo data with script /var/vmail/backup/backup_sogo.sh, you should run it manually right before migration so that all recent data are exported.

Backup copies are stored under /var/vmail/backup/sogo/<year>/<month>/ by default.

Copy the latest backup file to new server, then follow this tutorial to restore it: How can I backup/restore my user data?

Migrate Amavisd, iRedAPD, iRedAdmin databases

Export those database on old server, then import them on new server.

Migrate DKIM keys

Amavisd will read DKIM keys and sign outgoing emails. DKIM keys are stored under /var/lib/dkim by default, you can copy all keys under this directory to new server, and make sure they have correct file owner amavis:amavis and permission 0600.

If you prefer generating new DKIM keys on new server, don't forget to update DNS records for mail domain names.

Post-migration

After migration, please recalculate mailbox quota by following this tutorial:

References