软件安装

0.如果对selunix不熟就先把它停掉

  vi /etc/selinux/config

  改动selinux=diabled

  然后重启计算机

1.编译安装python

  mod_wsgi的安装需要使用到python的共享库,编译安装python时要启用共享库

  ./congifure --enable-shared

  make &&make install

  添加python链接库到路径

  sudo vi /etc/ld.so.conf

  /usr/local/Python2.7/lib  #添加路径到文件

  sudo  /sbin/ldconfig -v

2.安装apache yum -y install apache

3.安装mod_wsgi其实mod_wsgi有两种安装模式,除了单独安装(yum/编译)之外,还可以通过pip install mod_wsgi方式进行安装

  ./configure --with-apxs=/usr/local/apache/bin/apxs \

   --with-python=/usr/local/bin/python

4.安装django pip install django==1.8

三者的关系以及工作过程

  mod_wsgi是apache的一个模块,是遵循python的wsgi协议而开发的、用于连接python web框架的扩展。从这个关系可以看出,这几个软件的信息流是怎样的?

  首先,apache监控服务器主机的80端口,当接收到来自客户端请求的时候,apache会判断这个请求是否匹配,如果匹配其中的某个条件,那么apache就会将这个请求通过mod_wsgi来转发给Django进程进行处理,Django会对这个请求进行进一步处理,执行业务逻辑,最后通过wsgi协议返回响应给apache,apache接收到这个响应之后就会发送给客户端。注意,django再整个部署的过程中是不需要手动启动的,平时我们开发的时候使用python manage.py runserver只是开发过程中调试用的。

配置

配置django

  如果只采用默认的settings的话,是不需要再配置django文件的,如果想分别使用不同的进程来启动同一个项目中的不同应用的话,需要配置wsgi.py中的django环境变量。

配置mod_wsgi

  同样,mod_wsgi默认也是不需要配置的,除非有高级的需求,否则初级的配置只需要默认即可。

配置apache

  对apache这个服务器软件的所有操作都在其配置文件中完成。

  配置文件默认为/etc/httpd/conf/httpd.conf。

  配置文件的具体写法在其官方文档中有详细说明: http://httpd.apache.org/docs/2.2/configuring.html

  apache是一个模块化的软件,除了一些必要的模块在编译时嵌入之外,其它模块需要在配置文件中导入才能发挥作用,apache的所有模块都以mod开头。mod_wsgi毫无疑问需要导入才能使用:

  LoadModule wsgi_module modules/mod_wsgi.so

  另外,配置文件可以直接写在这个配置文件中,也可以写在别的地方,然后导入作为配置的一部分,例如可以把文件写在django项目的根目录下。在apache配置文件中导入这个文件

  Include /root/test1/apache_django_wsgi.conf

  这样就跟全部写在httpd.conf中一样了。

  最终的配置文件简单地配置成下面这个样子:

 LoadModule wsgi_module modules/mod_wsgi.so

 <IfModule mod_wsgi.c>

 # '/' 代表你想服务你的应用的base URL路径,'/'也就是root url

 # /path/to.../wsgi.py代表使用WSGI应用来服务该url下的所有请求

 # 如果应用在子目录中(https://example.com/mysite in this example),使用下面的设置

 #WSGIScriptAlias /mysite /path/to/mysite.com/mysite/wsgi.py process-group=example.com

 WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py

 # 如果建立了虚拟环境,将此路径指向虚拟环境的python path

 WSGIPythonHome /path/to/venv

 # WSGIPythonPath让你的项目包能够使用import导入到python path,也就是说import mysite能够运行

 WSGIPythonPath /path/to/mysite.com

 # 下面的代码保证apache能使用wsgi.py文件

 <Directory /path/to/mysite.com/mysite>

 <Files wsgi.py>

 Order deny,allow

 Allow from all

 #apache2.4版本的命令

 #Require all granted

 </Files>

 </Directory>

 #守护模式下的配置,其中不能使用WSGIPythonHome和WSGIPythonPath,而要使用python-home和python-path

 # 进程名字随意起

 WSGIDaemonProcess example.com python-home=/path/to/venv python-path=/path/to/mysite.com

 user=apache  group=apache

 WSGIProcessGroup example.com

 #由于django本身不会serve files,所以需要别的web server承担这个工作,可以选择其它没有运行django的服务器来承担

 #但是如果必须用同一台apache的话,可以将一些url设置成静态文件路径

 #例如

 # 相当于 www.xxx.com/robot.txt  -->/path/to/mysite.com/static/robots.txt

 Alias /robots.txt /path/to/mysite.com/static/robots.txt

 Alias /favicon.ico /path/to/mysite.com/static/favicon.ico

 Alias /media/ /path/to/mysite.com/media/

 Alias /static/ /path/to/mysite.com/static/

 <Directory /path/to/mysite.com/static>

 Require all granted

 </Directory>

 <Directory /path/to/mysite.com/media>

 Require all granted

 </Directory>

 <Directory /path/to/mysite.com/mysite>

 <Files wsgi.py>

 Require all granted

 </Files>

 </Directory>

 AddType text/html  .py

 WSGISocketPrefix /var/run/

 </IfModule>

  当然也可以将相关的配置写在虚拟主机的配置中。

  apache配置文件:虚拟主机的配置参数(略)

