161 lines
10 KiB
HTML
161 lines
10 KiB
HTML
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>Migrate old iRedMail server to the latest stable release</title>
|
|
<link href="./css/markdown.css" rel="stylesheet"></head>
|
|
</head>
|
|
<body>
|
|
|
|
<div id="navigation">
|
|
<a href="http://www.iredmail.org" target="_blank">iRedMail web site</a>
|
|
|
|
// <a href="./index.html">Document Index</a>
|
|
</div><h1 id="migrate-old-iredmail-server-to-the-latest-stable-release">Migrate old iRedMail server to the latest stable release</h1>
|
|
<div class="toc">
|
|
<ul>
|
|
<li><a href="#migrate-old-iredmail-server-to-the-latest-stable-release">Migrate old iRedMail server to the latest stable release</a><ul>
|
|
<li><a href="#client-settings-outlook-thunderbird">Client settings (Outlook, Thunderbird)</a></li>
|
|
<li><a href="#ldap-migrate-mail-accounts">LDAP: migrate mail accounts</a></li>
|
|
<li><a href="#mysqlpostgresql-migrate-mail-accounts">MySQL/PostgreSQL: Migrate mail accounts</a></li>
|
|
<li><a href="#migrate-mailboxes-maildir-format">Migrate mailboxes (Maildir format)</a></li>
|
|
<li><a href="#migrate-roundcube-webmail-data">Migrate Roundcube webmail data</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<p><code>WARNING</code>: Please try it on a test server first. if it works well, then try it on product server.</p>
|
|
<p>Since new iRedMail server will install same components as old server, you can choose what data you want to migrate. Most important data are:</p>
|
|
<ul>
|
|
<li>email accounts stored in SQL/LDAP.</li>
|
|
<li>user mailboxes. Stored under /var/vmail by default.</li>
|
|
<li>SQL database of Roundcube webmail. It stores per-user webmail preferences, and address book.</li>
|
|
<li>Policyd/Cluebringer database. It stores white/blacklists records, greylisting records, etc.</li>
|
|
<li>Amavisd database.<ul>
|
|
<li>It stores per-recipient white/blacklists in SQL tables: <code>mailaddr</code>, <code>policy</code>, <code>users</code>, <code>wblist</code>.</li>
|
|
<li>Basic info of in/out emails are stored in SQL tables: <code>maddr</code>, <code>msgs</code>, <code>msgrcpt</code>. Quarantined emails are stored in <code>quarantine</code>, it requires other 3 tables. If you don't have any quarantined emails, it's safe to delete all records in these 4 tables.</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p><strong>WARNING</strong>: Do not restore database <code>mysql</code> exported from old server, it contains SQL usernames/passwords for Roundcube/Amavisd/Policyd/Cluebringer used on old server. New iRedMail server has the same SQL usernames, but different passwords. So please do not restore it.</p>
|
|
<h2 id="client-settings-outlook-thunderbird">Client settings (Outlook, Thunderbird)</h2>
|
|
<p>Since iRedMail-0.8.7, iRedMail enforces secure POP3/IMAP/SMTP connections.
|
|
Mail client programs must issue 'STARTTLS' command before authentication,
|
|
so please update your mail client programs you must change your mail client
|
|
programs (e.g. Outlook, Thunderbird) to use TLS connection.</p>
|
|
<ul>
|
|
<li>For SMTP service, use port <code>587</code> with <code>STARTTLS</code> (or <code>TLS</code>).</li>
|
|
<li>For IMAP service, use port <code>143</code> with <code>STARTTLS</code> (or <code>TLS</code>).</li>
|
|
<li>For POP3 service, use port <code>110</code> with <code>STARTTLS</code> (or <code>TLS</code>).</li>
|
|
</ul>
|
|
<p>Additional notes:</p>
|
|
<ul>
|
|
<li>
|
|
<p>If you want to enable smtp authentication on port <code>25</code> (again, not
|
|
recommended), please comment out Postfix parameter <code>smtpd_tls_auth_only = yes</code>
|
|
in its config file <code>/etc/postfix/main.cf</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>if you want to enable SMTPS (SMTP over SSL, port <code>465</code>) to support legency
|
|
mail clients, please follow this tutorial: <a href="./enable.smtps.html">How to enable SMTPS service</a>.</p>
|
|
</li>
|
|
</ul>
|
|
<h2 id="ldap-migrate-mail-accounts">LDAP: migrate mail accounts</h2>
|
|
<p>Steps to migrate LDAP mail accounts:</p>
|
|
<ul>
|
|
<li>Setup a new server with the latest iRedMail, and make iRedAdmin-Pro-LDAP work as expected.</li>
|
|
<li>Export mail accounts from LDAP on OLD mail server.</li>
|
|
</ul>
|
|
<p>Normally, LDAP data can be exported into LDIF format. Here's backup/export script: <a href="http://www.iredmail.org/wiki/index.php?title=IRedMail/FAQ/Backup">http://www.iredmail.org/wiki/index.php?title=IRedMail/FAQ/Backup</a></p>
|
|
<p>Notes:</p>
|
|
<ul>
|
|
<li>There might be some changes in LDAP schema, please find scripts <a href="https://bitbucket.org/zhb/iredmail/src/default/extra/update/">here</a> to apply all required changes.</li>
|
|
<li>Here are all <a href="http://www.iredmail.org/docs/iredmail.releases.html">upgrade tutorials for iRedMail</a>.</li>
|
|
</ul>
|
|
<h2 id="mysqlpostgresql-migrate-mail-accounts">MySQL/PostgreSQL: Migrate mail accounts</h2>
|
|
<p>All mail accounts are stored in database <code>vmail</code> by default, to migrate mail
|
|
accounts, you can simply export this database on old server, then import it
|
|
on new server.</p>
|
|
<p><strong>IMPORTANT NOTE</strong>: iRedMail-0.8.7 drops several SQL columns, so before you
|
|
import backup SQL database, please add them first. It's safe to drop them
|
|
after you imported old database on new server.</p>
|
|
<pre><code class="mysql">mysql> USE vmail;
|
|
|
|
mysql> ALTER TABLE mailbox ADD COLUMN bytes BIGINT(20) NOT NULL DEFAULT 0;
|
|
mysql> ALTER TABLE mailbox ADD COLUMN messages BIGINT(20) NOT NULL DEFAULT 0;
|
|
|
|
mysql> ALTER TABLE domain ADD COLUMN defaultlanguage VARCHAR(5) NOT NULL DEFAULT 'en_US';
|
|
mysql> ALTER TABLE domain ADD COLUMN defaultuserquota BIGINT(20) NOT NULL DEFAULT '1024';
|
|
mysql> ALTER TABLE domain ADD COLUMN defaultuseraliases TEXT;
|
|
mysql> ALTER TABLE domain ADD COLUMN disableddomainprofiles VARCHAR(255) NOT NULL DEFAULT '';
|
|
mysql> ALTER TABLE domain ADD COLUMN disableduserprofiles VARCHAR(255) NOT NULL DEFAULT '';
|
|
mysql> ALTER TABLE domain ADD COLUMN defaultpasswordscheme VARCHAR(10) NOT NULL DEFAULT '';
|
|
mysql> ALTER TABLE domain ADD COLUMN minpasswordlength INT(10) NOT NULL DEFAULT 0;
|
|
mysql> ALTER TABLE domain ADD COLUMN maxpasswordlength INT(10) NOT NULL DEFAULT 0;
|
|
|
|
mysql> ALTER TABLE alias ADD COLUMN islist TINYINT(1) NOT NULL DEFAULT 0;
|
|
</code></pre>
|
|
|
|
<p>After imported backup SQL databases, please execute below commands to mark
|
|
mail alias accounts and drop above newly created columns:</p>
|
|
<pre><code class="mysql">mysql> USE vmail;
|
|
mysql> UPDATE alias SET islist=1 WHERE address NOT IN (SELECT username FROM mailbox);
|
|
mysql> UPDATE alias SET islist=0 WHERE address=domain; -- domain catch-all account
|
|
|
|
-- Store values into new column: domain.settings and drop them
|
|
mysql> UPDATE domain SET settings='';
|
|
mysql> UPDATE domain SET settings=CONCAT(settings, IF(defaultlanguage IS NULL OR defaultlanguage='', '', CONCAT('default_language:', defaultlanguage, ';')));
|
|
mysql> UPDATE domain SET settings=CONCAT(settings, IF(defaultuserquota IS NULL OR defaultuserquota=0, '', CONCAT('default_user_quota:', defaultuserquota, ';')));
|
|
mysql> UPDATE domain SET settings=CONCAT(settings, IF(defaultuseraliases IS NULL OR defaultuseraliases='', '', CONCAT('default_groups:', defaultuseraliases, ';')));
|
|
mysql> UPDATE domain SET settings=CONCAT(settings, IF(minpasswordlength IS NULL OR minpasswordlength=0, '', CONCAT('min_passwd_length:', minpasswordlength, ';')));
|
|
mysql> UPDATE domain SET settings=CONCAT(settings, IF(maxpasswordlength IS NULL OR maxpasswordlength=0, '', CONCAT('max_passwd_length:', maxpasswordlength, ';')));
|
|
mysql> UPDATE domain SET settings=CONCAT(settings, IF(disableddomainprofiles IS NULL OR disableddomainprofiles='', '', CONCAT('disabled_domain_profiles:', disableddomainprofiles, ';')));
|
|
mysql> UPDATE domain SET settings=CONCAT(settings, IF(disableduserprofiles IS NULL OR disableduserprofiles='', '', CONCAT('disabled_user_profiles:', disableduserprofiles, ';')));
|
|
|
|
mysql> ALTER TABLE domain DROP defaultlanguage;
|
|
mysql> ALTER TABLE domain DROP defaultuserquota;
|
|
mysql> ALTER TABLE domain DROP defaultuseraliases;
|
|
mysql> ALTER TABLE domain DROP minpasswordlength;
|
|
mysql> ALTER TABLE domain DROP maxpasswordlength;
|
|
mysql> ALTER TABLE domain DROP disableddomainprofiles;
|
|
mysql> ALTER TABLE domain DROP disableduserprofiles;
|
|
</code></pre>
|
|
|
|
<p><strong>IMPORTANT NOTE</strong>: There might be some changes in SQL structure, please read
|
|
all upgrade tutorials for your current iRedMail release, then apply SQL
|
|
structure related changes. Check <a href="./iredmail.releases.html">upgrade tutorials for iRedMail</a>.</p>
|
|
<h2 id="migrate-mailboxes-maildir-format">Migrate mailboxes (Maildir format)</h2>
|
|
<ul>
|
|
<li>Simply copy all mailboxes (in Maildir format) to new iRedMail server.</li>
|
|
<li>Set correct file owner of mailboxes. Default owner is <code>vmail</code>, group is <code>vmail</code>.</li>
|
|
<li>Set correct file permission of mailboxes. Default is <code>0700</code>.</li>
|
|
</ul>
|
|
<p>WARNING: please make sure maildir path stored in SQL/LDAP matches the mailbox
|
|
path on file system, so that mail clients can find imported emails.</p>
|
|
<ul>
|
|
<li>With SQL backends, you can get full maildir path of user with below SQL command:</li>
|
|
</ul>
|
|
<pre><code>mysql> USE vmail;
|
|
mysql> SELECT CONCAT(storagebasedirectory, '/', storagenode, '/', maildir) FROM mailbox WHERE username='user@domain.com';
|
|
</code></pre>
|
|
|
|
<ul>
|
|
<li>With OpenLDAP backend, full maildir path is stored in LDAP attribute
|
|
<code>homeDirectory</code> of mail user object. You can query with <code>ldapsearch</code> command:</li>
|
|
</ul>
|
|
<pre><code>$ ldapsearch -x -D 'cn=Manager,dc=xx,dc=xx' -b 'o=domains,dc=xx,dc=xx' -W "(mail=user@domain.com)" homeDirectory
|
|
</code></pre>
|
|
|
|
<h2 id="migrate-roundcube-webmail-data">Migrate Roundcube webmail data</h2>
|
|
<ul>
|
|
<li>Export/import roundcube webmail database, and upgrade database to work with new version of Roundcube.
|
|
<a href="http://trac.roundcube.net/wiki/Howto_Upgrade">http://trac.roundcube.net/wiki/Howto_Upgrade</a></li>
|
|
</ul><p style="text-align: center; color: grey;">Document published under a <a href="http://creativecommons.org/licenses/by-nd/3.0/us/" target="_blank">CC BY-ND 3.0</a> license. If you found something wrong, please do <a href="http://www.iredmail.org/contact.html">contact us</a> to fix it.<script>
|
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
|
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
|
|
|
ga('create', 'UA-3293801-21', 'auto');
|
|
ga('send', 'pageview');
|
|
</script>
|
|
</body></html> |