unbuntu下apache中的django部署

初学django,部署过程中遇到的坑,自己整理了一下。

1 . 安装 apache2 和 mod_wsgi

sudo apt-get install apache2
# Python 2
sudo apt-get install libapache2-mod-wsgi
# Python 3
sudo apt-get install libapache2-mod-wsgi-py3

2 . 准备一个新网站

sudo gedit /etc/apache2/sites-available/sitename.conf
<VirtualHost *:80>
    ServerName www.yourdomain.com
    ServerAlias otherdomain.com
    ServerAdmin [email protected]

    Alias /media/ /home/tu/blog/media/
    Alias /static/ /home/tu/blog/static/

    <Directory /home/tu/blog/media>
        Require all granted
    </Directory>

    <Directory /home/tu/blog/static>
        Require all granted
    </Directory>

    WSGIScriptAlias / /home/tu/blog/blog/wsgi.py
    # WSGIDaemonProcess ziqiangxuetang.com python-path=/home/tu/blog:/home/tu/.virtualenvs/blog/lib/python2.7/site-packages
    # WSGIProcessGroup ziqiangxuetang.com

    <Directory /home/tu/blog/blog>
    <Files wsgi.py>
        Require all granted
    </Files>
    </Directory>
</VirtualHost>

网上好多地方说,如果你的apache版本号是 2.2.x
用下面的代替 Require all granted

Order deny,allow
Allow from all

千万注意,我被坑了老大一会,实在不行可以都试一下,反正我最后用的Require all granted

3 . 修改wsgi.py文件

注意:上面如果写了 WSGIDaemonProcess 的话,这一步可以跳过,即可以不修改 wsgi.py 文件。

上面的配置中写的 WSGIScriptAlias / /home/tu/blog/blog/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

os.environ["DJANGO_SETTINGS_MODULE"] = "blog.settings" # 7

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

4 . 设置目录和文件权限
一般目录权限设置为 755,文件权限设置为 644

假如项目位置在 /home/tu/zqxt (在zqxt 下面有一个 manage.py,zqxt 是项目名称)

cd /home/tu/
sudo chmod -R 644 zqxt
sudo find zqxt -type d -exec chmod 755 \{\} \;

apache 服务器运行用户可以在 /etc/apache2/envvars 文件里面改,这里使用的是默认值,当然也可以更改成自己的当前用户,这样的话权限问题就简单很多。以下是默认设置:

# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

如果你使用的是sqlite3数据库,还会提示 Attempt to write a readonly database,同样要给www-data写数据库的权限

进入项目目录的上一级,比如project目录为 /home/tu/blog 那就进入 /home/tu 执行下面的命令(和修改上传文件夹类似)

sudo chgrp www-data blog
sudo chmod g+w blog
sudo chgrp www-data blog/db.sqlite3  # 更改为你的数据库名称
sudo chmod g+w blog/db.sqlite3

5 . 激活新网站

sudo a2ensite sitename 或 sudo a2ensite sitename.conf

其实这个时候访问的话,还是apache的欢迎页,网上好多教程讲到这个地方就完了,坑啊

6 . 修改端口

在/etc/apache2/port.conf中添加listen 8000
在/etc/apache2/sites-available/sitename.cong中修改端口为8000

7 . 访问权限
在/etc/apache2/sites-available/apache2.conf中添加

<Directory /home/user/websites>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

这里选择Require all granted还是写
Order deny,allow
Allow from all同上,自己试一下
如果出现如下错误
‘WSGIScriptAlias’, perhaps misspelled or defined by a module not included in the server configuration
建议检查一下sudo a2enmod wsgi是否可用,不可用的话卸载重装一下

如上基本就是部署的流程,新手会遇到一些坑。

猜你喜欢

转载自blog.csdn.net/wuzhiguo1314/article/details/51319197