apache+django+mod_wsgi 部署实践

前几天搭建了python+django+pycharm的开发环境,做了一个博客,申请了一个免费的云主机和一个域名,先在自己的本机上部署,再转到云主机上

(1)开发环境:

ubuntu12.04 + python 2.7 + django 1.6 + pycharm 3.4

(2)安装mod_wsgi

首先,为什么选择mod_wsgi,而不是mod_python,很简单,一开始我也是用的mod_python,但是一直各种问题,在耽误了我5,6个小时后,我选择放弃,尝试mod_wsgi

在命令行下输入:apt-get install libapache2-mod-wsgi  安装mod_wsgi,查看一下啊是否安装成功:/usr/lib/apache2/modules/mod_wsgi.so

(3)配置一下apache的mod_wsgi组件

编辑配置文件:/etc/apache2/apache2.conf,在最后一行添加:

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so

(4)编写项目的wsgi文件

文件根目录新建 django.wsgi 文件,其实.wsgi文件和python的.py是一样的文件,只是后缀不一样了而已,目录如下:/home/username/workspace/Blog/django.wsgi

import os
import sys

path = '/home/username/workspace/Blog' # 这个路径尤其尤其要注意,不然可能会提示 找不到 mysite.settings
if path not in sys.path:
sys.path.append(path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
这里要注意,上网翻了多遍资料,包括官方的文档,都是这么写的:
import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()
但其实可能是版本的问题,我的django版本是1.6的,会出现莫名奇妙的错误,最后改为:

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

可行!可以参见我的 链接,这是个坑,又浪费了我好几个小时

(5)将项目配置进apache

建议:项目用django的自带小服务器可以正常运行,避免部署上apache后出现问题

配置一下/etc/apache2/httpd.conf

  
 ServerName localhost
  DocumentRoot /home/username/workspace  #这里是你根目录的上级目录

  WSGIScriptAlias / /home/username/workspace/Blog/django.wsgi # / 表示URL根路径,后面是你的项目wsgi文件地址
  <Directory /home/username/workspace>
    Order allow,deny
    Allow from all
  </Directory>

搞定,现在重启一下你的apache: sudo /etc/init.d/apache2 restart

输入:locahost/admin 是不是进入后台了?

如果是win系统,没有问题,但是如果是linux系统,就会出现,permission denied,再次查阅了资料,大体的问题是 权限问题,linux系统的文件访问问题

chmod -R 777 /home/username/workspace

依然不行,这里有个取巧的方法,将整个项目搬进 /var/www 路径下,就可以解决问题,这个目录和apache是基友,问题解决

(6)关于静态文件的处理

locahost/admin 访问出现的是admin 的后台,但是没有样式,到 /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static 路径下去吧整个admin目录搬到

项目的 static 底下,admin的样式就搞定了

接着,要弄一下项目的静态文件(此时项目已经搬到 /var/www 下),整个 httpd.conf 文件如下

  ServerName localhost
  # project's parent directory
  DocumentRoot /var/www

  WSGIScriptAlias / /var/www/Blog/django.wsgi
  #WSGIScriptAlias /test /var/www/test.wsgi 
  <Directory /var/www>
   Options Indexes FollowSymLinks
   AllowOverride None
   Order allow,deny
   Allow from all  
 </Directory>

 # 针对静态文件的处理
 Alias /media/ /var/www/Blog/media/
 Alias /static/ /var/www/Blog/static/

 <Directory /var/www/Blog/static>
  Allow from all
 </Directory>

 <Directory /var/www/Blog/media>
  Allow from all
 </Directory>



OK ,搞定,有问题欢迎相互探讨


 

你可能感兴趣的:(apache,django,mod_wsgi)