ISP 邮件服务器升级 2.x

来自 Alpine Linux
此材料已过时...

Alpine 2.x 已过时且不受支持。 (讨论)

完整服务邮件服务器升级到 2.x

假设您当前的服务器运行在 Alpine Linux 1.10.x 下。本文档的目标是描述如何升级 ISP 邮件服务器 以在 Alpine Linux 2.x 下运行。升级过程涉及应用程序配置和数据库数据及模式处理方面的几个重大更改。Alpine Linux 2.x 附带的应用程序具有许多错误和安全修复以及新功能。某些组件的升级将需要更改配置文件,更新数据库模式以及导出/导入数据。

注意: ISP 邮件服务器可以在 RAM 中运行,数据目录(例如 Postfix 邮箱、PostgreSQL 数据库)可以挂载在硬盘 RAID/LVM 分区上。

升级前的系统准备

重要提示:请执行完整的系统备份,包括系统配置和用户数据。确保备份有效。

我们建议您永久停止所有用户服务,直到系统完全升级和测试完毕。在执行系统测试时,阻止所有用户的用户访问。

注意: 阻止用户访问的方法之一是使用防火墙规则。

从自动启动中删除服务

rc-update del lighttpd
rc-update del dovecot
rc-update del postfix
rc-update del freshclam
rc-update del clamd
rc-update del clamsmtpd
rc-update del slapd
rc-update del postgresql
rc-update del cron

停止除 postfesql 之外的服务

rc-service lighttpd stop
rc-service slapd stop
rc-service dovecot stop
rc-service postfix stop
rc-service clamsmtpd stop
rc-service freshclam stop
rc-service clamd stop
rc-service cron stop

转储 PostreSQL 数据库

由于版本 9 与版本 8 相比有重大更改,您必须转储所有 PostgreSQL 数据库,并在 PostgreSQL 升级后恢复数据。

创建一个目录,用于存储转储的数据

mkdir <Path to datadump directory>
chown postges <Path to datadump directory>

postgres 身份登录并转储数据

su - postgres
cd <Path to datadump directory>
pg_dumpall > postgresql.bak.8.4.2
exit

停止 PostgreSQL 服务

rc-service postgresql stop

重要提示:请执行转储数据和 PostgeSQL 数据目录 /var/lib/postgresql/8.4 的备份。确保备份有效。

升级 Alpine Linux

注意: 我们建议升级到不早于 2.2 的 Alpine Linux 版本,因为 2.2 版本修复了许多重要的错误和安全问题。

按照页面上描述的说明进行操作:Upgrading_Alpine_-_v1.9.x

注意: 如果您的服务器在 RAM 中运行,请确保 /etc/fstab/etc/lbu/lbu.conf 文件中包含 /media/usbdisk

重启后,您可以检查新配置文件中的更改,并根据需要进行调整

find /etc -iname "*apk-new"

导入数据到 PostgeSQL

确保文件 /etc/conf.d/postgresql 包含

PGDATA="/var/lib/postgresql/9.0/data"

检查您是否需要在 /var/lib/postgresql/9.0/data/pg_hba.conf/var/lib/postgresql/9.0/data/postgresql.conf 中进行任何特殊设置。在大多数情况下,这些文件可以保持不变。

启动 PostgeSQL(它将自行设置,因为默认情况下 AUTO_SETUP=yes)

rc-service postgresql start
rc-update add postgresql

导入之前转储的数据

su - postgres
cd <Path to datadump directory>
psql -f postgresql.bak.8.4.2 postgres
exit

启动其他服务

其他服务不需要更改其当前配置,您可以直接启动它们

rc-service clamd start
rc-service freshclam start
rc-service clamsmtp start
rc-service postfix start
rc-service lighttpd start
rc-service slapd start
rc-service cron start

将这些服务添加到启动序列

rc-update add lighttpd
rc-update add freshclam
rc-update add clamd
rc-update add clamsmtpd
rc-update add postfix
rc-update add slapd
rc-update add cron

更新 Dovecot 配置

由于 Dovecot 自 1.x 版本以来更改了许多配置设置,因此最好的方法是使用 doveconf 工具解析旧配置

