本页面记述在 Linux 上使用 Apache 服务器安装 MoinMoin 维基例程的步骤。 在此之前,你应该完成../基本安装。在其他类Unix操作系统上,比如FreeBSD,安装步骤是类似的。

有两种可能情况。你可能是服务器的管理员(root),可以安装和修改计算机上的每一个文件,特别是可以修改 Apache 的配置文件。你也可能只是普通用户,只能对自己 home 目录下的文件进行写操作,不能修改Apache的配置文件。下面讨论这两种情况。

目录

管理员 (root)

大多数 GNU/Linux 发行版事先安装好了 Apache。但是,Apache文件的具体位置可能有所不同。你应该查阅发行版手册,或者在适当的讨论区上寻求答案。在接下来的章节中,我们假设一个文件系统的(几乎标准的)布局如下:

有些发行版使用 apache 代替 httpd 作为目录名,其他的发行版也可能使用奇怪的设置。

创建维基例程

创建维基例程的操作包括拷贝文件和设置适当权限。在继续操作之前,你应该明确Apache服务器以什么用户和组运行。最简单的方法是运行下面的命令:

> egrep "^User|^Group" /etc/httpd/httpd.conf
User wwwrun
Group nogroup

上面显示了一个典型的结果: "wwwrun.nogroup"。其他常见结果包括 "nobody.nogroup", "apache.apache" 和 "www-data.www-data"。你当然可以使用自己的方式来设置。重要的你应该知道到底是哪一个结果,因为你还需要利用它们来设置文件权限。

这个信息清楚之后,请阅读../创建维基例程,然后按照下面的步骤来做。

安装 moin.cgi

需要拷贝 moin.cgi。它用于连接 MoinMoin 和 Apache。你可以把这个脚本放在任何位置 (MoinMoin文件的路径可以任意配置,以适合文件系统的布局)。但是为了简单和安全起见,我们建议你按照下面的例子进行操作,除非你认为自己可以做的更好。

我们将在例程目录下创建一个 cgi-bin 子目录。使用../创建维基例程中定义的环境变量,运行下面的命令:

> cd $WIKILOCATION/$INSTANCE
> mkdir cgi-bin
> cp $SHARE/server/moin.cgi cgi-bin
> chown -R $USER.$GROUP cgi-bin
> chmod -R ug+rx cgi-bin
> chmod -R o-rwx cgi-bin

配置 moin.cgi

moin.cgi 运行时,它导入 MoinMoin 模块,而 MoinMoin 模块接着导入其他模块和配置文件. 虽然 MoinMoin 模块在正确配置 (如../基本安装所述) 的系统中总可以被找到,但是配置文件不一定会存在。编辑 moin.cgi 脚本来纠正它。 在文件顶端添加这些文字:

import sys
sys.path.insert(0, '..')

你也可以使用包含wikiconfig.py文件的目录的绝对路径来代替 '..'.

配置 Apache

现在所有文件都到位了,并且正确的设定了权限,我们需要配置 Apache。但是,由于不同的发行版中其默认的 Apache 配置各不相同,而且管理员经常会对配置文件作出不同的添加和更改,我们无法给出涵盖所有情况的精确建议。相反,我们首先大致的描述有哪些要做的操作,然后给出一些特定的配置,你可以把它们添加到Apache配置文件的适当位置。

你的Apache安装后应该是这样的:

下面的命令会在你的 Apache 配置文件底部增加两行。它们只涵盖上述的最后两条。你应该自己检查第一条 (Linux发行版中的变化实在是多种多样)。注意你可能需要将这两行拷贝到配置文件中适当的位置 -- 也许在其他类似的某些行配置的附近。

> echo "" >>/etc/httpd/httpd.conf
> echo "Alias /wiki/ \"$SHARE/htdocs/\"" >>/etc/httpd/httpd.conf
> echo "ScriptAlias /mywiki \"$WIKILOCATION/$INSTANCE/cgi-bin/moin.cgi\"" >>/etc/httpd/httpd.conf

