MoinMoin

通过 Docker 成功部署 Moinmoin

前天晚上有了个想法,用 Docker 在我的 VPS 上部署 Moinmoin。昨天晚上实施成功。

我之前用的维基系统就是 Moinmoin,之前也部署过其他系统,不过 Moinmoin 用的时间最长,写的也最多,也是我最喜欢的一个系统。

考虑切换维基程序

曾经我把个人维基的应用程序从 MoinMoin 切换到了 MediaWiki,现在我几次考虑要更换回来。

最大的问题还是出于保密需要。我之前感觉我需要保密的东西,就是在一些不大适宜让大家知道我知道的记录,比如一些成人的内容,但现在随着年龄的增长,事情正在起变化。现在我由一个大学生变成了一个中年男,有了媳妇当了父亲,一些事情,在当今社会对男人来说,已经不再是负担,反而是一些无关紧要的事情了。但是,当我近期开始维护起维基的时候,我想起了里面还是记录了一些个人隐私方面的内容。是真正的隐私,涉及感情的文字(比如曾经的情书之类的)。

上次也说了,我的一些逗比同事发现了我写博客的事,也知道了我的网站,甚至一度找到了我的维基,看到了上面保存的那些成人内容。我一开始不甚在意,但当我意识到,我里面还有情感方面的东西时,我就有点坐不住了。

现在考虑切换到可以做单页隐藏的维基。一个想法是回到 MoinMoin,我之前的页面备份还有,我想把它存回去,应该就可以恢复很多一部分内容。但负面考虑是安装麻烦,毕竟要用 Python,而且再加上 WSGI,我现在感觉不一定有把握可以顺利安装。还有一个原因来自 MoinMoin 本身,曾经的 2.0 版本,似乎一直没有推出,那么它还有没有未来,我还不清楚。另一个想法是 Doku Wiki,是一个比较方便安装的选项。但是它的语法跟 MediaWiki 正好相反,要迁移起来可能比较难。另外还有一个方法,就是把那几篇不适宜分享的内容删掉,保存在本地。可一来不甚安全,容易丢失,而来也违背了我维基永远不删除垃圾信息的原则,总之还没有一个定论。

当然,如果那帮逗比同事可以一棒子敲脑袋上就把这事忘记就好了。

重回 MediaWiki 及近期的一些问题

4 月份,我发现收到几封来自 Linode 的奇怪邮件。之前我用过一段时间的 Linode,后来没再用了,因此以为是推广,看不是要我缴费,我就没有仔细看。结果之后几天这种邮件源源不断的过来,引起我的重视,于是仔细看了一下,原来是有人使用了我的推荐链接。我已经完全没有印象曾在什么时间、在哪里发推荐链接了。而且这个链接短时间内一直被使用,导致我的账号上多了 120 美元的 credit。按照我一个月用 5 美元的标准,这些钱够我用一段时间的了。我于是就想,既然这样,何不把这些钱用掉呢?于是那时我计划着把 VPS 从 Vultr 迁移过去。

之前我很喜欢的 Vultr 一个功能是快照,免费的账号就可以。给 VPS 建立一个快照,需要在 Vultr 内部迁移或者移动,都能很方便的操作。负面效果是我这个 VPS 用了很长时间,除了升级软件外,基本没有维护,一些相关的配置操作,我在已经忘的差不多了。这导致了我将 VPS 从 Vultr 迁移到 Linode 的过程实际上是有一些负担的。当我抽出时间来维护 VPS,已经到了 4 月底了。为了在 5 月到来之前结束 Vultr 上的这个 instance,我的时间不多了。

因为 Docker 的流行,我也想过尝试一下用 Docker 来部署服务。之前看到 Wallabag 的部署,有心尝试一下,结果失败了。我这次在 Linode 上的新建实例上进行了测试,结果成功。也大体的了解了一下 Docker、Docker-compose 的具体操作。但 certbot 的部署我一直搞不定,看网上的教程似乎能理解了 docker-compose.yml 文件里的意思,但真正执行起来就一堆错误。可能是我太久没有设置 Nginx 了,一直想不明白。我眼看时间一分一秒的过去了,心想再搞不定就要到了 5 月份了,所以最终我还是放弃了使用 Docker。

