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 multiprocessing多进程原理与应用示例
Feb 28 Python
使用Python实现图像标记点的坐标输出功能
Aug 14 Python
Atom Python 配置Python3 解释器的方法
Aug 28 Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 Python
Python3 虚拟开发环境搭建过程(图文详解)
Jan 06 Python
Python实现遗传算法(二进制编码)求函数最优值方式
Feb 11 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
Feb 26 Python
Python3.7下安装pyqt5的方法步骤(图文)
May 12 Python
python调用私有属性的方法总结
Jul 24 Python
scrapy redis配置文件setting参数详解
Nov 18 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 04 Python
Python&Matlab实现樱花的绘制
Apr 07 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
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
2011/06/30 PHP
destoon整合UCenter图文教程
2014/06/21 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
2015/12/18 PHP
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
Bootstrap导航简单实现代码
2017/03/06 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
vue.js动画中的js钩子函数的实现
2018/07/06 Javascript
vue数据初始化initState的实例详解
2019/04/11 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
Python的randrange()方法使用教程
2015/05/15 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
基于Python 的语音重采样函数解析
2020/07/06 Python
Django如何批量创建Model
2020/09/01 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
超市端午节活动方案
2014/01/23 职场文书
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
幼儿园中班上学期评语
2014/04/18 职场文书
初中英语课后反思
2014/04/25 职场文书
基层党员干部四风问题整改方向和措施
2014/09/25 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
九年级化学教学反思
2016/02/22 职场文书
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis