使用Apache和mod_wsgi部署Django 是一种久经考验的将Django投入生产的方法。
mod_wsgi是一个Apache模块,可以托管任何Python WSGI应用程序,包括Django。
Django将使用任何支持mod_wsgi的Apache版本。
配置环境及使用模块:
Ubuntu 16.04.1 + Django 1.11.15 + Apache 2.4.18 + python 3.5
我的Django项目文件结构如下:(仅供参考)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| tip ├── db.sqlite3 ├── manage.py ├── mytip │ ├── admin.py │ ├── apps.py │ ├── __init__.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── __init__.py │ │ └── __pycache__ │ │ ├── 0001_initial.cpython-36.pyc │ │ └── __init__.cpython-36.pyc │ ├── models.py │ ├── __pycache__ │ │ ├── admin.cpython-35.pyc │ │ ├── admin.cpython-36.pyc │ │ ├── __init__.cpython-35.pyc │ │ ├── __init__.cpython-36.pyc │ │ ├── models.cpython-35.pyc │ │ ├── models.cpython-36.pyc │ │ ├── urls.cpython-36.pyc │ │ └── views.cpython-36.pyc │ ├── templatetags │ │ ├── __init__.py │ │ ├── pagetag.py │ │ └── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ └── pagetag.cpython-36.pyc │ ├── tests.py │ ├── urls.py │ └── views.py ├── static │ └── tip │ ├── css │ │ ├── bootstrap.css │ │ ├── bootstrap.css.map │ │ ├── bootstrap.min.css │ │ ├── bootstrap.min.css.map │ │ ├── bootstrap-theme.css │ │ ├── bootstrap-theme.css.map │ │ ├── bootstrap-theme.min.css │ │ ├── bootstrap-theme.min.css.map │ │ └── test.css │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── image │ │ ├── blog.jpg │ │ ├── books.jpg │ │ ├── challenge.jpg │ │ ├── logo.png │ │ ├── lun.png │ │ ├── online_coding.jpg │ │ ├── qa.jpg │ │ ├── share.jpg │ │ └── u=1917532917,3371716064&fm=27&gp=0.jpg │ ├── js │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ ├── jquery.js │ │ └── npm.js │ └── web │ └── jquery-1.8.3.min.js ├── templates │ └── index │ ├── index.html │ ├── shuati.html │ └── shuati_info.html └── tip ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-35.pyc │ ├── __init__.cpython-36.pyc │ ├── settings.cpython-35.pyc │ ├── settings.cpython-36.pyc │ ├── urls.cpython-36.pyc │ └── wsgi.cpython-36.pyc ├── settings.py ├── urls.py └── wsgi.py
|
一.安装
1.apache2的安装
1
| sudo apt-get install apache2
|
验证apache是否安装成功
1 2 3 4 5
| 查看版本
apachectl -v Server version: Apache/2.4.18 (Ubuntu) Server built: 2017-09-18T15:09:02
|
打开浏览器 输入 127.0.0.1或localhost
1 2 3 4 5
| 出现 Apache2 Ubuntu Default Page
或It works!
则成功
|
2.安装apache2解析python的包 wsgi程序包
1 2 3 4 5
| sudo apt-get install libapache2-mod-wsgi-py3
安装完成后 进入 /usr/lib/apache2/modules 目录 cd /usr/lib/apache2/modules 查看是否存在mod_wsgi.so-3.5
|
二.配置apache
1.编辑配置文件
1 2 3 4 5 6
| 编辑配置文件 sudo vim /etc/apache2/apache2.conf
在文件的最后 添加
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-3.5
|
2.创建网站配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| 编辑网站配置文件 没有则自动新建,这里相当于新建 sudo vim /etc/apache2/sites-available/tip.conf
配置内容: <VirtualHost *:80> #这里就是配置域名的地方,有域名就写上,没有就注释掉 #ServerName www.pyweb.cn # 服务器管理地址,可以不写 ServerAdmin py@163.cn
#wsgi文件目录 WSGIDaemonProcess python-path=/var/www/tip WSGIScriptAlias / /var/www/tip/tip/wsgi.py <Directory /var/www/tip/tip> <Files wsgi.py> Require all granted </Files> </Directory>
#项目文件目录 DocumentRoot /var/www/tip <Directory /var/www/tip> Require all granted </Directory>
#静态文件目录 Alias /static/ /var/www/tip/static/ <Directory /var/www/tip/static/> Require all granted </Directory>
#错误日志 这两份文件在报错的时候会自动生成 在/var/log/apache2/文件夹下
|
1 2 3
| ErrorLog ${APACHE_LOG_DIR}/django-tip-error.log CustomLog ${APACHE_LOG_DIR}/myproject-tip.log combined </VirtualHost>
|
3.将当前的配置文件创建一个软连接到/etc/apache2/sites-enabled
1 2 3
| cd /etc/apache2/sites-enabled
sudo ln -s ../sites-available/tip.conf ./
|
4.执行命令 生效当前配置
1 2 3
| sudo a2ensite tip.conf
如果需要让这个配置失效,可以执行 sudo a2dissite myproject.conf
|
三.配置django配置文件
1.修改seeting.py文件
1 2 3 4 5
| 首先把myproject项目目录拷贝至 /var/www/目录下
在将其ALLOWED_HOSTS=[]改为
ALLOWED_HOSTS=['www.pyweb.cn'],多个域名可以通过逗号隔开。
|
2.修改wsgi.py文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import os # 项目名.settings os.environ["DJANGO_SETTINGS_MODULE"] = "tip.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()
|
四.最重要的一步
重启apache
1
| sudo service apache2 restart
|
启动 : service apache2 start
停止 : service apache2 stop
五.打开浏览器。输入云主机的地址,有域名就输入域名,不过上面需要配置域名
我这里就输入IP地址
按道理来说,到这里就可以显示出项目的首页了
不过,按照正常的剧情,重启服务器或者输入地址查看的时候会报错
关于apache报错信息,请参考:apache报错信息及解决方案