直接在服务器上安装倒是不难,因为我之前在 wiki 上总结了一篇文档,把每一步该操作的都记了下来。虽然文档有点老旧,有些是针对 Apache 的,但多数还能用。迁移 wiki 的时候我遇到了点麻烦,过去我一直使用 MoinMoin,它有自己的部署方法。我虽然在 wiki 上记录了,但时间过得太长,我完全回忆不起来每一步的意义了。再者我写的是创建新的 instance 的方法,我之前的 instance 可是还要用的。MoinMoin 是 Python 写的,一旦要安装需要安装一堆的 Python 包,不搞清楚了我不大想贸然安装。因为我着急关闭 Vultr 的实例,所以我咬牙选择迁移到 MediaWiki。

成功配置好了 Nginx + uWSGI + MoinMoin

昨天晚上加班前,我去星巴克喝了一杯冰美式,加上周末白天我睡的比较多,因此晚上回家就睡不着了,于是就继续研究 MoinMoin 在 Nginx 上的配置。最终配置成功。

总结:我大概是有段时间没有碰 Linux 服务器了,因此对一些信息提示太不敏感了,完全忽略了错误信息的本意,并且忘记了上网搜索的方法,反而像一个菜鸟一样,照着文档的葫芦画瓢,遇到了和自己实际情况不一样的地方,就束手无策。另一方面,Linux 系统发行版众多,很多发行版有自己的一套工具,这就导致了配置命令的多种多样。加上 Python 和 uWSGI 的配置又比较麻烦,因此网上的文档不能做到面面俱到,实际上这方面的文档比起 WordPress 的配置要少很多,我这次也算是吃了这方面的亏。

我一开始是按照 DigitalOcean 给出的 How To Install MoinMoin with Nginx on Ubuntu 14.04 来一步一步的操作的,一开始比较顺利,直到文档要我执行 sudo start moin 这个命令时,系统提示我找不到 start 命令,我一下子傻掉了,不知道该怎么进行,而且根据我有限的 Linux 经验,我也从没见过一个叫 start 的命令。用 tab completion 得知,系统有一个 start-stop-daemon 命令,我想也许版本不同换成了这个?于是就在周六的下午研究它的命令行参数,走了不少弯路,到最后也没有成功。

之后我还参考过 Nginx 的网站,结果让我更加困惑,只是草草的给了我一小段配置片段,就没有其它任何内容了。我在 Google 上用 Nginx 和 MoinMoin 做关键词搜索,得到的结果和 DigitalOcean 的大同小异,都是在 start 这一步上卡住了。

到了昨天晚上,我决定不按照 DigitalOcean 的文档里来操作,而是先把我在 Linode 上的 MoinMoin 实例复制过来,毕竟到最后还是要转移数据的。为了不影响我目前在 Vultr 服务器上的 WordPress,我在 DigitalOcean 里新建了一个 droplet,专门用来配置 MoinMoin。我重新执行了一下文档里的东西,最后依旧是在 start 这一步上受挫。

大手术

最近我的网站服务器运行的比较糟糕,特别是博客部分,经常发生 500 错误,有的时候 MySQL 会被 mercy killed,导致 WordPress 无法连接到数据库,博客就挂掉了。

过去我买的比较廉价的 VPS,因此时不时就要捣鼓一下,不过自从我买了 Linode,就比较少的去上 VPS,所以近几年对 VPS 的了解也差了很多。VPS 资源不足的时候,一点资源就要精打细算,因此控制的比较好。后来的 VPS 的内存有了 1GB,想比起过去条件好了许多,我就没有在意控制,甚至编写过一个 Rails 应用,后台用的 MySQL InnoDB 引擎,那时候就觉得内存没有不够的时候。

