ubuntu下部署wiki与Django (使用mod-python与mod-wsgi)

最近使用Django python写了个网站,后来又想部署wiki。所以就开始用apache来部署这两个服务。
网上的很多资料我扫过一遍,很多都比较旧了,想来想去。不如把自己动手的过程分享出来,让大家省时省力把。


第一部分:使用mod_python(cgi方式)部署wiki 

注意:本来准备就用mode_python把wiki和django部署完毕就行了,结果悲剧的发现:1.5以上的新版django,已经不支持mod_python部署了。。。悲剧,调试了那么久(报错ImportError: No module named modpython)。django官网有如下描述:
(Chapter 12 of the Django Book (second edition) discusses deployment and especially scaling in more detail. However, note that this edition was written against Django version 1.1 and has not been updated since mod_python was first deprecated, then completely removed in Django 1.5.)


言归正传,继续配置wiki。


1:
使用如下三条命令安装需要的包
apt-get install python-moinmoin   //python wiki已经被强大的ubuntu打包好了,真是业界良心。
apt-get install apache2                 //安装apache
apt-get install libapache2-mod-python   //开始安装mod-python了。这样才能在后面apache配置中实现ScriptAlias的方法(建议直接换成安装mod-wsgi,这样会更加通用,并且安装原理一模一样。详见下面第二部分)
安装完成后,如下目录比较关键:
usr/share/moin/
#moin wiki的目录
var/log/apache2/
#记录apache网站错误的日志文件目录,如果出现错误又看不到log,可以从这里找到error.log分析细节,十分有用.


2:
sudo mkdir /var/www/mywiki
sudo cp -r /usr/share/moin/data /usr/share/moin/underlay /usr/share/moin/htdocs /usr/share/moin/server/moin.cgi /var/www/mywiki
sudo cp /etc/moin/config/wikiconfig.py /etc/moin/        //真正生效的wikiconfig在这里。
sudo chown -R www-data:www-data /var/www/mywiki           //记得给apache开读写权限


3:
修改apache的/etc/apache2/httpd.conf配置文件
添加:
ScriptAlias /wiki "/var/www/mywiki/moin.cgi"              //设置网址调转域名选择
Alias /MyWikiSource/ /var/www/mywiki/htdocs/        //这个是取别名,可要可不要。最好加上
网上很多人都在这个配置文件中加了LoadModule wsgi_module modules/mod_wsgi.so 或者LoadModule python_module /usr/lib/apache2/modules/mod_python.so
实际证明,如果用apt-get install安装的module,不写也没关系,系统会根据ScriptAlias关键字,知道需要load这个lib。


4:
修改/etc/moin/wikiconfig.py中的 instance_dir = "/var/www/mywiki"
这样才能找到对应的wiki数据包


5:
另外还需要在该配置文件中,打开url_prefix_static = '/mywiki' + url_prefix_static这个选项。
这样wiki的css、jpg等资源包才能正常加载进来。(如果按照上面的方法,取过了MyWikiSource的别名,那么这里就也可以使用url_prefix_static = '/MyWikiSource'来替代”url_prefix_static = '/mywiki' + url_prefix_static“哦~~!  建议使用这种取别名的方法,不知道什么原因,第一中方法容易时不时的失效,应该和环境变量可能在某些情况下改变有关)


6:
sudo /etc/init.d/apache2 restart 来看看网页吧(your_ip/wiki 网页),如果看不到图片,说明资源包路径设置还是有问题。可以通过var/log/apache2/下的apache log找着看。


:7:(可选)
最后修改编码方式,避免中文乱码
将# -*- coding: iso-8859-1 -*-
改为# -*- coding: utf-8 -*- #使用UTF-8编码


8:(可选)
因为服务器中原来可能安装了其他的apache服务,为了避免哲学服务对域名跳转造成干扰,所以就要为wiki的目录添加例外,在/etc/apache2/httpd.conf中添加
<location "/wiki">
SetHandler None
</location>
这样这个wiki的子域名就不会被干扰到了。


如果转载,请注明出处。谢谢!


第二部分:使用mod_wsgi(wsgi方式)部署wiki和django

因为django已经不支持mod-python了,所以建议wiki和django都用wsgi来部署。故这部分包括django和wiki的共同部署问题。


1:

sudo apt-get install libapache2-mod-wsgi   //安装mod_wsgi 


2:

拷贝moin.wsgi
sudo cp /usr/share/moin/server/moin.wsgi  /var/www/mywiki/     

3:
sudo chown -R www-data:www-data /var/www/mywik      //让copy的wsgi可以被apache的权限访问到。当然你也可以只去修改wsgi的文件权限。


4:

然后修改apache的/etc/apache2/httpd.conf配置文件。
只需要更换一行即可,其他都和前面一样。原理也是一样的。


   #ScriptAlias /wiki "/var/www/mywiki/moin.cgi"  
   WSGIScriptAlias /wiki "/var/www/mywiki/moin.wsgi"  //设置网址调转域名选择
    
   Alias /MyWikiSource/ /var/www/mywiki/htdocs/
   
   
这样就可以了。。简单吧。


接下来我们要开始部署Django了,激动啊。


先告诉你!实验结果很欣慰,十分简单呢。。。

1:
把Django的工程全部copy到/var/www/mysite下面,然后sudo chown -R www-data:www-data /var/www/mywik改变其权限。

2:
随后在apache的/etc/apache2/httpd.conf中加入一行。
 WSGIScriptAlias /  "/var/www/mysite/mysite/wsgi.py"

这个wsgi.py 在Django框架(新版)新建工程的时候就已经自动帮你弄好了。很爽。

3:
不过这个wsgi.py由于环境变量的关系,必须再加入其工程的路径,否则就会报错。


  import os

  import sys
  sys.path.append('/var/www/mysite')
  os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
||加入这三行,就可以顺利执行了!!!
  
  os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
  
  from django.core.wsgi import get_wsgi_application
  application = get_wsgi_application()


哈哈,重启apache服务后再试试,是不是就和django自带的runserver 效果一样了呢。 
对哦,还不用输端口号呢。

补充:
如果需要加入文件访问管控,可以在apache的config中用类似如下的方法进行修改:
<Directory "/var/www/html/mysite">  #网站所在目录。
    Order Deny,Allow
    Allow from all
</Directory>
没有细研究,有需要再学习吧。


回头再看看,两个服务都跑起来了,效果达成。


如果转载,请注明出处。谢谢!



猜你喜欢

转载自blog.csdn.net/a4262562/article/details/44171709