Python 2.6.5 + Django 1.2.1 + Nginx Installation && Configuration
fastcgi+django,fastcgi+php
一、install
## 万恶的XXX,封掉了python下的所有目录,首页上的download链接是打不开的,不过可以到其他的链接下载 ##
## 1、http://ftp.python.org/ftp/python/2.6.5/
## 2、http://www.python.org/ftp/python/
1. Python 2.6.5
1) install
wget http://ftp.python.org/ftp/python/2.6.5/Python-2.6.5.tgz
tar zxvf Python-2.6.5.tgz
cd Python-2.6.5
./configure --prefix=/opt/python26
make
make install
ln -s /opt/python26/bin/python2.6 /usr/bin/python26
## add the /opt/python26/bin to the PATH
vi /etc/profile
###########################
PATH=”$PATH:/opt/mysql/bin:/opt/python/bin:/opt/nginx/sbin:/opt/python26/bin”;export PATH
###########################
2)test
[root@devel photo_uw]# python26
Python 2.6.5 (r265:79063, Jul 20 2010, 10:39:03)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
—————————————————————-
2. PIL
1) install
wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz
tar zxvf Imaging-1.1.7.tar.tar
cd Imaging-1.1.7
python26 setup.py build_ext -i
python26 setup.py install
cd ..
2) test
[root@devel photo_uw]# python26
Python 2.6.5 (r265:79063, Jul 20 2010, 10:39:03)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import Image
>>>
—————————————————————-
3. setuptools
wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
tar zxvf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
python26 setup.py install
cd ..
—————————————————————-
4. flup
wget http://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz
tar zxvf flup-1.0.2.tar.gz
cd flup-1.0.2
python26 setup.py install
cd ..
—————————————————————-
5. MySQL-python
1) install
wget http://nchc.dl.sourceforge.net/project/mysql-python/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz
tar zxvf MySQL-python-1.2.3c1.tar.gz
cd MySQL-python-1.2.3c1
python26 setup.py build
python26 setup.py install
cd ..
2) test
[root@devel photo_uw]# python26
Python 2.6.5 (r265:79063, Jul 20 2010, 10:39:03)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>>
—————————————————————-
6 Django 1.2.1
1) install
wget http://media.djangoproject.com/releases/1.2/Django-1.2.1.tar.gz
tar zxvf Django-1.2.1.tar.gz
cp -R Django-1.2.1 /opt/python26
cd /opt/python26/lib/python2.6/site-packages/
ln -s /opt/python26/Django-1.2.1/django django
or
cd Django-1.2.1
python26 setup.py install
2) test
[root@devel photo_uw]# python26
Python 2.6.5 (r265:79063, Jul 20 2010, 10:39:03)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.get_version()
'1.2.1'
7. django-treebeard
1) install
wget http://pypi.python.org/packages/source/d/django-treebeard/django-treebeard-1.61.tar.gz
tar zxvf django-treebeard-1.61.tar.gz
cd django-treebeard-1.61
python26 setup.py install
2) test
[root@devel photo_uw]# python26
Python 2.6.5 (r265:79063, Jul 20 2010, 10:39:03)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import treebeard
>>>
二. configure
1) nginx
cd /opt/nginx/conf/vhosts
vi vhost-www_tech.conf
--------------------------------------------------------------------
upstream backend_www_tech {
#server unix:/var/run/fcgi/www/www_tech.sock;
server unix:/var/run/fcgi/www_tech.sock;
}
server {
listen 192.168.0.250;
server_name 192.168.0.250;
#charset gb2312;
access_log /var/log/nginx/www_tech/www_tech_access_log combined;
error_log /var/log/nginx/www_tech/www_tech_error_log notice;
location / {
root /infoware/www_tech/web;
#allow all;
#fastcgi_pass backend_dorm;
fastcgi_pass backend_www_tech;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_pass_header Authorization;
include fastcgi_params_django;
}
location /static {
root /infoware/www_tech/web;
}
error_page 404 http://192.168.0.250/static/error404.htm;
}
--------------------------------------------------------------------
####################################################################
## 这里不能使用nginx默认的fastcgi_params,测试的时候发现所有的页面都会跳转到首页,而且也不报错
## 貌似是SCRIPT_NAME所引起的问题,而Django好像使用的是PATH_INFO,为了避免和其他的fcgi冲突,所以新建一个django专用的fastcgi_params_django
## Python2.4 + Django 0.96 版本不需要,因为Django 0.96 还不支持SCRIPT_NAME
## 可以查看django的django\core\handlers目录下的modpython.py 文件
vi /opt/nginx/conf/fastcgi_params_django
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SERVER_PROTOCOL $server_protocol;
# fastcgi_param SCRIPT_NAME $fastcgi_script_name;
# fastcgi_param REQUEST_URI $request_uri;
# fastcgi_param DOCUMENT_URI $document_uri;
# fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
2) fcgi
cd /infoware/_conf/www_tech/
vi start_www_tech.sh
------------------------------------------------------------------
#!/bin/bash
## start_www_tech.sh: start www_tech app in django fcgi mode
## ljzhou, 2010.08.26
## TODO
# - executed under deamontools(in method=thread mode), to get
# (1) controled env (2) 'web' uid (3) monitored process
# - dormctl.sh script(nginx+django?), just as apachectl
APP_DIR="/infoware/www_tech/web"
CFG_DIR="/infoware/_conf/www_tech"
PYTHON="/usr/bin/python26"
DJANGO_ADMIN="/opt/python26/lib/python2.6/site-packages/django/bin/django-admin.py"
#PYTHON="/opt/python/bin/python2"
#DJANGO_ADMIN="/usr/lib/python2.4/site-packages/django/bin/django-admin.py"
############### no config below this line ##################
export PYTHONPATH="$PYTHONPATH:$CFG_DIR"
# mysettings.py in $CFG_DIR
#export DJANGO_SETTINGS_MODULE=mysettings
export DJANGO_SETTINGS_MODULE=settings
umask 027
## server: self daemonized, total num=20 with 10 threads each
## Help message: help
## TCP socket : host=... port=...
PIDFILE="/var/run/fcgi/www_tech.pid"
if [ -f $PIDFILE ]; then
kill `cat -- $PIDFILE`
rm -f -- $PIDFILE
sleep 3
fi
$PYTHON $DJANGO_ADMIN \
runfcgi daemonize=true method=prefork \
maxspare=5 minspare=2 maxchildren=10 maxrequests=500 \
socket="/var/run/fcgi/www_tech.sock" pidfile=$PIDFILE \
umask=000 debug=true \
--pythonpath=$APP_DIR
# EOF: start_www_tech.sh
------------------------------------------------------------------
stop script like this , only Remark those:
#$PYTHON $DJANGO_ADMIN \
# runfcgi daemonize=true method=prefork \
# maxspare=5 minspare=2 maxchildren=10 maxrequests=500 \
# socket=&"/var/run/fcgi/www_tech.sock" pidfile=$PIDFILE \
# umask=000 debug=true \
# --pythonpath=$APP_DIR