将Django应用部署到Apache服务器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011402032/article/details/53844191

将Django项目部署到CentOS7下的Apache服务器上


一.前期准备:

  • Apache服务器的搭建(centos 7系统下) :点我
  • MySQL数据库的搭建(centos7系统下):点我
  • Navicat for my sql(可选操作)
  • python3.6的安装(根据自己项目的python版本选择)
  • Django的安装
  • 所需要了解的:

    • 开发环境和生产环境的区别:
      • 开发环境是程序猿的pc或某专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告。 例如我们开发的django项目,在开发过程中测试的时候,我们一般都是用python manage.py runserver这样的命令来打开服务器,进行测试,这样的服务器就是开发服务器,它并不能承受实际环境中的大负载量。
      • 生产环境则是用于我们项目开发好上线后,运用在真实的生产环境中,它往往有大的负载量(满足多个用户同时访问网站),这样对服务器的性能要求就较高,所以我们不能仅仅使用开发服务器来运行在真实的环境中。
  • 由于用的搭建的是Django项目,且我的项目是用的Python3.xxx写的,所以还需要配置Python3.xxx的环境(centos7自带的是Python2.7的环境):

安装1:Apache服务器的搭建: :点我
安装2:MySQL数据库的搭建(centos7系统下):点我
安装3:在centos7下配置Python3.6.0的环境:

安装Python3与旧版本Python2.7.5共存

  • 安装依赖(需要安装开发工具盒一些额外的库。这些额外的库并不严格的需要,但是如果不安装,新版本的python编译器可能没法工作。)
yum -y groupinstall "Development tools"  //可能无效,但不影响
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
  • 下载源码包( 我这下的是python3.6)
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz
mkdir /usr/local/python3 //创建安装目录
cd python3
mkdir lib //创建/usr/local/python3/lib目录
tar -zxvf Python-3.6.0.tgz //解压安装包
cd Python-3.6.0 //进入刚才解压的包里面
./configure LDFLAGS="-Wl,-rpath /usr/local/python3/lib" --enable-shared --prefix=/usr/local/python3
make && make altinstall
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3 //创建软连接

对于以上命令的一些说明:
./configure是源代码安装的第一步,主要的作用是对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系 –prefix是软件的安装目录
1.这是按照路径的设置,./configure 会生成 makefile;
2.等 make 编译源代码生成相应的动态库或者可执行文件;
3.执行 make install 后,生成的动态库或者可执行文件就会拷贝到/usr/local里面。
4. LDFLAGS=”-Wl,-rpath /usr/local/python3/lib” –enable-shared确保生成python2.7动态链接库,不加此选项,导致后面再编译mod_wsgi,一直提示can not be used when making a shared object;
有个一个非常重要的步骤是我们使用的是make altinstall。如果使用make install,你将会看到在系统中有两个不同版本的Python在/usr/bin/目录中。这将会导致很多问题,而且不好处理。

为了告诉python如何找到动态链接库
打开文件 /etc/ld.so.conf,在该文件末尾加上 /usr/local/python3/lib 再运行

ldconfig //使改变发生

改变后的ld.so.conf文件如下:

include ld.so.conf.d/*.conf
/usr/local/python3/lib

现在在终端输入python3查看是否已经安装上了:

这里写图片描述

安装python3.6的包管理工具pip:(其实python3.6在安装上的时候已经自带的有pip了,我们只需要建一个软连接就可以了)

ln -s /usr/local/python3/bin/pip3.6  /usr/bin/pip3

安装4:Django的安装:

pip3 install Django==1.10.4 //这里安装的Django1.10.4
pip3 install PyMySQL //Django1.10连接mysql数据库所需要的

前期准备到此结束,接下来是把项目部署到Apache下。

二.部署过程:
1.把开发好的Django项目复制到CentOS7系统的/usr/local/djangWorkspaces下。改下setting.py文件的数据库配置,统一你的数据库名,密码和安装在CentOS7系统下的是否一致,不一致就更改setting.py的下面配置,使其一致。

这里写图片描述

然后迁移你的数据库,命令如下:

cd /你的Django项目的manage.py文件的同级目录下
python3 manage.py migrate //在CentOS7下的mysql数据库中生成你的数据库表。

2.生成表中的数据(执行sql文件,可选操作)
如过你的Django项目之前是有数据的,那么可以使用Navicat生成数据库表的sql文件,然后执行下面的命令生成数据库中的数据:

source 你生成的sql文件.sql

3.将项目部署到Apache服务器下:
1)使用mod_wsgi:(Django部署到Apache需要的)

wget https://pypi.python.org/packages/56/72/caff357d52a8e9a7cef3b1b25fa58668ce600fb78c69bd3b687abb786cbc/mod_wsgi-4.5.11.tar.gz  //下载mod_wsgi

//编译并安装mod_wsgi
tar -zxf mod_wsgi-4.5.11.tar.gz
cd mod_wsgi-4.5.11 
./configure --with-python=python3 
make&&make install

安装完成之后,mod_wsgi.so会在Apache的modules目录中。

2)主要是修改两个地方:
①.主配置文件是/etc/httpd/conf/httpd.conf。
②.配置存储在的/etc/httpd/conf.d/目录。

修改1:在httpd.conf文件末尾添加:

LoadModule  wsgi_module modules/mod_wsgi.so //用来连接django.wsgi,使工程被Apache加载

在Django项目的根目录中新建wsgi目录,在wsgi目录下新建一个django.wsgi文件。具体操作如下:

cd (cd进入你的django项目的根目录)
mkdir wsgi
cd wsgi
vi django.wsgi //文件中的内容附下:
//以下是django.wsgi的内容,复制粘贴即可
import os
import sys
from django.core.wsgi import get_wsgi_application
# Add this file path to sys.path in order to import settings
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), '..'))
os.environ['DJANGO_SETTINGS_MODULE'] = 'projectname.settings' //projectname改成你的项目名
sys.stdout = sys.stderr
DEBUG = True
application = get_wsgi_application()

//修改完内容,重启Apache
service httpd restart

修改2:配置django项目虚拟主机
在/etc/httpd/conf.d中添加配置文件projectname.conf,内容如下(注意,下面的目录都要改成你项目所在目录)

<VirtualHost *:80>

WSGIScriptAlias  /  /yourproject/wsgi/django.wsgi #你项目的wsgi文件,修改1处新建的
Alias  /static/  /yourproject/static/ #你项目所需的静态文件(如项目的bootstrap样式等)位置

#ServerName example.com
#ServerAlias www.example.com
<Directory  /yourproject/static/>
    Options Indexes  FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
<Directory  /yourproject/wsgi/>
    Require all granted
</Directory>
ErrorLog   /etc/httpd/logs/web.error.log
LogLevel warn
</VirtualHost>
//执行下面的命令,不执行Apache有可能不能访问mysql
setsebool httpd_can_network_connect 1 
service mysqld  restart

到此django项目已经成功部署到Apache服务器了。
测试:打开浏览器输入localhost:80应该就能访问了。


补充:如果想在真机中通过输入ip地址访问我们部署到虚拟机的Apache服务器下的项目可以做以下操作:
1.查看你部署了项目的CentOS系统的ip地址:(我这为192.168.233.139,虚拟机连接模式是NAT)
这里写图片描述

在修改2处的projectname.conf文件的<VirtualHost *:80>处,改为<VirtualHost 192.168.233.139:80> 。再修改一下你django项目的setti.py文件的ALLOWED_HOSTS = ['192.168.233.139']。再重启Apache即可。

最后效果如下:

这里写图片描述

展开阅读全文

没有更多推荐了,返回首页