Apache上部署Django
0. 部署环境
Ubuntu 14.04 on AliYun
Apache 2.4.7
Python 3 [2.7升级3请看http://www.cnblogs.com/manhua/p/4235049.html]
Django 1.7.3
1. 安装apache
sudo apt-get install apache2
如果之前安装配置过apache2的并且配置很乱,无法修复,建议还是完全卸载之后在安装。完全卸载的命令:
sudo apt-get --purge remove apache-common
sudo apt-get --purge remove apache*
apache2相关的操作:
启动:sudo service apache2 start
停止:sudo service apache2 stop
重启:sudo service apache2 restart
配置文件的位置:
可执行程序:/usr/sbin/apache2
配置文件:/etc/apache2
网站文件:/var/www
(网站的默认位置可以在/etc/apache2/sites-available/default中更改,修改DocumentRoot /var/www改成自己的网站存放地址即可)
2. 安装mod_wsgi.so
2.x python:
sudo apt-get install libapache2-mod-wsgi
3.x python:
sudo apt-get install libapache2-mod-wsgi-py3
#若数据库为mysql,需要连接器
sudo apt-get install mysql-server mysql-client
sudo apt-get install python-mysqldb
3. 安装Django
sudo pip3 install django
4. 创建/上传Django工程
不建议建在/var/www,如果系统设置问题导致不识别.py为网页文件时,/var/www作为Apache默认Web文件夹,.py源文件将可以被下载而泄漏。
mkdir -p /www2
cd /www2
django-admin startproject mysite
完成代码后在随便哪里建wsgi,比如
sudo nano /www2/mysite/apache/django.wsgi
import os
import sys
path = '/www2/mysite'
if path not in sys.path:
sys.path.insert(0, '/www2/mysite')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
【warning】 上面的代码会引起错误
Django:The translation infrastructure cannot be initialized before the apps registry is ready
修改为如下
import os import sys path = '/www2/mysite' if path not in sys.path: sys.path.insert(0, '/www2/mysite') os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
5. apache站点设置文件
apache2.4.7 (Ubuntu 14) [Apache2 Ubuntu Default Page]
cd /etc/apache2/sites-available
sudo nano mysite.conf
<VirtualHost *:8000> #ServerName hello.djangoserver DocumentRoot /www2 <Directory /www2> #DirectoryIndex testMain.html # Options Indexes FollowSymLinks Require all granted </Directory> WSGIDaemonProcess mydjangosite processes=2 threads=15 display-name=%{GROUP} WSGIProcessGroup mydjangosite WSGIScriptAlias / /www2/mysite/apache/django.wsgi </VirtualHost>
【IGNORE】apache 2.2 (Ubuntu 12) [It works!]
apache2.2主要配置为/etc/apache2/apache2.conf,端口配置在ports.conf,网站根目录在/etc/apache2/sites-available/default,额外的配置可以写在httpd.conf中(默认为空,会被主配置用Include httpd.conf语句引入)
# Include module configuration: Include mods-enabled/*.load Include mods-enabled/*.conf # Include all the user configurations: Include httpd.conf # Include ports listing Include ports.conf
修改httpd.comf,添加如下内容
WSGIScriptAlias / /www2/mysite/apache/django.wsgi WSGIPythonPath /www2/mysite <Directory /www2/mysite> <Files django.wsgi> Order deny,allow Allow from all </Files> </Directory>
https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/modwsgi/
6. 启动站点
别离开/etc/apache2/sites-available
sudo a2ensite mysite
sudo service apache2 reload
Django站点已经配置好了,但是这时访问127.0.0.1看到的是apache页面。
关于端口
在/etc/apache2/sites-available可以看到000-default.conf,这个就是apache默认的站点,对应/var/www/html
如果都用80端口的话,访问到的是apache,而不是刚建的django。
可以关闭这个站点,
sudo a2dissite 000-default
sudo service apache2 reload
这时就能正常访问刚建的django站点了。
也可以换个端口,在mysite.conf文件中,<VirtualHost *:80>改成<VirtualHost *:xxxx>自己要的端口,比如8000。
然后改ports.conf
cd /etc/apache2
sudo nano ports.conf
看到Listen 80了吧,下面加一行 Listen 8000,就能用8000端口了。
sudo service apache2 reload
这样127.0.0.1访问的是apache站点,127.0.0.1:8000访问的就是我们的django站点了
PS.出错的话,一定要多看看apache2的err log。
命令行输入: tail /var/log/apache2/error.log
7. 关于使用django的admin时SQLite出现的问题
服务器不仅需要对数据库文件可写,而且要对包含该数据库文件的文件夹可写
1.数据库所在文件夹chmod 777
2.数据库文件 chmod 777
django sqlite3 OperationalError: attempt to write a readonly database
Django-想说爱你真不容易--解决“Unable to open database file”(原创)
Reference:
http://www.cnblogs.com/CSGrandeur/p/3741871.html