后来经历过 MySQL 升级,默认的引擎变成了 InnoDB,我旧的配置文件一度导致 MySQL 无法启动。从那之后,我基本上没有再在意过 MySQL 资源优化的问题。这导致的问题就是,MySQL 进程经常被杀死,因为 VPS 的内存被用光了。然后我采用了一些办法,不过收效不大,最后我给博客加上了 WP Super Cache 插件,这样哪怕数据库挂掉也能访问一些页面。然后上周五写了几篇文章,发布的时候竟然出现了 500 错误,这简直不能忍受。刷新了几次发布成功文章后,我就考虑修正一下这个问题。

我想计划是不用 Apache 了,采用 Nginx。我刚用 VPS 的时候,内存很小,才 80M,当时就知道 Nginx 占用资源和 Apache 相比不是一个数量级的。当然 Apache 有它的好处,寿命很久的工程有很多插件,比如 WSGI,我安装 MoinMoin 非常方便,在 Nginx 下就要费一些事。再就是 .htaccess 等功能,Nginx 下使用不同的语法,要改变也很麻烦。不过,现在出现了资源不足的问题,我还是决心做一个尝试。我的 VPS 上目前跑的东西也不多了,主要是一个 WordPress 的博客和一个 MoinMoin 的 wiki,之前自己的 Rails 应用也不跑了,有一个 Awstats 在运行,不过现在看的也不多。

对记录的痴迷

今天晚上,我终于能静下心来,整理一下我的个人维基了。我已经有很久没有编辑我的维基了,上次编辑还是去年十月份。

这次主要是折腾了几次系统,有写知识点想记录下来,但到最后总是懒得弄,所以拖到了今天。另外,和妻子在楼下的餐馆吃饭的时候,也说道要把所有点过的菜都记录下来,最终把菜单上的菜都尝一遍,这个事情我在加拿大的时候就做过,至今维基上还有记录。这些心里都想着要做,最后总是因为懒惰,没有及时之行。

我目前使用的维基系统是 MoinMoin,之前在博客里说过,我受到了啄木鸟社区的影响,十分喜欢他们的维基的界面,最终自己也上了 MoinMoin。今天我在想,我已经挺长时间没有鼓捣它的后台了,也不知道最新版本是个什么情况。我觉得 Python Web 应用比起 PHP 来,还是复杂一些,导致时间长了我都不敢动它了。MoinMoin另一个问题是搜索还不支持中文,网上好像有人弄成了,我也没有功夫去看一看。所以我想,我之前用过 DokuWiki,PHP 写的,还不错的样子,比较轻量,我想也许换成它是个好主意,于是在另一个子域名下进行了安装,结果效果不大理想,速度不大快,感觉还不如 MoinMoin,而且转移也要耗费功夫,单把每篇文章复制粘贴可不行,这些修改记录都是很宝贵的个人历史呢。

近年来我编辑个人维基的次数少多了。在加拿大的时候,我一有了新的东西就进行编辑,MoinMoin 也不赖,在要编辑的地方双击鼠标,就可以在这里进行编辑,不用耗费功夫,就把一个个的干货知识点给记录了下来,十分便捷。现在想想,那个时候我主要还是在用 MacBook,在家用,上学也带着,在校园里也在一直用,甚至在家里躺在床上也用。在这种情况下,有了新的想法,记录下来是很自然的事情。现在我不是这样了,手机替代了笔记本电脑,就没发再这么干了。手机上我不知道有没有 MoinMoin 的客户端,就算是在浏览器里编辑,打字也不爽快,最后也就算了。

个人维基对我来说,是一个记录自己的工具,就好比 Evernote 早年宣传的第二大脑。我之前有了博客,但它记录的是我的想法,我在上面写的是文章,既然是文章,就要有起承转合。维基不同,它像一个私人的笔记本,想到哪里,都可以写上几笔,不必在意格式,不必关心文章的间架结构,只写知识点。当然,这些也不是强制的,有的时候我也喜欢在上面发表一些见解,做一些解释,但毕竟少数。说回来,这是你的地方,想写什么随你。比起博客来,维基要有私密性,我不用 MediaWiki 的原因就是它不支持单个页面加密。MoinMoin 里我设了个私密区,里面所有不方便被别人看到的东西都在里面。我还保存了给我妻子谢的情书。

