Django部署到Apache

1、首先安装Django和Apache

腾讯云debian9安装pip和Django
sudo apt-get update && sudo apt-get install python-pip
pip install Django==1.11.9

对于Apache的理解,这篇文章写得比较好(Ubuntu/Centos)apache多站点配置

通过以上步骤,应该安装好了pip和Django,然后我们通过Django指南配置一个hello world工程,自己开启runserver可以访问。

接下来配置Apache,首先安装
sudo apt-get install apache2
apachectl -v #检查Apache版本,默认应该是Apache2.4

2、安装mod_wsgi模块

sudo pip install mod_wsgi
或者试试sudo apt-get install libapache2-mod-wsgi #Python2

3、Apache配置文件目录

Apache的配置文件目录是/etc/apache2,该目录下的文件结构如下:

.
|-- apache2.conf
|-- conf-available
|-- conf-enabled
|-- envvars
|-- magic
|-- mods-available
|-- mods-enabled
|-- ports.conf
|-- sites-available
`-- sites-enabled

其中apache2.conf是主配置文件,里面包括系统的设置,如Timeout的时长、Log的等级和格式等。ports.conf文件配置了监听的端口号,以及是否启用SSL。
剩下的6个目录两两一对,availabel文件夹里面是所有的配置,而enabled目录里面则是启用的配置。而conf、mods和sites可以分别通过命令a2enconf、a2enmod、a2ensite来启用,启用后会在enabled目录下生成一个软链接,指向available目录下的同名文件。
在apache2.conf这个文件最后,是一些IncludeOptional 语句,用来将conf-enabled、mods-enabled、sites-enabled目录下的配置文件包含到主配置文件中。这样的好处是每个配置文件配置一个条目,比较清晰明了,易于查错。

总体过程:
sudo vi /etc/apache2/sites-available/yoursite.conf 修改配置文件;
sudo a2ensite yoursite.conf 配置文件生效;
sudo service apache2 restart 重启Apache。

4、启用wsgi模块

我们需要在mods-available目录下新建mod_wsgi的load文件,具体操作如下:
cd /etc/apache2/mod-available
sudo a2enmod wsgi # 启用wgsi配置
sudo service apache2 restart # 重启Apache2服务

5、托管Django站点

假设Django项目的wsgi.py文件的路径是/home/website/demo/mysite/mysite/wsgi.py,我们需要下面几步来完成Apache对Django项目的托管:

5.1 修改Django项目中的wsgi.py和settings.py文件

修改wsgi.py文件,增加如代码中说明的那几行:

"""                     
WSGI config for travel_record project.                                   
It exposes the WSGI callable as a module-level variable named ``application``. 
For more information on this file, see
https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/
"""
import os
## 增加下面这几行
import sys             
from os.path import dirname, abspath
from django.core.wsgi import get_wsgi_application
PROJECT_DIR = dirname(dirname(abspath(__file__)))
sys.path.insert(0, PROJECT_DIR)                  
#os.environ.setdefault("DJANGO_SETTINGS_MODULE", "travel_record.settings")
os.environ["DJANGO_SETTINGS_MODULE"] = "travel_record.settings" 
## 增加结束                                                
application = get_wsgi_application()

增加的这几行代码做了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目录下进行操作。

这个配置文件的作用是让Django找到Apache

5.3 在/etc/apache2/sites-available目录下增加网站的配置文件

参照该目录下的000-default.conf和Django的教程,写出配置文件mysite.conf如下:

<VirtualHost *:8080>   
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined                
    WSGIScriptAlias / /home/website/demo/mysite/mysite/wsgi.py
    Alias /static/ /home/website/demo/mysite/mysite/static/                    
    Alias /media/ /home/website/demo/mysite/mysite/media/
    <Directory /home/website/demo/mysite/mysite>          
        <Files wsgi.py>        
            Order deny,allow  
            Allow from all  
        </Files>              
    </Directory>
    
    <Directory /home/website/demo/mysite/mysite/static/>                 
        Order deny,allow  
        Allow from all  
    </Directory>
    
    <Directory /home/website/demo/mysite/mysite/static/>                     
        Order deny,allow  
        Allow from all  
    </Directory>            
</VirtualHost>

这个文件是让Apache找到Django
整个配置文件是包含在VirtualHost的尖括号里面的一些设置,尖括号开始的地方,
通过修改上面的文件,你就可以让Apache找到你的Django工程,上边可以修改的内容包括:

8080:修改80为其他数字,可以更改你的端口号,国内的电信貌似把80端口给封了(如果你的域名没有备案的话)。注意,还要修改/etc/apache2/port.conf文件中的Listen port
ServerName:后边改成你自己的域名,如果没有的话就用IP代替。注意,如果改成了域名,还需要修改Django工程下的seeting.py文件,将其ALLOWED_HOSTS=[]改为ALLOWED_HOSTS=['www.yourdomain.com'],多个域名可以通过逗号隔开。
ServerAlias:你的其他域名或IP。

ErrorLog和CustomLog设置错误日志和访问日志的路径和格式。
WSGIScriptAlias设置wsgi文件的路径,Alias语句托管网站的static和media目录。
然后是<Directory>标签,用来设置文件和目录的访问权限。注意对于版本小于2.4的Apache,需要将<Directory>标签中的Order deny,allow和Allow from all改为Require all granted。
修改完后,执行下面的命令启用这个网站:
sudo a2ensite mysite.conf
有时候,你可能需要让它失效(因为你将yoursite.conf改名为其他名字?),可以运行
sudo a2dissite yoursite.conf

做完以上步骤,Apache会提醒你要执行sudo service apache2 reload,这条命令主要是你手动命令Apache根据你刚才配置的yoursite.conf去寻找Django工程,当然我一般都是restart,如果你的Apache不为其他的网站提供服务,那么你也restart吧,因为重启大法好!

每次你修改Django工程文件之后,都要restart一下,它才会生效。

5.3. 修改/etc/apache2目录下的ports.conf文件

增加针对新建站点的端口号的监听:

Listen 80
#增加下面这条语句
Listen 8000

执行完这3个步骤后,就可以重启Apache服务器,访问站点了:
sudo service apache2 restart
访问站点,如果出现错误的话,可以在Django项目的settings.py中启用DEBUG模式,查看输出,进行相应的修改。

主要参考两篇文章把Django搭建到Apache服务器,和在Apache上部署Django项目
混合交叉看,配置成功。注意一定不要少写或者漏写配置文件。否则很容易出错,另外,出错要注意看出错信息,查找原因。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341

推荐阅读更多精彩内容