将Django项目部署到CentOS7下的Apache服务器上
一.前期准备:
所需要了解的:
由于用的搭建的是Django项目,且我的项目是用的Python3.xxx写的,所以还需要配置Python3.xxx的环境(centos7自带的是Python2.7的环境):
安装1:Apache服务器的搭建: :点我
安装2:MySQL数据库的搭建(centos7系统下):点我
安装3:在centos7下配置Python3.6.0的环境:
安装Python3与旧版本Python2.7.5共存
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
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,内容如下(注意,下面的目录都要改成你项目所在目录)
WSGIScriptAlias / /yourproject/wsgi/django.wsgi #你项目的wsgi文件,修改1处新建的
Alias /static/ /yourproject/static/ #你项目所需的静态文件(如项目的bootstrap样式等)位置
#ServerName example.com
#ServerAlias www.example.com
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
Require all granted
ErrorLog /etc/httpd/logs/web.error.log
LogLevel warn
//执行下面的命令,不执行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文件的
处,改为
。再修改一下你django项目的setti.py文件的ALLOWED_HOSTS = ['192.168.233.139']
。再重启Apache即可。
最后效果如下: