sudo apt-get install apache2
# Python 2
sudo apt-get install libapache2-mod-wsgi
# Python 3
sudo apt-get install libapache2-mod-wsgi-py3
apachectl -v
Server version: Apache/2.4.6 (ubuntu)
Server built: Dec 5 2013 18:32:22
ubuntu的apache2配置文件在 /etc/apache2/ 下
备注:centos 用户 apache 名称为 httpd 在 /etc/httpd/ 中(可以参考文章下面置顶的评论)
新建一个网站配置文件
sudo vi /etc/apache2/sites-available/mysite.conf
示例内容如下:
ServerName www.yourdomain.com # 域名或者ip地址
#ServerAlias otherdomain.com
#ServerAdmin [email protected]
DocumentRoot /var/www/mysite # 项目路径
'''
#存放用户上传图片等文件的位置
Alias /media/ /var/www/mysite/media/
#允许通过网络获取media的内容
Require all granted
#静态文件(js/css/images)的存放位置
Alias /static/ /var/www/mysite/static/
#允许通过网络获取static的内容
Require all granted
'''
#最重要的!通过wsgi.py让Apache识别这是一个Django工程,别漏掉前边的 /
WSGIScriptAlias / /var/www/mysite/mysite/wsgi.py
#wsgi.py文件的父级目录
Require all granted
如果你的apache版本号是 2.2.x(第二步有方法判断)
用下面的代替 Require all granted
Order deny,allow
Allow from all
编辑 /etc/apache2/ports.conf 添加一行
Listen 81 #监听81端口,就是我们新建的虚拟主机
编辑 /etc/apache2/mods-enabled/wsgi.load
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-3.4 #python3
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so #python2
编辑 /etc/apache2/mods-enabled/wsgi.conf 添加一行
WSGIPythonPath /var/www/mysite #项目所在路径
上面的配置中写的 WSGIScriptAlias / /var/www/mysite/mysite/wsgi.py
就是把apache2和你的网站project联系起来了
import os
from os.path import join,dirname,abspath
PROJECT_DIR = dirname(dirname(abspath(__file__)))#3
import sys # 4
sys.path.insert(0,PROJECT_DIR) # 5
sys.path.append('/var/www/mysite')
os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings" # 7
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
一般目录权限设置为 755,文件权限设置为 644
假如项目位置在 /var/www/mysite (在mysite 下面有一个 manage.py,mysite 是项目名称)
cd /var/www/
sudo chmod -R 644 mysite
sudo find zqxt -type d | xargs chmod 755
apache 服务器运行用户可以在 /etc/apache2/envvars 文件里面改,这里使用的是默认值,当然也可以更改成自己的当前用户,这样的话权限问题就简单很多,但在服务器上推荐有 www-data 用户,更安全。以下是默认设置:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
如果你使用的是sqlite3数据库,还会提示 Attempt to write a readonly database,同样要给www-data写数据库的权限,
进入项目目录的上一级,比如project目录为 /var/www/mysite 那就进入 /var/www 执行下面的命令
sudo chgrp www-data mysite
sudo chmod g+w mysite
sudo chgrp www-data mysite/db.sqlite3 # 更改为你的数据库名称
sudo chmod g+w mysite/db.sqlite3
备注:上面的不要加 -R ,-R是更改包括所有的子文件夹和文件,这样不安全。个人建议可以专门弄一个文件夹,用它来放sqlite3数据库,给该文件夹www-data写权限,而不是整个项目给写权限,有些文件只要读的权限就够了,给写权限会造成不安全。
#激活mysite站点
sudo a2ensite mysite 或 sudo a2ensite mysite.conf
sudo service apache2 reload
关闭站点
a2dissite mysite