你只需要定义 htdocs 的 alias 一次。你需要对不同维基例程定义不同的 script alias。

配置 MoinMoin

最后,检查例程目录下的wikiconfig.py文件是否包含 htdocs url_prefix,例程的 data 目录,underlay 目录的正确路径。 你可以使用相对路径,但是注意它们应该是相对于GCI脚本而不是相对于配置文件的!你也可以使用绝对路径,这样不会出错。

如果你一直听从我们之前的建议,那么这个配置文件中的设置应该如下所示:

    data_dir = '../data/'
    data_underlay_dir = '../underlay/'
    url_prefix = '/wiki'

还有一些其他设置可以更改,详细内容请看../创建维基例程

测试维基

现在一切都应该工作正常了。现在应该 重新启动 Apache 服务器 (通常使用 "/etc/init.d/apache restart", 有时候是 "apachectl restart") ,然后操作如下:

如果有错误发生,请看页面底部的问题解答

Apache 技巧

高级配置和其他技巧,请看 帮助-其他

普通用户 (安装在 home 目录)

在多人共享的计算机上,普通用户没有管理员权限,不能修改 httpd.conf 文件,不能将文件拷贝到系统所属的 cgi-binhtdocs 目录。在这种情况下,无法在 Apache 中设置 UserDir 使得每个用户都可以在 home 目录下建立网站。如果管理员却是如此设置服务器,那么所有以 "/~username" 开始的 URLs 都会被重定向到用户的 home 目录下的子目录,用户对这些目录有写权限,可以安装MoinMoin.

下面,我们以用户 "mm" 为例。当然,下面所有的 "mm" 都可以替换成你自己的用户名。

确认 /~username 工作正常

只有管理员 (root) 允许的情况下,home 目录安装方式才可以正常工作。所以,第一步是检查其是否可以正常工作。一般来说,Apache 会被配置成使用 home 目录中的 public_html 子目录作为网站的根目录。所以,第一步是检查这个目录是否存在。

> ls -ld ~/public_html
drwxr-xr-x   2 mm       users        4096 Nov 30 00:29 public_html

如果目录不存在,就新建一个,确保它可以被网络服务器读取和访问。

> mkdir public_html
> chmod a+rx public_html
> ls -ld ~/public_html
drwxr-xr-x   2 mm       users        4096 Nov 30 00:35 public_html

现在检查 "/~mm" URL 是否工作正常:

> lynx -error_file=/dev/stderr -dump http://localhost/~mm/ >/dev/null
URL=http://localhost/~mm/ (GET)
STATUS=HTTP/1.1 200 OK

如果是 "200 OK" 的结果,那表明它工作正常,你可以进行下一步检查了。如果是 "403 Forbidden" 或者是 "404 Not Found",那么可能是目录有些问题,或者可能是管理员禁止了这些功能。

如果可以读取该目录下的文件,你还需要检查在这个目录下是否能够执行CGI脚本。使用下面的命令在适当的位置新建一个简单的CGI脚本:

> mkdir -p ~/public_html/cgi-bin
> cat > ~/public_html/cgi-bin/test.cgi
#!/bin/sh
echo Content-Type: text/plain
echo
echo "CGI scripts work"
<CTRL-D>
> chmod a+rx ~/public_html/cgi-bin/test.cgi
> lynx -dump http://localhost/~jh/cgi-bin/test.cgi
CGI scripts work

如果结果不是"CGI scripts work", 那说明又有问题了。检查目录的权限,试试其他的名字。最糟糕的情况是你没有权限运行CGI脚本。你必须让管理员(root)给你设置权限。

如果有了权限,你就可以在 public_html 目录下创建维基例程了。 :)

创建维基例程

创建维基例程的操作包括拷贝文件和设置适当权限。请阅读 ../创建维基例程,按照其所描述的步骤进行操作。

安装 htdocs 文件

网络服务器需要访问这些文件,所以我们要把它们拷贝到"public_html"目录。

