ISP 邮件服务器升级 2.x
![]() 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.gif、roundcube_logo.gif、favicon.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_compress 和 mod_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")