学习猿地 python教程 django教程8 Django部署(Apache)

# Django部署\(Apache\)

> 在前面的章节中我们使用**python3 manage.py runserver**来运行服务器。这只适用测试环境中使用。

>

> 正式发布的服务,我们需要一个可以稳定而持续的服务器,比如Apache, Nginx, IIS等,本文将以 Apache为例。

>

> 使用[Apache](https://httpd.apache.org/)和[mod\_wsgi](http://www.modwsgi.org/)部署Django 是一种久经考验的将Django投入生产的方法。

>

> mod\_wsgi是一个Apache模块,可以托管任何Python [WSGI](http://www.wsgi.org/)应用程序,包括Django。

>

> Django将使用任何支持mod\_wsgi的Apache版本。

### 测试环境

说明

* Ubuntu 16.04

* Python 3.5.2

* Django 1.11.7

* Apache 2.4

### 配置步骤

#### 1,Apache2安装

```py

Apache2安装

sudo apt-get install apache2

查看版本

apachectl -v

Server version: Apache/2.4.18 (Ubuntu)

Server built: 2017-09-18T15:09:02

```

#### 2,确保有127.0.0.1 localhost,没有就加上。

```py

sudo vim /etc/hosts

127.0.0.1      localhost

127.0.0.1      www.pyweb.cn

```

#### 3,打开浏览器 输入 127.0.0.1或localhost

```py

出现 Apache2 Ubuntu Default Page

或It works!

则成功

```

#### 4,安装apache2解析python的包 wsgi程序包

```py

sudo apt-get install libapache2-mod-wsgi-py3

安装完成后 进入 /usr/lib/apache2/modules 目录

cd /usr/lib/apache2/modules

查看是否存在mod_wsgi.so-3.5

```

#### 5,配置使apache2加载mod-wsgi包

```py

编辑配置文件

sudo vim /etc/apache2/apache2.conf

在文件的最后 添加

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-3.5

```

#### 6,创建网站配置文件

```py

编辑网站配置文件

sudo vim /etc/apache2/sites-available/myproject.conf

配置内容:

<VirtualHost *:80>

  ServerName www.pyweb.cn

  ServerAdmin py@163.cn

  #wsgi文件目录

  WSGIDaemonProcess python-path=/var/www/myproject

  WSGIScriptAlias / /var/www/myproject/myproject/wsgi.py

  <Directory /var/www/myproject/myproject>

      <Files wsgi.py>

          Require all granted

      </Files>

  </Directory>

  #项目文件目录

  DocumentRoot /var/www/myproject

  <Directory /var/www/myproject>

      Require all granted

  </Directory>

  #静态文件目录

  Alias /static/ /var/www/myproject/static/

  <Directory /var/www/myproject/static/>

      Require all granted

  </Directory>

  #错误日志

  ErrorLog ${APACHE_LOG_DIR}/django-myproject-error.log

  CustomLog ${APACHE_LOG_DIR}/myproject-django.log combined

</VirtualHost>

```

#### 7,将当前的配置文件创建一个软连接到/etc/apache2/sites-enabled

```py

cd /etc/apache2/sites-enabled

sudo ln -s ../sites-available/myproject.conf ./

```

#### 8,执行命令 生效当前配置

```py

sudo a2ensite myproject.conf

如果需要让这个配置失效,可以执行 sudo a2dissite myproject.conf

```

#### 9,配置Django项目目录及修改seeting.py文件,

```py

首先把myproject项目目录拷贝至 /var/www/目录下

在将其ALLOWED_HOSTS=[]改为

ALLOWED_HOSTS=['www.pyweb.cn'],多个域名可以通过逗号隔开。

```

#### 10,修改Django的wsgi.py文件

```py

import os

os.environ["DJANGO_SETTINGS_MODULE"] = "myproject.settings"

#os.environ.setdefault("DJANGO_SETTINGS_MODULE", "pyjfive.settings")

from os.path import join,dirname,abspath

PROJECT_DIR = dirname(dirname(abspath(__file__)))

import sys # 4

sys.path.insert(0,PROJECT_DIR)

from django.core.wsgi import get_wsgi_application

application = get_wsgi_application()

```

#### 最后:重启apache2

```py

sudo service apache2 restart

```

#### 浏览器访问

```py

http://www.pyweb.cn/

```

#### 浏览器错误 500

```

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at [no address given] to inform them of the time this error occurred,

and the actions you performed just before this error.

More information about this error may be available in the server error log.

Apache/2.4.18 (Ubuntu) Server at www.py6web.com Port 80

```

* 查看apache2的错误日志

```js

cd /var/log/apache2/

File "/var/www/myproject-test/myproject/wsgi.py", line 17, in <module>, referer: http://www.pyweb.com/

from django.core.wsgi import get_wsgi_application, referer: http://www.pyweb.com/

ImportError: No module named 'django', referer: http://www.pyweb.com/

```

* 问题分析

```js

进入项目目录,使用命令 pip3 show Djando 查看当前是否已经安装django

---

Metadata-Version: 1.1

Name: Django

Version: 1.11.8

切换至root用户 sudo su

进入python3的shell模式

python3

#加载django模块

import django

#错误:No module named 'django'

```

* **解决方案**

```py

在当前root用户下 安装django

sudo su

pip3 install django==1.11

```

#### 文件上传错误:

** 给static文件夹或web项目目录文件递归追加一个www-data用户权限**

```

sudo setfacl -R -m u:www-data:rwx web/

```

掌握学习方法,不如会弯道超车!

学习猿地:成就自己的只需一套精品!

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

推荐阅读更多精彩内容