cd /etc/dovecot
doveconf -n > dovecot.conf-new
mv dovecot.conf dovecot.conf-old
mv dovecot.conf-new dovecot.conf
rc-service dovecot start

如果您收到类似 "Warning: service anvil { client_limit=NNNN } is lower than required under max. load (MMMM)" 的警告,请更新 anvil 服务配置

vi /etc/dovecot/dovecot.conf
service anvil {
 client_limit = <MMMM>
}
rc-service dovecot restart

更新配额配置

如果您设置了配额支持,则需要进行以下修改

vi /etc/dovecot/dovecot.conf
service dict {
 unix_listener dict {
  group =
  mode = 0600
  user = vmail
  } 
 }

更改 dovecot-dict-quota.conf 文件的权限

chown dovecot /etc/docecot/dovecot-dict-quota.conf

重启 Dovecot

rc-service dovecot restart

更新 Roundcube Webmail 配置

将 Roundcube 配置文件移动到 /etc/roundcube

mv /usr/share/webapps/roundcube/config/main.inc.php /etc/roundcube
mv /usr/share/webapps/roundcube/config/db.inc.php /etc/roundcube
mv /usr/share/webapps/roundcube/config/mimetypes.php /etc/roundcube

/etc/roundcube/main.inc.php 文件中启用 installer 模式

$rcmail_config['enable_installer'] = true;

安装 roundcubemail-install 软件包

apk add roundcubemail-installer

运行配置和系统检查

  • https://host.example.com/roundcube/installer/index.php?_step=1
注意: 您可能需要安装 php-dom、php-intl 组件并重启 Lighttpd。
  • https://host.example.com/roundcube/installer/index.php?_step=3
在 /etc/roundcube/main.inc.php 中将 'imap_root 替换为 imap_ns_personal
$rcmail_config['imap_ns_personal'] = null;
仅运行 /usr/share/webapps/roundcube/SQL/postgres.update.sql 中先前安装的版本号标记的命令
cp /usr/share/webapps/roundcube/SQL/postgres.update.sql /usr/share/webapps/roundcube/SQL/postgres.update-3.1.sql
编辑 /usr/share/webapps/roundcube/SQL/postgres.update-3.1.sql,删除不需要的命令并运行脚本
su - postgres
psql -f /usr/share/webapps/roundcube/SQL/postgres.update-3.1.sql roundcubemail
exit
更改两个新表的所有权
psql -U postgres roundcubemail
 roundcubemail=# ALTER TABLE contactgroups OWNER TO roundcube;
 roundcubemail=# ALTER TABLE contactgroupmembers OWNER TO roundcube;

出于安全原因,在 /etc/roundcube/main.inc.php 文件中禁用 installer 模式

$rcmail_config['enable_installer'] = false;

出于安全原因,删除 roundcubemail-install 软件包

apk del roundcubemail-installer

确保您已恢复所有自定义项,例如 watermark.gifroundcube_logo.giffavicon.ico 或自定义 roundcube 皮肤。如果您想禁用标准徽标的显示,请相应地更新模板文件。

注释掉文件中所有类似 <div ... img src="/images/roundcube_logo.png"... 的条目

includes/header.html
templates/error.html
templates/messageprint.html
templates/login.html
templates/printmessage.html

注释掉文件中所有类似 <img src="/images/watermark.gif"... 的条目

templates/identities.html
templates/messageerror.html
watermark.html

重启 Lighttpd

rc-service lighttpd restart

测试 Roundcube Webmail 站点,包括已激活插件的功能。

(可选)在 Lighttpd 中启用压缩

取消注释 mod_compressmod_setenv 并按如下方式修改网站部分

mkdir -p /var/lib/lighttpd/cache
chown lighttpd:lighttpd  /var/lib/lighttpd/cache
vi /etc/lighttpd/lighttpd.conf
...
"mod_setenv",
"mod_compress",
...
static-file.etags = "enable"
etag.use-mtime = "enable"
$HTTP["url"] =~ "^/(plugins|skins|program)" { setenv.add-response-header  = ( "Cache-Control" => "public, max-age=2592000") }
compress.cache-dir   = var.statedir + "/cache/compress"
compress.filetype = ("text/plain", "text/html", "text/javascript", "text/css", "text/xml", "image/gif", "image/png")