mod_wgsi配置过程中可能遇到的问题:

5xx服务器内部错误

这种问题可以通过检查apache的错误文件发现问题,错误文件/var/log/httpd/error.log中出现类似于 mod_wsgi (pid=20380): Target WSGI script '/var/www/test0/test0/wsgi.py' cannot be loaded as Python module.

  问题很可能出在所安装的mod_wsgi扩展没有找到相应的链接库。

  解决方法:

    1.检查python编译安装要安装共享库

      ./configure --enabled-shared

      make && make install

    2.添加共享库到路径

      sudo vi /etc/ld.so.conf

      /usr/local/Python2.7/lib

      sudo  /sbin/ldconfig -v

    3.使用编译安装mod_wsgi

      ./configure --with-apxs=/usr/local/apache/bin/apxs \

      --with-python=/usr/local/bin/python

报错:Permission denied: mod_wsgi (pid=2081): Unable to connect to WSGI daemon process 'autotester' on '/etc/httpd/logs/wsgi.2076.0.1.sock' after multiple attempts

  可在apache配置文件或者wsgi.conf中添加

  WSGISocketPrefix /var/run/

  来自 <https://my.oschina.net/crazyharry/blog/336811>

使用.configure  --enable-shared 安装python2.7之后出现下面的报错:

  error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

  解决方法如下:

    来自 <http://blog.csdn.net/wanyanxgf/article/details/8021641>

    1.编辑      vi /etc/ld.so.conf

      如果是非root权限帐号登录,使用 sudo vi /etc/ld.so.conf

      添加上python2.7的lib库地址,如我的/usr/local/Python2.7/lib,保存文件

    2.执行 /sbin/ldconfig -v命令,如果是非root权限帐号登录,使用 sudo  /sbin/ldconfig -v。这样 ldd 才能找到这个库,执行python2.7就不会报错了

      /etc/ld.so.conf:

      这个文件记录了编译时使用的动态链接库的路径。

      默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件

      如果你安装了某些库,没有指定 --prefix=/usr 这样lib库就装到了/usr/local下,而又没有在/etc/ld.so.conf中添加/usr/local/lib,就会报错了

    ldconfig是个什么东东吧 :

      它是一个程序,通常它位于/sbin下,是root用户使用的东东。具体作用及用法可以man ldconfig查到

      简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件 缓存到/etc/ld.so.cache 以供使用

      因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig

      使所有的库文件都被缓存到ld.so.cache中,如果没做,即使库文件明明就在/usr/lib下的,也是不会被使用的,结果编译过程中抱错,缺少xxx库。

