以前做wiki网站的时候,在MediaWiki官方网站看到过设置Wiki Farm或者Wiki Family的办法,也就是把多个wiki站点共享一套MediaWiki程序,但设置起来有些不太方便(Drupal是默认就支持这种共享设置的),就一直没有采用,而是每增加一个站点就单独用一套MediaWiki安装程序。即使后来扩展了多语言、手机版也是如此,所以一台服务器上如果有几十个wiki站点的话,就用几十套程序,显得比较乱,每次修改什么地方,需要批量处理或者逐个处理。现在用了APC加速PHP后,几十套内容几乎一样的程序对内存的占用也很大,需要精简合并。
经过一些天的尝试,基本上可以实现了,步骤记录如下:
- 在/usr/local/apache2/htdocs(或者/var/www/html)下新建一个共享的目录mediawiki_sites,把最新的mediawiki版本下载、解压到里面去;
- 复制共同需要的.htaccess、robots.php、mobile.jpg、computer.jpg、google webmaster tools认证文件等到mediawiki_sites中,并根据情况进行修改;
- 在mediawiki_sites下创建一个LocalSettings.php,根据访问网址的不同,分别调用下属子目录各站点自己的LocalSettings.php;
- 在mediawiki_sites目录下新建sites目录,在sites下新建all用于存放共用的配置和模块文件,在sites下新建各子站点目录用于放置各个站点的配置文件、logo.png/favicon.ico、images等;
- 再在mediawiki_sites目录下新建cache目录,并修改apache可写权限用于放置各个站点的缓存文件;
- 复制原来的LocalSettings.php和*sitemap*、logo.png/favicon.ico、images等到sites对应的站点目录下;
- 修改各子站点LocalSettings.php中调用的CommonSettings.php文件的位置为
require_once(dirname(dirname(__FILE__)).'/all/CommonSettings.php');; - 修改httpd.conf文件,删除以前的站点配置,开启mediawiki_sites中的别名,重启httpd;
- mv以前htdocs下的子站点文件到待删除的merged-will-delete目录下;
- 在/mnt/gb8/mediawiki_cache下,对应的子网站目录中创建一个html并给予apache写权限,将以前的缓存都mv到这个html中;
- 删除mediawiki_sites/cache下对应的子网站目录,用ln -s /mnt/gb8/mediawiki_cache/abc.example.com abc.exaple.com来链接;
- 检查网站各方面是否正常。
上面是初步记录,如果是很多个站点合并到里面来,可以用一个批处理文件来操作。
存在问题:maintenance中的generateSitemap.php等程序执行对应的站点、找对应的数据库还需要再尝试解决。
2015年3月15日补充:经过一段时间的工作,已经把以前的MediaWiki 1.16.0全部升级、合并,历时几个月的时间,后面还会进行观察和一些小的调整。今天把合并后的结构又稍微改了一点,LocalSettings.php只留下一个,不再调用每个站单独的LocalSettings.php了,CommonSetting.php搬迁到LocalSettings.php的相同目录中,下载的扩展插件放置在extensions_more下,取消了sites/all 目录,这样以后的维护修改进一步方便了。😄
2015年4月再补充:找到了修改.htaccess来重定向images目录访问的办法,那各种wiki网站,只要是在同一台服务器上,就都可以全部合并到一个大的目录下来,不需要分为多个系列来放置。
评论