因工作业务需要,将django部署在apache上其中一波三折,不过都已经解决了

请参考官方文档 https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/modwsgi/

因为与线上的业务有冲突,所以使用了python的virtualenv库。所以准备工作是先安装一些必要软件

  1. pip install virtuallenv

  2. yum install httpd

  3. yum install mod_wsgi.x86_64

设置项目工程目录

  1. 新建工程目录:mkdir /data/rest

  2. 切换到新建的目录里:cd /data/rest/并设置为虚拟环境:virtualenv env

  3. 为了使用虚拟环境env,需要激活虚拟环境为接下来的包安装做准备 :source env/bin/activate,激活后,命令行的左边的提示符将会变成(venv)Your-Computer:your_project UserName#)(本例中是(env) [root@localhost rest]#)这样的结构,这是为了让你知道已经激活虚拟环境了。现在开始你使用pip安装的包将会安装在虚拟目录下,与全局的python的安装分离了

  4. 激活后就可以将所需安装的包安装在虚拟环境目录中了,本次需要安装django及所需要的依赖库,arrow, pillow,pycrpto,pymongo,Mysql-Python. pip install django==1.9.4 ...

  5. 安装完后可以运行python manage.py runserver 127.0.0.1:8000进行调试,调试后可以进行apache配置了

apache配置:

  1. 如要设置端口的将Listen 80修改为你要监听的端口号2.

  2. 在httpd.conf最底下添加如下配置信息


  3. WSGIScriptAlias / /data/rest/rest/wsgi.py

  4. WSGIPythonPath /data/rest:/data/rest/env/lib/python2.7/site-packages

  5. #因为需要使用rest接口所以下面这些设置为On

  6. WSGIPassAuthorization On

  7. #WSGIDaemonProcess www.example.com python-path=/path/to/mysite.com:/path/to/venv/lib/python2.7/site-packages

  8. #WSGIProcessGroup www.example.com

  9. <VirtualHost 10.10.86.211:8000>

  10.     #ServerName 10.10.86.211:8000

  11.     Alias /static /data/rest/env/lib/python2.7/site-packages/django/contrib/admin/static

  12.     <Directory /data/rest>

  13.         <Files wsgi.py>

  14.             Require all granted

  15.         </Files>

  16.     </Directory>


  17. </VirtualHost>

保存即可完成配置


顺便说下在django的配置文件中必须配置ALLOWED_HOSTS,否则会一直出现 Bad Bad Request (400) 错误

ALLOWED_HOSTS = [
    '.example.com', # Allow domain and subdomains
    '.example.com.', # Also allow FQDN and subdomains
    '10.10.86.211', # allow ip
]

域名一定要设置对了