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编程模板汇总
Feb 12 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
python读取excel表格生成erlang数据
Aug 26 Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 Python
详解Python绘图Turtle库
Oct 12 Python
Python3 main函数使用sys.argv传入多个参数的实现
Dec 25 Python
pytorch下使用LSTM神经网络写诗实例
Jan 14 Python
在keras里面实现计算f1-score的代码
Jun 15 Python
解决tensorflow 释放图,删除变量问题
Jun 23 Python
python中的插入排序的简单用法
Jan 19 Python
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
May 28 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
mysql数据库差异比较的PHP代码
2012/02/05 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
javascript new后的constructor属性
2010/08/05 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
js中各种类型的变量在if条件中是true还是false
2014/07/16 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
生成二维码方法汇总
2014/12/26 Javascript
javascript版2048小游戏
2015/03/18 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
2018/12/06 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
python多进程操作实例
2014/11/21 Python
Django ORM框架的定时任务如何使用详解
2017/10/19 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
下列程序在32位linux或unix中的结果是什么
2015/01/26 面试题
法学专业毕业生求职信
2014/06/12 职场文书
离婚律师函范本
2015/05/27 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python