Apache,wsgi,django 程序部署配置方法详解


Posted in Python onJuly 01, 2019

本文实例讲述了Apache,wsgi,django 程序部署配置方法。分享给大家供大家参考,具体如下:

前面写过一篇文章,ngixn,uwsgi,django,python 环境配置,有兴趣的朋友可以参考 nginx,django部署

后来有人在QQ上问我,用Apache 好部署吗?我当时只在windows下用 APACHE2.3,django1.4,wsgi 部署过,还没有在 linux 下部署。前几天有时间,我在 centos 上测试部署了一下。也不难。唯一的差别是,在windows 下有已经编译好的 wsgi.so 文件,放到  apache 的 modules下,然后在 httpd.conf 中增加

LoadModule wsgi_module modules/mod_wsgi.so

但是在 linux 下,wsgi的安装,都要在源码编译下安装,而且还有几点要注意的。下面就详细介绍我部署的过程。

安装python 2.7 或者你需要的版本

这个就简单带过了,下载安装包之后,windows 可以直接 运行安装包,linux 下 最好编译安装吧。这一步可以参考我上面提到的文章,我已经说得比较清楚。 但我这个centos 环境,是别人已经装好了的,而且比较怪异,安装在:/usr/local/activepython27 ,一般的python 安装在:/usr/bin/python 。其实原因简单,因为centos 自带的python 是 2.4 的版本较低,所以重新装了一个新版本的。

安装wsgi

首先要在google 代码托管处下载.https://code.google.com/p/modwsgi ,如果是windows 的,可以直接下载编译好的文件。linux 的兄弟们,下载源码编译:

wget http://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz
tar zxvf mod_wsgi-3.4.tar.gz
cd mod_wsgi-3.4
./configure

发现什么了,报错了

./configure
checking for apxs2... no
checking for apxs... no
checking Apache version... ./configure: line 1695: apxs: command not found
./configure: line 1695: apxs: command not found
./configure: line 1696: /: is a directory

报错的原因,也很清楚。没有 apxs.下面安装它

yum install httpd-devel

如果是 ubuntu  可能命令为 sudo apt-get install apache2-devsudo apt-get install apache2-threaded-dev,具体的命令可以查一下.

再次编译

[root@29 mod_wsgi-3.4]# ./configure (这里有可能要加上python路径 --with-python=/usr/local/activepython27)
checking for apxs2... no
checking for apxs... /usr/sbin/apxs
checking Apache version... 2.2.3
checking for python... /usr/local/activepython27/bin/python
configure: creating ./config.status
config.status: creating Makefile
[root@29 mod_wsgi-3.4]#
make
make install

得到如下编译结果:

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
chmod 755 /usr/lib/httpd/modules/mod_wsgi.so
[root@29 mod_wsgi-3.4]#

配置 apache2 配置文件httpd.conf .

LoadModule wsgi_module modules/mod_wsgi.so

然后启动 apache

service httpd start

发现什么鸟,这是只布谷鸟,乱叫,报错了

Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
ImportError: No module named site

错误的原因,系统有多个python 版本,必须指明用哪一个python .
在apache 配置文件中,继续加入

WSGIPythonHome /usr/local/activepython27  (这是你要采用的python的路径,一般是/usr/bin/python,我这环境别人配成这样了)

用什么方法可以得到这个路径呢,直接执行python 命令就可以得到,前提是,这个python 软连接是你用要的python, 注意一点的是,WSGIPythonHome不要配置到<VirtualHost> </VirtualHost> 之间,否则报错

import sys
sys.prefix

就可以得到路径/usr/local/activepython27 。

Django应用程序相关配置

1.我的django程序部署在 /opt/www/html/djangocms/crm 这里

 Apache,wsgi,django 程序部署配置方法详解

在工程的conf 目录下加入如下两个文件

apache_django_wsgi.conf 文件内容如下

<VirtualHost *:80>
  ServerName 192.168.1.111
  ServerAlias 192.168.1.111
  DocumentRoot /opt/www/html/djangocms/crm
  WSGIScriptAlias / /opt/www/html/djangocms/crm/conf/django.wsgi
  <Directory "/opt/www/html/djangocms/crm">
   order allow,deny
   Allow from all
  </Directory>
  Alias /static /opt/www/html/djangocms/crm/static
  <Location "/static">
      SetHandler None
  </Location>
  <Directory "/opt/www/html/djangocms/crm/static">
    order Deny,Allow
    Allow from all
  </Directory>
</VirtualHost>

django.wsgi 文件内容

import os
import sys
sys.path.append("/opt/www/html/djangocms")
sys.path.append("/opt/www/html/djangocms/crm")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "crm.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

最后在 apache 配置文件 httpd.conf 中加入:

Include "/opt/www/html/djangocms/crm/conf/apache_django_wsgi.conf"

重启apache

service httpd restart

你就看到你熟悉的django应用程序了。

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
Python随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 Python
Python 获得命令行参数的方法(推荐)
Jan 24 Python
python线程池threadpool实现篇
Apr 27 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
Apr 30 Python
python实现批量图片格式转换
Jun 16 Python
python 实现求解字符串集的最长公共前缀方法
Jul 20 Python
django foreignkey外键使用的例子 相当于left join
Aug 06 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
使用 Python 遍历目录树的方法
Feb 29 Python
jupyter lab文件导出/下载方式
Apr 22 Python
numpy的Fancy Indexing和array比较详解
Jun 11 Python
Python命令行参数定义及需要注意的地方
Nov 30 Python
Python中字符串List按照长度排序
Jul 01 #Python
python opencv minAreaRect 生成最小外接矩形的方法
Jul 01 #Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
Jul 01 #Python
Python之pymysql的使用小结
Jul 01 #Python
linux下安装python3和对应的pip环境教程详解
Jul 01 #Python
python写日志文件操作类与应用示例
Jul 01 #Python
python实现自动化上线脚本的示例
Jul 01 #Python
You might like
php获取某个目录大小的代码
2008/09/10 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
文本链接逐个出现的js脚本
2007/12/12 Javascript
checkbox使用示例
2013/08/23 Javascript
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
JavaScript SweetAlert插件实现超酷消息警告框
2016/01/28 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
js实现本地时间同步功能
2017/08/26 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
AngularJS 实现购物车全选反选功能
2017/10/24 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
React实现阿里云OSS上传文件的示例
2020/08/10 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
Centos5.x下升级python到python2.7版本教程
2015/02/14 Python
简单介绍Python中的struct模块
2015/04/28 Python
Python赋值语句后逗号的作用分析
2015/06/08 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
OpenCV+Python识别车牌和字符分割的实现
2019/01/31 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
.NET面试问题集
2015/12/08 面试题
交通事故协议书范文
2014/04/16 职场文书
信息管理专业自荐书
2014/06/05 职场文书
大学生创业计划书
2014/08/14 职场文书
餐厅收银员岗位职责
2015/04/07 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
Mysql基础之常见函数
2021/04/22 MySQL
Js类的构建与继承案例详解
2021/09/15 Javascript
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