在Apache上部署Django项目
0.概述
Django是一个基于Python的web开发框架,在实际生产环境中部署的时候,还需要用Apache容器来部署。这里记录下如何在Debian系统中用Aapche和mod_wsgi模块来部署Django项目。
1.系统信息
1 | $ uname -a |
我用的是Debian发行版,Apache的配置与别的发行版有较大不同,这里以Debian为例进行说明,别的发行版需要进行一定的修改。
2. 安装Django和Apache
Django可以通过如下命令安装:
1 | sudo pip install Django==1.9.0 #设置版本号为1.9.0 |
Apache通过不同发行版的包管理命令安装。在debian下,是:
1
sudo apt-get install apache2
3. 安装mod_wsgi模块
mod_wsgi可以通过pip安装,但是需要提前在系统安装apache-dev
包,但是在Debian发行版上,这个包名叫apache2-prefork-dev
,详情参考这里。通过如下命令安装
1 | sudo apt-get install apache2-prefork-dev |
此外,还需要安装python-dev
包,如果要使用python3,则需要安装python3-dev
包:
1 | sudo apt-get install python-dev |
然后pip 安装mod_wsgi:
1 | sudo pip install mod_wsgi |
此外也可以自己编译mod_wsgi:首先从这里下载文件包,然后解压,编译。假设版本是4.5.3,全部命令如下:
1 | wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.3.tar.gz |
如果要使用python3,则./configure
那条命令改为./configure --with-python=/usr/bin/python3.4
。
如果没有报错,那么mod_wsgi就编译好了!
编译好后,会在apache的模块目录/usr/lib/apache2/modules/
生成mod_wsgi.so文件。
4.Apache配置文件目录结构
Apache的配置文件目录是/etc/apache2
,该目录下的文件结构如下:
1 | . |
其中apache2.conf
是主配置文件,里面包括系统的设置,如Timeout的时长、Log的等级和格式等。ports.conf
文件配置了监听的端口号,以及是否启用SSL。envvars
和magic
里面设置了一些环境变量相关的东西,我没怎么看过。
剩下的6个目录两两一对,availabel
文件夹里面是所有的配置,而enabled
目录里面则是启用的配置。而conf
、mods
和sites
可以分别通过命令a2enconf
、a2enmod
、a2ensite
来启用,启用后会在enabled
目录下生成一个软链接,指向available
目录下的同名文件。
在apache2.conf
这个文件最后,是一些IncludeOptional
语句,用来将conf-enabled
、mods-enabled
、sites-enabled
目录下的配置文件包含到主配置文件中。这样的好处是每个配置文件配置一个条目,比较清晰明了,易于查错。
5. 启用wsgi模块
我们需要在mods-available
目录下新建mod_wsgi
的load文件,具体操作如下:
1 | cd /etc/apache2/mod-available |
6. 托管Django站点
假设Django项目的wsgi.py
文件的路径是/home/yunfeng/Dev/git/mysite/mysite/wsgi.py
,我们需要下面几步来完成Apache对Django项目的托管:
1. 修改Django项目中的wsgi.py
和settings.py
文件
修改wsgi.py
文件,增加如代码中说明的那几行:
1 | """ |
增加的这几行代码做了2件事:1.将Django项目的的路径加入到系统路径中,使得Apache服务器可以找到wsgi.py
文件;2. 修改os.environ
的值,使得多个Django项目同时被Apache托管的时候不会出现串扰的问题。
接下来修改settings.py
文件,主要修改的地方有3个:
- 将
DEBUG=True
改为DEBUG=False
- 将
ALLOWEND_HOSTS
里面写上服务器的访问域名或IP地址 - 将
TEMPALTES
中的DIRS
改写成指向模板目录的绝对路径
Django项目里面需要修改的就这2个文件,下面的内容都是在/etc/apache2
目录下进行操作。
2. 在/etc/apache2/sites-available目录下增加网站的配置文件
参照该目录下的000-default.conf
和Django的教程,写出配置文件mysite.conf如下:
1 | <VirtualHost *:8000> |
整个配置文件是包含在VirtualHost
的尖括号里面的一些设置,尖括号开始的地方,*:8000
表示你希望的项目监听的端口号。ErrorLog
和CustomLog
设置错误日志和访问日志的路径和格式。WSGIScriptAlias
设置wsgi文件的路径,Alias
语句托管网站的static
和media
目录。
然后是<Directory>
标签,用来设置文件和目录的访问权限。注意对于版本小于2.4的Apache,需要将<Directory>
标签中的Order deny,allow
和Allow from all
改为Require all granted
。
修改完后,执行下面的命令启用这个网站:
1 | sudo a2ensite mysite.conf |
3. 修改/etc/apache2目录下的ports.conf文件
增加针对新建站点的端口号的监听:
1 | Listen 80 |
执行完这3个步骤后,就可以重启Apache服务器,访问站点了:
1 | sudo service apache2 restart |
访问站点,如果出现错误的话,可以在Django项目的settings.py
中启用DEBUG模式,查看输出,进行相应的修改。