django+nginx+mod_wsgi+apache网站部署的更多相关文章

  1. Django+Nginx+uWSGI生产环境部署

    生产环境中的数据流 参考文档: wsgi详解:https://blog.csdn.net/li_101357/article/details/52748323 wsgi协议介绍(萌新版):https: ...

  2. django+nginx+python3 生产环境部署

    一.安装python基础环境 1.安装各类基础模块 yum install  gcc-c++ wget openssl-devel bzip2-devel expat-devel gdbm-devel ...

  3. django+nginx+supervisor+gunicorn+gevent 网站部署

    django+nginx+supervisor+gunicorn+gevent 网站部署 django,nginx,supervisor,gunicorn,gevent这几个都是在本领域大名鼎鼎的软件 ...

  4. Flask + mod_wsgi + Apache on Windows 部署成功(随时接受提问)

    前言 说是前言,纯粹就是吐槽. 假设你赶时间.全然能够跳过这部分,我保证不会在这里隐藏不论什么实用的内容. 人上年纪后.可能冲劲不足,我花了大概两周的时间才成功的将flask部署到windows上.还 ...

  5. Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)

    Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...

  6. 第10章 使用Apache服务部署静态网站

    章节简述: 本章节中通过对比目前热门的网站服务程序来说明Apache服务程序的优势,并新增主机空间选购技巧小节. 了解SELinux服务的3种工作模式,小心谨慎的使用semanage命令和setseb ...

  7. 使用Apache服务部署静态网站

    1970年,作为互联网前身的ARPANET(阿帕网)已初具雏形,并开始向非军用部门开放,许多大学和商业部门开始接入.虽然彼时阿帕网的规模(只有4台主机联网运行)还不如现在的局域网成熟,但是它依然为网络 ...

  8. Django + Uwsgi + Nginx 的生产环境部署

    使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归 ...

  9. Django + nginx + uswgi 的部署总结

    一.引言 自己小组内写了一个网站,需要部署到远程服务器,搜索了好多资料,但是大部分资料都比较繁琐,并且没有一个教程能够直接从头到尾适合,在部署过程中,我是按照很多教程然后综合试验着逐渐部署成功,其中有 ...

随机推荐

  1. 笔记-网络-抓包-wireshark

    笔记-网络-抓包-wireshark 1.      开始 环境:win8笔记本,无线网 1.1.    无线网卡设置 因为需抓捕无线网卡上的数据包,需要进行一项设置,如捕获有线网卡,无需设置. 打开 ...

  2. [原]sencha touch之布局

    今天记录一下关于sencha touch中的几种布局,其实很简单的,还是直接上代码,一目了然 1:box布局,其实就是vbox和hbox,说白了一个是横着摆放,一个是竖着摆放 Ext.applicat ...

  3. Java8_Lambda表达式

            从2014年java8发布到现在已经有几个年头了,现在java11都发布了.公司最近把服务器环境重新搭建了一遍,jdk版本也从7换成了8,终于可以在代码里面写Lambda表达式了.作为 ...

  4. Linux磁盘与文件管理系统

    基本上Linux的正统文件系统为Ext2,该文件系统内的信息主要有: superblock:记录此filesystem的整体信息,包括inode/block的总量,使用量,剩余量,以及文件系统的格式与 ...

  5. Spring Boot 要点--启动类和热部署

    spring boot需要一个启动类 比如 package com.tianmaying; import org.springframework.boot.SpringApplication; imp ...

  6. Neural Network

    逻辑回归用神经网络节点的方式表示 前面已经介绍过逻辑回归的模型,样本为(x,y) 其中y的值为1或0,假设x有2个特征,则对应关系如下图所示.  实际情况是需要求需要三个参数,因此输入层需要添加一个 ...

  7. centos使用--vsftpd配置

    目录 1 在服务器配置FTP服务 1.1 在root权限下,通过如下命令安装Vsftp(以CentOS系统为例): 1.2 在启动vsftpd服务之前,需要登录云服务器修改配置文件,禁用匿名登录. 1 ...

  8. Oracle数据库迁移--->从Windows到Linux

    I did a practice to migrate the oracle database from windows to linux operation system. The followin ...

  9. 【NOIP 2012】借教室

    题目 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望 ...

  10. [oldboy-django][6其他]rest framwork有关事

    官网地址: https://github.com/encode/django-rest-framework 英文教程:http://www.django-rest-framework.org/tuto ...