Apache和Django整合

Apache和Django整合

为了能够安装一些额外的包,需要先安装EPEL repository

sudo yum install epel-release

接下来就可以安装 pip httpd mod_swgi了

sudo yum install python-pip httpd mod_wsgi

接下来,为了能够让我们的Django项目和其他的系统工具和Python项目独立,我们需要创建一个Python virtual environment

A Virtual Environment is a tool to keep the dependencies required by different projects in separate places, by creating virtual Python environments for them. It solves the “Project X depends on version 1.x but, Project Y needs 4.x” dilemma, and keeps your global site-packages directory clean and manageable.

For example, you can work on a project which requires Django 1.3 while also maintaining a project which requires Django 1.0.

sudo pip install virtualenv

安装完后,在你想创建项目的地方创建文件夹并进入该文件夹

mkdir ~/myproject
cd ~/myproject

在该文件夹下运行

virtualenv myprojectenv

这会在你的目录下创建一个myprojectenv文件夹,在这里面,它会安装一个当前版本的Python和pip,我们可以用这些来安装和配置为这个项目独立的python环境

在为我们项目安装Python需要的东西前,我们需要先激活当前环境

source myprojectenv/bin/activate

命令行提示会变成 (myprojectenv)user@host:~/myproject$. 这个样子,提示你当前正在Python virtual 环境中操作

在当前激活的环境下,安装Django

pip install django

创建和配置新的Django项目

现在Django已经安装到我们的虚拟环境中了,我们可以创建项目了

创建Django项目

在当前目录下创建项目,注意那个’.‘,表示我们希望Django将文件创建在当前目录下

django-admin.py startproject myproject .

调整项目设置

为了当前项目的简单,我们使用默认的SQLite数据库,不去进行配置,但是我们需要配置静态文件放置的目录,通过在myproject/settings.py增加STATIC_ROOT属性来指定静态目录为我们工程文件夹下的static文件夹

vim myproject/settings.py
添加
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

完成初始化项目

cd ~/myproject
./manage.py makemigrations
./manage.py migrate

给我们项目创建一个管理员用户

./manage.py createsuperuser

接下来我们将所有静态的内容收集到我们指定的目录

./manage.py collectstatic

最后,启动服务器

./manage.py runserver 0.0.0.0:8000

然后我们就可以通过浏览器访问了

当前对django的配置就告一段落了,我们通过以下命令退出当前的虚拟环境

deactivate

配置Apache

现在Django工程已经工作了,我们可以将Apache配置为前端.它接收到客户端的链接后将会通过mod_wsgi翻译成WSGI格式,这个格式就是Django应用期待的.

为了配置WSGI路由,我们需要创建一个新的配置文件定义WSGI路由,使用sudo命令创建并打开在 /etc/httpd/conf.d目录下的django.conf文件

sudo vim /etc/httpd/conf.d/django.conf

我们首先配置静态文件,使用一个别名告诉Apache将所有以/static开头的请求映射到我们的static目录下,并且给予它访问的权限

Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
    Require all granted
</Directory>

接下来,我们给予wsgi.py授权让其可以访问我们的Django代码存储的文件夹.

Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
    Require all granted
</Directory>

<Directory /home/user/myproject/myproject>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

配置玩这些,我们已经可以去创建真正处理WSGI路由的部分了.我们将会使用daemen模式去运行WSGI进程,这是推荐的配置.我们可以使用WSGIDaemonProcess指示设置这个.

这个指示接受任意一个名字给进程.我们使用myproject来保持一致性.接着,我们设置Python path以便于Apache可以找到所有需要的组件.因为我们使用了虚拟环境,所以我们需要设置两部分path.第一个是我们工程的父目录,这里可以找到我们的工程文件.第二个是我们虚拟环境目录中的lib/pythonx.x/site-packages path,这样,Apache就可以找到运行我们项目所需要的所有的Python代码.

接着,我们需要指定进程租.这个应该指向和我们为WSGIDaemonProcess指示的相同的名称(myproject本例中).最后,我们需要设置脚本别名,以便Apache会将根域名请求路由给wsgi.py文件.

Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
    Require all granted
</Directory>

<Directory /home/user/myproject/myproject>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

WSGIDaemonProcess myproject python-path=/home/user/myproject:/home/user/myproject/myprojectenv/lib/python2.7/site-packages
WSGIProcessGroup myproject
WSGIScriptAlias / /home/user/myproject/myproject/wsgi.py

处理一些权限问题

接下来,我们去修正一些权限问题以便Apache服务可以访问我们的文件.默认Centos会分别锁住每个用户的home目录,所以我们可以将apache用户添加到我们的用户组中.

将apache用户添加到用户组中

sudo usermod -a -G user apache

接下来我们将我们的目录添加可执行权限,这样,apache可以进入我们的目录

chmod 710 /home/user

如果使用SQLite,那么需要允许Apache单独处理数据库文件的访问

第一步就是改变权限,让用户组和拥有者可以读或写.

chmod 664 ~/myproject/db.sqlite3

Afterwards, we need to give the group Apache runs under, the apache group, group ownership of the file:

sudo chown:apache ~/myproject/db.sqlite3

为了能够读写文件,我们还需要给Apache组父目录的所有权

当这一切都做完了,你可以启动Apache Service了

sudo systemctl start httpd

如果一切正常,使用下面命令让apache开机启动

sudo systemctl enable httpd

本文摘录翻译自How To Serve Django Applications with Apache and mod_wsgi on CentOS 7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值