在手机上,维基就不怎么方便了,人们发明了其它方法来记录自己,这一度让我产生不安。我的手机里装了 Day One,我在里面努力写日记,每周要写一篇周记,但在里面写过一遍的东西,时间长了就不想在别的地方再写一次了。我担心这样下去,我的维基或博客还有没有继续存在的必要。后来我想通了,Day One 更加私密,我常常用来记录一些更佳琐碎的东西,比如同事见的龌龊、工作上的不顺利、甚至关于妻子的坏话。Day One 里面也记录了我的生活,不过方向完全不同,我不用担心谁取代谁。

维基对我来说不可取代的功能之一是内部链接。每篇维基都不是一个孤岛,通过内部链接,把他们串联起来,就能达到非常惊人的效果。像这次我在编写 Funtoo 的条目的时候,顺便浏览了 Linux、Arch Linux、Gentoo 的条目。这些信息的关联,就像是之前流行一时的知识图谱(Knowledge Graph)。

图这种数据结构,在人工智能领域里有很多的应用,对于知识/内容串联也非常有效。之前学英语的时候,我接受过一个理论,学英语要有一本英英词典,查一个单词,就要看它原汁原味的英文解释,有不认识的词就继续查,直到弄懂了所有的词(似乎是李笑来在新东方的课上说的),最终的效果,就是在脑中形成了一副知识图谱,你经历过的每个单词都在这张图的节点里,互相关联着,这样才起到了背单词的作用。我在学人工智能的时候,也做过神经网络方面的项目,心想如果有一台足够快、存储量足够大的计算机,是不是可以把这些算法用上去,让它分析整理全世界的知识,或者仅仅是维基百科上的知识,能不能至少形成一个 inference engine 来帮助我们工作呢?

当然这个想法现在还不能实现,至少不能普及实现,但不妨碍我对于记录这件事的痴迷。其实,不仅仅是维基,个人博客也是我对于自己的记录,很多事情我已经淡忘,但回顾过去的博客,常常会有一种恍然大悟的感觉,原来我这件事情是在这个时间点做的呀。我一共写了 11 年的博客,虽然文章数量不多,但我不打算停下。在 2005 年前后,中国博客最火的年代,我遇到了很多很好的博客,可惜现在 90% 已经不见了,这是多么可惜。我上次给域名续费,一下子续了 10 年,就是要把这个域名下的内容在我有生之年永远的维护下去,并不断补充。

MoinMoin 用了一年多了

今天编辑了我的 wiki 之后,顺手点了一下 RecentChanges 页面,看到了我的编辑记录,发现我这个用 MoinMoin 建的 wiki 已经使用了一念多的时间了。创立这个 wiki 的时间是 2012 年 2 月 1 日,现在想起来感觉就像是前几天一样,让我惊叹时间真是过的飞快啊。

我挺早的就接触了 wiki 这个东西。最开始自然是维基百科,后来买了空间后就在上面自己搭建私人的 wiki。当时 blog 正流行的火爆,很多人买了自己的域名和空间搭建自己的 blog,并把它当作首页。我不想这么做,所以一直是自己手写一个导航页面放上去,blog 和其它的东西放在下层域名中。但自己手写 HTML 并上传十分不方便,SSH 到服务器上修改又有编码问题,页面上的中文在 shell 中被解析成乱码,基本上处于无法改动的状态。最后我厌倦了,于是想用一个内容管理系统来生成首页。最早考虑的是 Movable Type,当时我也是在用 MT 来搭建 blog,MT4 又开始有了页面功能,不过弄来弄去一直不成功,我也不满意 MT 提供的美观效果。后来就把主意打到了 wiki 上面

