分类于 未分类 | 612 次点击 | 评论(3) »
由 Apex 发表于

因为公司外部网服务器硬件全面升级(换了一台专门的2U机架式服务器),所以要將原来的网站和邮件服务都迁移到新的服务器上。邮件服务的迁移已经实验是没有问题了(参见从sendmail迁移到postfix),但是在迁移网站的时候出现了一个小问题。

除了迁移网站,还需要增加一些服务,这次要增加的是一个在线演示系统,用于演示利用公司的产品完成网上登录身份认证的功能,其中一段代码是这样的:
阅读这篇日志的剩余部分 »

分类于 代码人生 | 709 次点击 | 评论(1) »
由 Apex 发表于

因为发展的需要,公司新购置了一台HP机架式服务器用作外部网络服务之用,包括邮件服务、WEB服务、在线演示等等。其中,WEB服务很容易迁移,在线演示是新增加的内容,都没有什么特别的地方,重头戏在于邮件系统的建设。

考虑到邮件系统的性能以及日益增长的员工数量,以及垃圾邮件和病毒防护等,综合考虑之后,决定放弃使用sendmail,改用postfix来做邮件服务。在制定迁移方案时,发现一个比较难以处理的问题,就是如何将现有已经存在的sendmail邮箱中的邮件转移到新服务器的postfix系统中。

直接复制是不可能的,因为原来的sendmail使用了MailBox格式,即每个用户一个大文件,里面放着这个用户的所有邮件,而且这个“用户”是FreeBSD系统中的真实用户。但是在postfix中,采用MailDir的方式存放邮件,每个邮件就是一个文件,系统真实用户也不存在了,全部使用的是虚拟用户,一个postfix进程(创建多个线程)搞定整个邮件服务,这样可以一定程度上提升性能,不像sendmail那样收发邮件时系统中出现上百个sendmail的进程。

后来想到一个笨办法:因为是两台服务器,用新的替换旧的(在ISP处托管的),所以打算新服务器上线之后,将旧服务器搬回公司,挂在公司内网上,然后让员工设置其邮件客户端,先从旧服务器上收取邮件,完成之后,再修改其邮件客户端,使之指向新服务器,完成日常邮件收发工作。之所以这么做,是为了保证员工在最后一次收取邮件到下一次收取邮件的这个时间间隔中,客户发过来的邮件能够收取到,不会丢失。但是这个办法实在是很…嗯…….恶心。现在想起来,不单是恶心,还有很多问题:为每个员工带来了额外的操作,没有做到“平滑迁移”;旧服务器搬回公司,可以保证总部的员工能够收取到所有邮件,但是外地办事处的同事以及国外分公司的同事就没辙了;等等等等……

这个问题就一直悬着,没有妥善的解决办法。今天去公司加班,做postfix的垃圾邮件过滤设置和在线杀毒设置,在等待服务器下载代码并编译的过程中(使用FreeBSD的Ports方式安装所有软件),又顺手打开了Firefox到处瞎逛,有postfix的中文论坛、官方论坛、FreeBSD的论坛等等。结果最后在蓝森林的Unix论坛中看到一句不起眼的话:“mb2md.pl可以将Mailbox转换为MailDir格式”,啊,这不正是我要的东东嘛~~~赶紧用Google搜索mb2md.pl,终于在这里找到了转换工具。

立刻从旧服务器上下载一个MailBox格式的文件,再上传到新服务器上,测试,完美啊,转换之后就可以用指定帐号的邮箱直接收取,太完美了~~~~

明天就去写一个脚本,用来将旧服务器上的邮件转换到新服务器上,为最后的迁移做好准备工作。