Blog

成功配置好了 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 这一步上受挫。

我看文档中要求的 moin.conf 文件其实是执行了一个命令,我于是把命令提取出来,很简单,就是 uwsgi <配置文件>。文档中要求的是 .ini 文件。然后我就手工来执行这条命令,没有什么提示。看错误日志,说 bind 这一布发生了权限错误。我很奇怪,明明我是通过 root 来执行的,怎么可能还会有权限不足的情况发生呢?这让我非常苦恼。

结果一直到了今天凌晨两点多也没有弄好,我觉得有些累了,就上床睡觉。躺着睡不着,就看小说,看到大概凌晨五点,天已经开始发亮,我就下了床,继续来研究 uWSGI。

后来我渐渐的走向了正轨,开始看 uWSGI 的官方文档,这个 Managing the uWSGI server 页面的这张表格让我恍然大悟,原来在 Ubuntu < 15.04 的时候,系统默认的是 Upstart,文档中说要用 Upstart 来管理 uWSGI 服务器,而 start 命令想必也来自 Upstart 咯。而我用的是 Debian,还有 Ubuntu 16.04,都开始用 Systemd 来管理服务,因此就没有了 start 命令。

找到了错误的原因,问题就解决了一大半。我研究了一下 uwsgi 程序的命令行参数,把 .ini 的内容用参数表示出来。我发现如果我不用 socket 通信,而是用一个本地服务器端口,就没有问题。我在 8080 端口上执行了 uwsgi 程序,然后通过 IP地址:port 的形式,成功的看到了我的 wiki。虽然因为一些图片路径之类的设置没有经过 Nginx 的配置,所以只有字符没有图形,不过已经证明了 uWSGI 可以这样跑没问题了,一下子给了我极大的信心。

我看了一下 .ini 文件,里面非常明确的说明了 Python 程序的路径,生成用于传递内容的 socket 路径,以及执行时所需要的权限,在这里设置成了 www-data。而我的 socket 文件位于一个 root 权限的文件夹中,这样导致了权限不足的错误。明白了这一点,我把 socket 文件路径换到了 /var/www/moin 中,这个目录的所有者是 www-data,这样问题就解决了。

之后按照文档说的,简单的配置了一下 Nginx,再次打开 wiki,久违的页面就出来了。随后,我在 Vultr 服务器上继续这么操作了一遍,也是很容易就弄好了。这时我的 uWSGI 还是通过命令行执行的,我用 screen 让它在我登出的时候也继续执行。我想先这么用着,等有了精力后再尝试用 Systemd 来管理。不过随后我配置了 Shadowsocks,然后在配置 BBR 的时候,学会了 /etc/rc.local 文件里的命令会在启动后自动执行,于是我把启动 uWSGI 的命令放了进去,问题就解决了。当然,以后我应该还是会配置 Systemd 的。

这时,一方面为了测试 MoinMoin 真的配置好了,一方面也为了把这次的经验记录下来,我在 MoinMoin 上继续完善了 MoinMoinInstall 这个页面,记录了通过 uWSGI 让 MoinMoin 和 Nginx 合作的方法。随后,我研究了一下在 Nginx 里配置 301 转向的方法,然后我的首页也回来了。

随后还有点时间,这次成功配置好了 MoinMoin 也让我振奋,于是我一鼓作气的开始配置 Awstats。结果到了 fastcgi 这一步,我还没有执行,就累的不行了,一看表也到了 7:30,我就收拾收拾上班去了。一夜没睡,年轻时的我就不能撑的太久,现在也是,这个时候虽然我还睡不着,但身体已经疲劳到了极点,开车的时候也有好几次走神。然后一天就萎靡不振,用手指肚搓皮肤和头皮会很舒服,这就是我缺乏休息的表现。

没有评论

Leave a Reply