当时我还只是想用 wiki 来管理首页,因此就排除了已经使用着的 MediaWiki,选择了一个小型的、简单的 wiki 软件来用。当时选择的是 UseMod,外观我挺喜欢的,简单,没有 MediaWiki 那些专门适用于百科全书的功能,整个页面基本上是个白板,我可以任意的往上写东西。不过很快我就遇到问题了。我的想法实际上是用软件当作一个动态管理的工具,说白了就是我可以在浏览器里面编辑这个页面,即时发布。可 UseMod 本质上是个 wiki 软件,因此在页面内容上做出了很大的限制。具体哪一点限制了我,在今天我已经记不起来了,总之它不让我用 HTML 来写页面,它自己提供的格式又无法满足我的要求。我查了一些资料,据说是为了安全考虑。对于一个多人编辑的 wiki 这是必要的,可对于只有我一个人维护的页面则有些过度保护了。没有放宽这个限制的办法,所以我只好作罢。后来我还尝试了一些其它的 wiki 软件,都无法达到要求。最后还是换回了一个我手写的页面,上面只有导航链接,算是一个鸡肋吧。

除了首页外,根据我的 blog 记录,我从 2010 年 2 月 7 日开始搭建自己的私人 wiki。当时我已经放弃了用 wiki 来做首页,因此就使用了最流行的 MediaWiki 来搭建了一个,用于自己日常的记录。开始的时候我因为觉得 wiki 是个好东西,因此就让自己尽量在上面写东西。后来发现这样做对了,因为有很多东西或许当时觉得不值得记录,于是就错过了,到之后再想找回来就很麻烦。而编辑 wiki 的成本很低,而且 wiki 是页面组织的,而不是像 blog 那样用文章来组织的,所以编辑 wiki 就像是随手再纸片上写点什么,而不用专门写一篇文章,所以也不用考虑太多,不用组织语言,直接把最纯粹的信息记录下来就行了。之后要用到了搜索一下就找到了。

MoinMoin 的一处让我不爽的细节

MoinMoin Wiki 的修改后提示信息

在自己搭建的,给自己使用的 wiki 上看到了这样的一句话,是不是觉得不大对劲?

除了 MoinMoin 外,我用过 MediaWiki、UseMod Wiki,还有 DokuWiki,印象里都没有这么一出。每次我看到了这句话,马上就点“清除此提示信息”把它给弄掉,太讨厌了。

用 MoinMoin 做首页

我最早接触的 wiki 系统是 MediaWiki,带我进入 wiki 这扇大门的正是维基百科。我读过一些文章描写过有些人第一次听说一种新技术而激动不已,我当时对 wiki 没有这种感觉。事实上,我那时也不理解 wiki 的作用是什么。为了尝试,我在维基百科上建立了一个 “Gnu 宣言”页面,然后把那篇文章给复制了上去。结果没一会儿,我就发现我建立的页面不见了,然后我的 talk 页面上多了这么一条消息:

欢迎加入Wikipedia大家庭!在动手之前,请先抽出时间阅读Wikipedia:版权信息、Wikipedia:如何编辑页面及Wikipedia:帮助。您也可以到Wikipedia:沙盒中实验一下,有什么问题请到Wikipedia:互助客栈提出,或者直接与我联系。请注意Wikipedia并不收入原始资料。例如“GNU宣言”一文,应当加入介绍GNU宣言的文章,而不是原文。谢谢!–Formulax 2003年8月9日 02:42 (UTC)

这是我第一次的 wiki 的体验。这之后,我陆续在维基百科上进行过数次编辑,渐渐的了解了 wiki 是什么东西。不过,真正让我体会到 wiki 可以用来生成网站的页面是后来的事情了。

