天天看點

ubuntu配置Django

環境:

Ubuntu 12.04

Python 2.7.3

Django 1.6

安裝所需軟體:

Apache2

Python

Pip

VirtualEnv

mod_WSGI(Apache子產品)

MySQL

1.更新系統

apt-get update

apt-get upgrade

2.修改主機名

echo "pythonlife" > /etc/hostname

hostname -F /etc/hostname

echo -e "\n127.0.0.1 pythonlife.local pythonlife\n" >> /etc/hosts

3.基礎軟體安裝

apt-get -y install apache2-mpm-worker apache2-dev

apt-get -y install python python-dev python-setuptools

easy_install pip

easy_install virtualenv

easy_install virtualenvwrapper

4.安裝并啟用mod_WSGI

wget http://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz

tar xvfz mod_wsgi-3.4.tar.gz

cd mod_wsgi-3.4

./configure

make

make install

echo "LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so" > /etc/apache2/mods-available/wsgi.load

a2enmod wsgi

a2dissite default

5.安裝并配置MySQL資料庫

注意:把指令裡的DATABSENAME換成Django項目采用的資料庫名,DATABASEUSER與PASSWORD是你需要建立的資料庫使用者的使用者名與密碼。

apt-get -y install mysql-server mysql-client

echo "CREATE DATABASE DATABASENAME;" | mysql -u root -p

echo "CREATE USER 'DATABASEUSER'@'localhost' IDENTIFIED BY 'PASSWORD';" | mysql -u root -p

echo "GRANT ALL PRIVILEGES ON DATABASENAME.* TO 'DATABASEUSER'@'localhost';" | mysql -u root -p

echo "FLUSH PRIVILEGES;" | mysql -u root -p

6.安裝Python與Django

通過VirtualEnv搭建一個虛拟Python環境,然後在這個虛拟環境中用pip安裝Django

cd /srv/

mkdir -p my_project/app my_project/app/conf/apache

mkdir -p my_project/logs my_project/run/eggs

virtualenv my_project/venv

/srv/my_project/venv/bin/pip install django

7.建立Django項目

pushd my_project/app/

/srv/my_project/venv/bin/python /srv/my_project/venv/bin/django-admin.py startproject webapp

popd

8.配置mod_WSGI

mkdir -p my_project/app/webapp/site_media

mkdir -p my_project/app/templates

cd my_project/app/conf/apache/

修改配置檔案

sudo vim django.wsgi

把下面的代碼粘貼進編輯器。(在Vim粘貼前最好:set paste)

import os

import sys

root_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..'))

sys.path.insert(0, os.path.abspath(os.path.join(root_path, 'venv/lib/python2.7/site-packages/')))

sys.path.insert(0, os.path.abspath(os.path.join(root_path, 'app')))

sys.path.insert(0, os.path.abspath(os.path.join(root_path, 'app', 'webapp')))

os.environ['DJANGO_SETTINGS_MODULE'] = 'webapp.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

9.建立新使用者

建立一個新使用者來運作Apache的mod_WSGI程序。記得修改指令中的USERNAME

useradd --system --no-create-home --home-dir /srv/my_project/ --user-group USERNAME

chsh -s /bin/bash USERNAME

10.配置apche站點

記得替換dinever.com為你自己的域名

sudo vim /etc/apache2/sites-available/dinever.com

黏貼下面的代碼,記得修改其中的DOMAIN、USER、靜态檔案目錄與、媒體檔案目錄

<VirtualHost *:80>

ServerAdmin root@DOMAIN

ServerName DOMAIN

Alias /site_media/ /srv/my_project/app/webapp/site_media/

Alias / /srv/my_project/venv/lib/python2.7/site-packages/django/contrib/admin/

Alias /robots.txt /srv/my_project/app/webapp/site_media/robots.txt

Alias /favicon.ico /srv/my_project/app/webapp/site_media/favicon.ico

CustomLog "|/usr/sbin/rotatelogs /srv/my_project/logs/access.log.%Y%m%d-%H%M%S 5M" combined

ErrorLog "|/usr/sbin/rotatelogs /srv/my_project/logs/error.log.%Y%m%d-%H%M%S 5M"

LogLevel warn

WSGIDaemonProcess DOMAIN user=USER group=USER processes=1 threads=15 maximum-requests=10000 python-path=/srv/my_project/venv/lib/python2.7/site-packages python-eggs=/srv/my_project/run/eggs

WSGIProcessGroup DOMAIN

WSGIScriptAlias / /srv/my_project/app/conf/apache/django.wsgi

<Directory /srv/my_project/app/webapp/site_media>

Order deny,allow

Allow from all

Options -Indexes FollowSymLinks

</Directory>

<Directory /srv/my_project/app/conf/apache>

</VirtualHost>

然後啟用這個新的站點配置檔案

2ensite DOMAIN

11.安裝Python的MySQLdb子產品

若想讓Django操作MySQL資料庫,Python下的MySQLdb子產品是必裝的

apt-get build-dep python-mysqldb

/srv/my_project/venv/bin/pip install MySQL-python

12.配置Django項目

cd ../../

cd webapp/webapp/

vim settings.py

添加

MEDIA_ROOT=/srv/my_project/app/webapp/site_media

TEMPLATE_DIRS=/srv/my_project/app/templates

13.修改權限然後重新開機Apache

chown -R USERNAME:USERNAME /srv/my_project/

service apache2 restart

安裝完後可能會報錯

warning: NameVirtualHost *:80 has no VirtualHosts

這是由于VirtualHost *:80或NameVirtualHost *:80在apache的.conf定義了兩次,注釋掉一次就可以了