MoinMoin是一个python版的wiki,最初由德国人编写,支持标准的所有wiki语法,还有多种插件可供选择,可以通过插件支持tex,默认有ppt展示等等,非常不错,。很多大型wiki都用moinmoin,如ubuntu的wiki[http://wiki.ubuntu.org.cn/%E9%A6%96%E9%A1%B5],国内著名的啄木鸟python网站[http://wiki.woodpecker.org.cn/moin/],所以选他不会错。他有什么特点呢?不使用数据库,你说对了,不使用数据库可以使得升级和”搬家“没有后顾之忧。效率会低吗?不会,他支持百万级的页面没有问题。放心用吧。
安装过程如下:
安装前的说明:
moinmoin有QuickInstallation和Server Installation两种方式。主要区别是:
Quick Installation只是简单的搭建起来没有权限管理等。
Server Installation比较正规了,什么都有。所以建议还是Server Installation吧。
可以使用 Apache + wsgi 来安装,也可以使用 nginx + wsgi来安装。下面分别来叙述。
叙述前先解释一下什么是wsgi?
wsgi:Web Server Gateway Interface
所以对应的服务器下需要对应的mod_wsgi模块插件,例如apache需要的mod_wsgi模块和nginx需要的mod_wsgi是不同的。
1. 安装apache [Install Apache]:
$sudo apt-get install apache2
2. 安装python [Install python, python-dev]:
python 默认ubuntu上已经有了,所以不用费劲了。如果没有,那就安装一下:
$sudo apt-get install python python-dev
3. 安装适合apache的mod_wsgi模块 [Install mod_wsgi for Apache]
$sudo apt-get install libapache2-mod-wsgi
OR install mod_wsgi for Apache with source code
http://code.google.com/p/modwsgi/
./configure --with-apxs=/usr/local/apache/bin/apxs --with-python=/usr/bin/pythonmakemake install
apxs 需要单独安装,是APache eXtenSion tool
$sudo apt-get install apache-dev
既然都用ubuntu了,而且目标是apache对应的wsgi,没有必要自己折腾了,直接装wsgi就行了。想折腾的可以好好折腾。
4. 安装MoinMoin [Install MoinMoin]
a) 从http://moinmo.in/MoinMoinDownload 获取最新的源码包,我下载的时候是1.9.7
b) 解压: $tar -xvf moin-x.x.x.tar.gz
c) 将moin的库和模块安装到python里:
$cd moin-x.x.x
$sudo python setup.py install --force --record=install.log
d) 检查MoinMoin模块是否安装正常:
$python
>>>import MoinMoin;
>>>
如果不报错说明MoinMoin模块安装正常。
e) 配置wiki的服务器文件
创建的文件层次说明:
|------------------------/var/moinsource 存放moin启动的配置文件与mod_wsgi结合时读取
|------------------------/var/moinwiki 存放wiki的数据文件,如页面内容等
$cd /var
$mkdir moinsource moinwiki
$sudo cp -rf /usr/local/share/moin/data moinwiki #将之后的页面数据文件存放在这里
$sudo cp -rf /usr/local/share/moin/underlay moinwiki #将wiki自带的页面文件存放在这里
其中/usr/local/share/moin 的路径根据你安装的python位置来定。找不到的话也没事,可以直接从刚才的安装包里的wiki目录下找到然后拷贝过来。
$cd ../moinsource
$sudo cp -rf /usr/local/share/moin/config .
$sudo cp -rf /usr/local/share/moin/server .
$cp config/wikiconfig.py .
$cp server/moin.wsgi .
1) 修改 moin.wsgi
将 #sys.path.insert(0, 'path/to/wikiconfigdir')解注释,并填写对应的路径,我的是:
sys.path.insert(0, '/var/moinsource')
注意这个是python文件,所以sys之前不要有空格(python以缩进作为代码块的区分)
2) 修改 wikiconfig.py
将 data_dir = os.path.join(instance_dir, 'data', '')
data_underlay_dir = os.path.join(instance_dir, 'underlay', '')
最后的''里填入对应的路径:
data_dir = os.path.join(instance_dir, 'data', '/var/moinwiki/data')
data_underlay_dir = os.path.join(instance_dir, 'underlay', '/var/moinwiki/underlay')
需要超级管理员的话,可以解注释:#superuser = [u"YurName"],然后替换YourName为管理员用户名,在之后启动的wiki的注册页面里用这个用户名进行注册即可。
3)让www-data用户(apache用户)拥有hod住moinwiki文件的权限
$cd /var
$sudo chown -R www-data:www-data moinwiki
$sudo chmod -R ug+rw moinwiki
f ) 配置apache运行moinwiki
如果不想占用默认的80端口的apache虚拟机,可以让apache另外监听其他端口,实现apache多端口配置。如果直接使用80端口在的虚拟机,只更改/etc/apache2/site-enabled/000-default即可。
1)使用默认的80端口所在的虚拟机:
编辑/etc/apache2/site-enabled/000-default
删除之前的配置信息:
DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory>
因为这些信息在使用moinwiki时没有用了。之后添加一行:
WSGIScriptAlias / /var/moinsource/moin.wsgi
即指定出moin.wsgi的具体位置。
2)如果使用多端口配置则按照以下步骤进行:
I) 编辑 /etc/apache2/ports.cnf,在
Listen 80
这一行的下面添加一行要监听的其他端口,如8001:
Listen 8001
II) 编辑/etc/apache2/sites-enabled/000-default添加新的虚拟机信息
<VirtualHost *:8001> ServerAdmin zzgthk@localhost <Directory /> Options FollowSymLinks AllowOverride None </Directory> WSGIScriptAlias / /var/moinsource/moin.wsgi ErrorLog /var/log/apache2/moin_error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/moin_access.log combined </VirtualHost>
g) 测试:
重启apache使配置生效
$sudo /etc/init.d/apache2 restart
浏览器访问:http://127.0.0.1:8001即可看到了。点击左上角【登陆】,在进入的页面里注册刚才是superuser的账号即可,然后登陆之后就是管理员了,管理员可以安装语言包什么的。
==========未整理完的分割线===================================================================
其中/var/www/main.py就是提供wsgi的主程序
当然,一般程序都有静态文件支持,所以,您可能需要对某个目录下的文件跳过处理,如下
Alias /static /var/www/static/
如此即可.最后加上目录设置即可,对于上面的例子,完整的虚拟主机配置如下
ServerAdmin admin@xxx.comDocumentRoot /var/wwwServerName xxx.comServerAlias www.xxx.comWSGIScriptAlias / /var/www/main.py/Alias /static /var/www/static/AddType text/html .pyErrorLog /var/log/httpd/xxx_error.logCustomLog "|/usr/bin/cronolog /var/log/httpd/xxx_access_%Y%m%d.log" custom1Options Indexes FollowSymLinksAllowOverride AllOrder allow,denyAllow from all
这样就配置好了此站点的mod_wsgi支持.
install theme: 2 steps
静态文件css和img放到
/usr/local/lib/python2.6/dist-packages/MoinMoin/web/static/htdocs
and theme.py文件放置位置
/srv/share/moin/data/plugins/theme
小心的设置Python变量
当重新输入而不是剪切和粘贴操作时,应特别小心. 在wikiconfig.py中引用错误会导致失败. 其后的条目也是变量. 还有, 一些功能只有在wikiconfig.py或者farmconfig.py中开启他们对应的选项后才能正常使用.
moin.cgi找到, Moin不运行
如果你不得不将moin代码位置加入系统路径, 请确保指定这个路径是MoinMoin本身的上级, 这样MoinMoin这个词汇在导入时可以找到.
CSS文件不工作
丢失CSS样式是很常见的错误. 你的维基看起来很丑陋, 一点也不像现在这个漂亮的维基. 大多数情况下, 是因为你没有阅读建议而弄错了配置, 或者因为你比我们聪明,而试图自定义这些建议. :-)
解决问题很简单: 确保你的Apache Alias和ScriptAlias不是一样的. 这个Apache设置永远不能工作:
Alias /wiki/ "/prefix/share/moin/htdocs/"
ScriptAlias /wiki/ "/var/www/wiki/moin.cgi"
Alias用于静态文件: css, 图片等等. ScriptAlias用于将moin.cgi从url中隐藏. 你必须使用不同的值! 对于ScriptAlias, 或者Alias, 你可以使用任何值, 但是Alias必须匹配url_prefix的设置. 这是一个可以工作的例子(默认设置):
# Apache config
Alias /wiki/ "/prefix/share/moin/htdocs/"
# Wiki config
url_prefix = '/wiki'
使用宏创建newpage
Home
人员类 项目类 文章类
| | |
| | |
+ + +
人员列表(老师和学生2类) 项目列表 文章类表
| | |
| | |
+ + +
具体人员(模板) 具体项目(模板) 文章模板
年
<a id="userhome" class="nonexistent" title="admin @ Self" href="/admin">admin</a>
|
<a id="userprefs" rel="nofollow" href="/CategoryNews?action=userprefs">settings</a>
|
<a id="logout" rel="nofollow" href="/CategoryNews?action=logout&logout=logout">logout</a>