复制一个维基百科!—— 维基技术梳理

复制一个维基百科!—— 维基技术梳理

了解 WikiMedia

说到维基百科 不得谈到一个组织 — 维基媒体wikimedia。php

企业家吉米·威尔士和软件设计师拉里·桑格创立了维基百科(wikipedia),于2001年1月15日发布,目标是向全人类提供自由的百科全书。最初资助的维基百科是由企业家威尔士的一家我的公司提供资助,随着维基百科的人气直线上升,须要消耗的资金愈来愈多,已经没法提供足够的钱维持维基百科的发展。创始人们决定以慈善模式运营维基百科。因而 维基媒体基金会(wikimedia foundation)应运而生。时间点-2003年6月20日。html

维基媒体基金会托管了维基百科,并发布了维基媒体运动(wikimedia movement)即:一系列组织和活动基于共享价值观围绕维基媒体的网站和项目进行运转。得到了众多有情怀的公司以及我的的资助,包括,谷歌,亚马逊,巴菲特等等。node

wikimedia拥有众多项目,包括维基百科,维基新闻,维基图书馆,维基物种等等。其中一个是维基百科所使用的基础软件 mediawiki。web

1537173621224.png

MediaWiki

介绍

MediaWiki采用PHP编程语言写成,使用MySQL、MariaDB等关系数据库管理系统。MediaWiki软件最初是为维基百科开发的,目前维基媒体基金会的全部项目乃至众多wiki网站皆采用了这一软件。咱们复制维基百科的关键。数据库

安装

最好采用最新1.31 不然扩展插件安装比较麻烦apache

www.mediawiki.org/wiki/Manual…编程

记得勾选上扩展程序和图像和文件上传-启用即时共享资源api

要求

web server:apache or iis浏览器

PHP version 7.0.0 or later服务器

Database Server, one of the following:

步骤

  1. 下载 MediaWiki并将其解压到服务器上可被Web服务器的目录
  2. 访问http://domain/directory/mw-config/index.php根据提示完成配置
  3. 将配置文件 LocalSettings.php放到wiki根目录,全部的配置都在这个文件中配置

配置

文件 LocalSettings.php包括用户权限,网站名称,标志,数据库配置,文件上传路径,网站语言 等默认配置,插件相关配置加在LocalSettings.php 末尾。

重要配置:

  1. $wgUseInstantCommons = true; 容许使用https://commons.wikimedia.org(维基图片集),不开会致使图片链接转为内联。
  2. $wgLanguageCode = "ja";ja为对应wiki语言,若是英语(en)wgLanguageCode为日语(ja),会致使脚本出错。

导入导出

/maintenance/exportDump.php

/maintenance/importDump.php

插件

查看已经安装插件:https://yourwiki/wiki/Special:Version

个别插件须要使用到数据库建立表,运行update.php 会读取配置问文件,更新表结构

Wiki Family

维基百科各个语言是单独的一个mediawiki实例,为了能协同工做,提出了wiki family 的概念。

Multiple wikis sharing common resources

能够共享插件

www.mediawiki.org/wiki/Manual…

WikiText

介绍

WikiText是一种轻量级标记语言,相似于markdown,用于撰写Wiki网页,它在HTML基础上进行简化,使不会使用html的人也能写出格式清晰好看的页面,最终是由mediawiki转换成HTML,由浏览器进行渲染。

基本语法

meta.wikimedia.org/wiki/Help:W…

数据结构

mediawiki提供管理组织公共内容的基本结构,为了区分词条,用命名空间加冒号:来区分。

查看方式Help:Namespaces

(Main/Article) namespaces 编号为0,搜索的时候没必要输入任何命名空间,也就是咱们正常所说的词条

Template:{{templateName|arguments}}www.mediawiki.org/wiki/Help:T…

Category:类别 是一个集合(相似于月份)commons.wikimedia.org/wiki/Catego…

Module:lua脚本,加强Template 实现更复杂的功能

Project: 不是百科全书的一部分,记录政策和指南

Special:mediawiki特殊功能,好比导入导出等工具,报告等等

复制维基百科

dumps

维基会常常会发布一些备份文件的转储提供给须要的人。网址:dumps.wikimedia.org/

提供内容包括:

  • 部分数据库表备份
  • mediawiki exportDump 备份
  • 静态页面 (2008年以前)
  • 图片服务器(151T)
  • 等...

根据须要下载指定语言的备份文件,有时候常常出现Template或者Mudule等数据不全。因此最好也下载commons的备份文件。

数据库配置修改

默认单个插入语句不能超过1M,英文词条比较大,修改成64M

SET GLOBAL max_allowed_packet = 64M;

修改最大链接数,提升插入效率

SET GLOBAL max_connections = 500;

在my.cnf中

修改数据库最大核心数和innodb缓冲池大小

thread_concurrency = 32 innodb_buffer_pool_size = 1024M

php函数嵌套层数修改

默认100 ,部分插件会栈溢出

/etc/php.ini文件

在最后加上xdebug.max_nesting_level = 600

导入

下好备份文件后,使用mediawiki自带的导入工具导入。

php /var/www/html/wiki/maintenance/importDump.php < /home/yuwenhao/wikidumps/data/Category.xml

单个进程速度很慢,将大文件拆分,而后批量插入

将文件按照namespace拆分

_1_extract_namespaces_from_wikitext.py

包裹插入必需要的标签

_2_wrap_mediawiki_for_page.py

按照将xml拆分红指定个数,并包裹插入必需要的标签

_3_split_big_xml_for_import_dump.py

批量执行插入,日志为相同目录相同名称 *.log

_4_run_all_mediawiki_dump_file.py

确保磁盘空间足够,在导入过程当中若是空间不够,wikitext会清空一些表,以保证插入。

wikitext--->html

既然能够复制维基百科,为什么用要wikitext转html:

  • 空间问题
  • 数据库压力
  • 导入时间问题
  • 方便清洗

可能遇到的坑:

  • 多语言问题:下载langlinks
  • 注意别忘了对内容进行url解码

parsoid

介绍

mediawiki官方团队推出的html<-->wikitext互转应用,基于nodejs。

img

安装&配置

www.mediawiki.org/wiki/Parsoi…

注意在配置文件中配置mediawiki的api URL

使用

1537182346108.png

压力测试:

115.231.226.254

32个逻辑CPU 64G内存

200个线程 20次循环

8.2个每秒

1537178455894.png

须要注意

​ 清洗parsoid原始数据

相关文章
相关标签/搜索