> cd ~/public_html
> cp -R ~/share/moin/htdocs wiki
> chmod -R a+rX wiki

安装 moin.cgi

需要拷贝 moin.cgi。它用于连接 MoinMoin 和 Apache。你要把它放在可以运行CGI脚本的目录。下面是默认的情况:

> cd ~/public_html
> mkdir cgi-bin
> cp $SHARE/server/moin.cgi cgi-bin
> chmod -R a+rx cgi-bin

配置 moin.cgi

moin.cgi 运行时,它导入 MoinMoin 模块,而 MoinMoin 模块接着导入其他模块和配置文件. 由于所有文件都安装到了home目录,所以它们可能都无法找到。编辑 moin.cgi 脚本来纠正它。 在文件顶端添加这些文字:

When moin.cgi is launched, it imports a MoinMoin module (that in turn imports other modules and the configuration file). Since everything has been installed in your home directory, it is likely none of these will be found. Edit the moin.cgi script to correct that. Add these lines near the top of the file:

import sys
sys.path.insert(0, '/home/mm/lib/python2.3')
sys.path.insert(0, '/home/mm/lib/python2.3/site-packages')
sys.path.insert(0, '/home/mm/share/moin/mywiki')

当然,你应该根据实际情况修改这些路径。前两行用于定位 MoinMoin 模块,最后一行用于定位 wikiconfig.py 文件。

注意: 可能需要编辑这个文件的第一行,将它指向 Python 的正确版本,默认值应该可以运行,如果不行的话可以使用 "#! /usr/bin/python2.3"。

注意 2: 在这个文件中有一行 request = RequestCGI(). 如果你使用复杂的 mod_rewrite,可以在括号中添加 properties = {'script_name': '/mywiki'} 。这样 MoinMoin 可以生成以 /mywiki 开头的URLs:

def handle_request(req, env, form):
    request = RequestCGI(req, env, form, properties = {'script_name': '/mywiki'})
    request.run()

配置 MoinMoin

最后,检查例程目录下的 wikiconfig.py 文件中是否包含正确的htdocs目录,例程data目录,underlay目录的路径。可以使用相对路径,但注意它们是相对于CGI脚本的,而不是相对于配置文件的!你也可以使用绝对路径,这样不会出错

    data_dir = '/home/mm/share/moin/mywiki/data/'
    data_underlay_dir = '/home/mm/share/moin/mywiki/underlay/'
    url_prefix = '/~mm/wiki'

测试维基

现在一切都应该工作正常了。现在按照下面的步骤来操作:

如果有错误发生,请看下面的问题解答

问题解答

你可以在 ../问题解答中看到更多信息。

当维基工作不正常的时候,首先应该使用命令 "tail /var/log/httpd/error_log" 来显示最近的错误。通常,你可以看到发生了什么错误,比如说缺少权限之类的。

Adding permission to serve the htdocs directory

In some (sane) Linux distributions (like SuSE 9.0) serving directories other than the document-root "/srv/www/htdocs" with Apache is switched off by default for security reasons in "/etc/httpd/httpd.conf" (or for Apache2 "/etc/apache2/httpd.conf"):

# forbid access to the entire filesystem by default
<Directory />
  Options None
  AllowOverride None
  Order deny,allow
  Deny from all
</Directory>

To allow Apache to serve directories outside of the document root you have to add these lines to "/etc/httpd/httpd.conf" (in SuSE it is recommended to create a new "http.conf.local" and include this file in "/etc/sysconfig/apache2"):

Alias /wiki/ "/usr/share/moin/htdocs/"
<Directory "/usr/share/moin/htdocs/">
   Order deny,allow
   Allow from all
</Directory>

ScriptAlias /mywiki "/usr/share/moin/mywiki/cgi-bin/moin.cgi"
<Directory "/usr/share/moin/mywiki/cgi-bin">
   Order deny,allow
   Allow from all
</Directory>

Of course, you need to adapt the paths to your particular situation.

此页的英文版本: HelpOnInstalling/ApacheOnLinux