nainai1 发表于 2018-11-15 07:43:46

Python 2.6+Django 1.2.1 + Nginx

  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
  


[*]# python26
[*]Python 2.6.5 (r265:79063, Jul 20 2010, 10:39:03)
[*] 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
  


[*]# python26
[*]Python 2.6.5 (r265:79063, Jul 20 2010, 10:39:03)
[*] 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
  


[*]# python26
[*]Python 2.6.5 (r265:79063, Jul 20 2010, 10:39:03)
[*] on linux2
[*]Type "help", "copyright", "credits" or "license" for more information.
[*]>>> import MySQLdb
[*]>>>
  

  测试出现ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory时,需将mysql/lib/目录下文件,链接到/usr/lib目录下
  


[*]ln -s /usr/local/mysql/lib/libmysqlclient* /usr/lib
[*]ldconfig
  

  —————————————————————-
  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
  


[*]# python26
[*]Python 2.6.5 (r265:79063, Jul 20 2010, 10:39:03)
[*] 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
  


[*]# python26
[*]Python 2.6.5 (r265:79063, Jul 20 2010, 10:39:03)
[*] 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_name192.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;
[*]            #allowall;
[*]            #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_page404   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_paramPATH_INFO          $fastcgi_script_name;
[*]fastcgi_paramREQUEST_METHOD   $request_method;
[*]fastcgi_paramQUERY_STRING       $query_string;
[*]fastcgi_paramCONTENT_TYPE       $content_type;
[*]fastcgi_paramCONTENT_LENGTH   $content_length;
[*]fastcgi_paramSERVER_PROTOCOL    $server_protocol;
[*]# fastcgi_paramSCRIPT_NAME      $fastcgi_script_name;
[*]# fastcgi_paramREQUEST_URI      $request_uri;
[*]# fastcgi_paramDOCUMENT_URI       $document_uri;
[*]# fastcgi_paramDOCUMENT_ROOT      $document_root;
[*]fastcgi_paramGATEWAY_INTERFACECGI/1.1;
[*]fastcgi_paramSERVER_SOFTWARE    nginx/$nginx_version;
[*]fastcgi_paramREMOTE_ADDR      $remote_addr;
[*]fastcgi_paramREMOTE_PORT      $remote_port;
[*]fastcgi_paramSERVER_ADDR      $server_addr;
[*]fastcgi_paramSERVER_PORT      $server_port;
[*]fastcgi_paramSERVER_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
  



页: [1]
查看完整版本: Python 2.6+Django 1.2.1 + Nginx