在ubuntu上部署django其实还算简单直观,最重要的问题就是路径设置正确。
一,安装python 和django。这个很简单,django用pip安装就可以。就不解释了。
二,安装apache2 和 wsgi。
这里用的是apt-get.
sudo apt-get insall apache2
sudo apt-get install libapache2-mod-wsgi
需要注意的是,如果之前安装配置过apache2的并且配置很乱,无法修复,建议还是完全卸载之后在安装。完全卸载的命令:
$ sudo apt-get --purge remove apache-common
$ sudo apt-get --purge remove apache*
安装完以后,去 /etc/apache2/ 下的 mods-available 和mods-enabled 中查看是否都存在 wsgi.conf 和wsgi.load 两个文件。
三,配置apache 和 wsgi
(PS.假设你是在目录/var/www/mysite 下面 django-admin.py startproject testproject ).
1、apache的配置:
在/etc/apache2/site-available中新建一个文件 testdjango.conf (PS.写的时候把中文注释都删除)
<VirtualHost *:80>
ServerName testproject.djangoserver
#ServerName这个无所谓,只要在host中把你的ip地址映射到这个上面就可以了。不想改host最简单的方法就是用 sudo a2dissite 000-default.conf 等虚拟主机给disable掉,只留 testdjango.conf。(PS.在site-enabled中的site是enable的,可以根据这个来查看)
DocumentRoot /var/www/mysite/testproject
# 这一条是指向网站的根目录
<Directory /var/www/mysite/testproject>
Order allow,deny
Allow from all
</Directory>
WSGIDaemonProcess .djangoserver processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup testproject.djangoserver
#这里的testproject.djangoserver 对应前面的ServerName
WSGIScriptAlias / /var/www/mysite/testproject/apache/django.wsgi
# (/和/var...中间是有空格的)是将后面的那个路径指向网站的根目录。第一个“/”表示外部访问时的网站根目录,当有新的requset的时候,apache从这里开始解析。
</VirtualHost>
2、wsgi的配置
在 /var/www/mysite/testproject/下新建dir:apache 。在./apache下新建文件django.wsgi。(文件名对应前面的WSGIScriptAlias第二个路径下的文件名)
import os
import sys
path = '/var/www/mysite'
if path not in sys.path:
sys.path.insert(0, '/var/www/mysite/testproject') #将网站工程目录临时加入ubuntu系统环境中
os.environ['DJANGO_SETTINGS_MODULE'] = ' testproject.settings'
#新建一个环境变量DJANGO_SETTINGS_MODULE,目的是指向网站工程的settings.py,这里
#用' testproject.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
配置完成以后
sudo a2ensite testdjango.conf
sudo service apache2 reload
然后浏览器http://127.0.0.1 就可以看见django的初始页面了。
PS.出错的话,一定要多看看apache2的err log。
命令行输入: tail /var/log/apache2/error.log
如果遇到服务器403的错误,那么可能是你的"/"目录被禁止访问(默认)
修改一下apache2.conf文件(位于/etc/apache2/)
把Require all denied改为Allow from all就可以了。