当我意识到 wiki 可以用来生成首页时,我已经用一个手写的 HTML 静态页面来做我的首页几年时间了。因为时我随意手写的,因此那个网页非常简单,上面除了我的名字之外,就只有一些我别的网页的链接,比如说 blog、相册等等。之前我还在上面放过我写的论文、我的头像等等,不过靠手动来管理这些东西,实在是太麻烦了,我渐渐的就把它简化成了像这样最最基础的页面了:

My homepage until Feb 11, 2012

我过去是通过 ssh 登陆到主机上,用 vim 来编辑 index.html 文件来制作首页。有时候要往上面放中文时而终端不支持中文字符的话,就用 Emacs 远程编辑这个文件。我也考虑过在本地写好了所有的东西后再同步到服务器上,但这些页面保存在本地上,我又不能随时带着电脑,没法做到随地修改,还是太麻烦。正因为没有一种非常方便的编辑页面的方法,所以我的首页都是万年一个样,我都想考虑过要不要把我的 blog 直接放在根目录下呢。直到后来我想到了 wiki 可以帮我完成这一切。

其实,我最早想用到的工具不是 wiki,而是 Movable Type。MT 5 出来之后,我发现它在过去的基础上添加了 website 这个概念。经过尝试,我觉得 website 就是用来放 blog,这其实不就是一个网页么。而 MT 的后台编辑也勉强可以达到我的要求了。把 blog 和首页一起生成,不但让首页的风格跟 blog 统一,而且还可以让首页趁此机会丰富一下内容。可惜到后来我失败了。当我对 MT 5 的了解加深之后,我才发现 website 并不是我要的东西,中间有些东西要配置起来实在是太复杂了。

终于开始使用 MoinMoin

今天我终于把自己的 wiki 系统换成了 MoinMoin。

我对 MoinMoin 算是觊觎已久了,我的 blog 上关于 MoinMoin 最早的一篇文章是两年前的《还是建了一个 wiki》,那也是我在自己的网站上搭建 wiki 的开始。本来我用 wiki 是像用它来管理我的网页,因为这样可以在浏览器里用方便的结构化文本来生成页面,而不用我麻烦的手写 HTML,当时我试用了几个 wiki 程序都不符合我的要求。主要原因是 wiki 的内容限制有些死板,我不想把我的首页弄得像一个 wiki,我想让它像一个网页。而那些 wiki 程序都以安全为由把用户可以输入的内容限制的死死的,令我非常不爽。后来我放弃了用 wiki 来管理整个网站的想法,转而建立一个单独的 wiki,于是我在当时用的 Site5 共享空间上用 MediaWiki 搭建了一个 wiki。当时我已经想用 MoinMoin 了,可惜用共享空间来搭建 MoinMoin 太麻烦,我最后放弃了。

到了 2010 年的 10 月,我自己开始试用了 VPS,当时也尝试过安装 MoinMoin,不过失败了。虽然现在看来我觉得安装 MoinMoin 不难,但对我来说有些事情是必须要经历过一次才能理解的,在这之前我没有成功的在远程主机上安装成功过 MoinMoin。

2011 年 7 月 2 日我第一次在自己的 VPS 成功安装了 MoinMoin,用 Nginx + FastCGI 来运行,感觉不错。不过由于中文文件名等原因,我到了第二天就放弃了

今年年初我第一次给自己买了 512M 内存的 VPS,有很大的资源可以让我稍微挥霍一下,不用严格计算内存的用量了。本着学习的想法,我在这个 VPS 上装上了 Apache 服务器。在稍微熟悉了一下 Apache 的配置之后,我尝试着在上面跑 MoinMoin。MoinMoin 的文档上说用 WSGI 来运行 MoinMoin 是推荐的方法,但我就是没办法让 MoinMoin 在 Apache + mod_wsgi 模式下正常运行,于是我的尝试又一次失败了。那时我把 wiki 程序换成了 DokuWiki,用起来感觉很不错,当时我基本上都决定了之后就一直用 DokuWiki 下去了,结果命运弄人,偏偏我这时候瞎猫碰上死耗子一般的成功把 MoinMoin 在 Apache + mod_wsgi 模式下给跑起来了。