環境:
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定義了兩次,注釋掉一次就可以了