linux+nginx+python+fastcgi 安装配置及 django+web.py 部署

linux下nginx+python+fastcgi部署总结(django版)

注意:虽然本文成功的搭建了django运行fastcgi的实例,但是在实际运行中发现了很多问题,比如程序执行异常,进程在每次请求之后退出之类的。可能是我机器的问题,也可能是程序本身bug,大家如果用来搭建外网环境,请务必多多测试。

一.编译nginx

在网上买了一本《实战nginx-取代Apache的高性能服务器》,写的比较浅,主要是些配置方面的东西,不过却正是目前我所需要的。由于需要支持https和rewrite,所以除了nginx的源码之外,又下载了 openssl-0.9.8r.tar.gz 和 pcre-8.12.tar.gz,把他们和nginx-1.0.4.tar.gz放到同一个目录。
为了方便编译,笔者写了一个脚本,代码如下:

#!/bin/bash
 
#=============================================================================
#脚本所在绝对目录
abs_path(){
    local path=$1
    local basename=$( basename $path )
    local dirname=$(  dirname  $path )
    cd $dirname
    if [ -h $basename ]; then
        path=$( readlink $basename )
        abs_path $path
    else
        pwd
    fi
}
 
#=============================================================================
#依赖的目录
src_base_dir=$( abs_path $0 )
src_openssl_dir=$src_base_dir'/openssl-0.9.8r'
src_pcre_dir=$src_base_dir'/pcre-8.12'
src_nginx_dir=$src_base_dir'/nginx-1.0.4'
 
#=============================================================================
#目标的目录
dest_base_dir=$src_base_dir'/release'
dest_nginx_dir=$dest_base_dir'/nginx'
 
#=============================================================================
#把所有的tar.gz解压
find . -name "*.tar.gz" | xargs -IX tar zxvf X
 
#=============================================================================
#编译nginx
cd $src_nginx_dir
chmod u+x ./configure
./configure --with-http_stub_status_module --with-http_ssl_module --with-openssl=$src_openssl_dir --with-pcre=$src_pcre_dir --prefix=$dest_nginx_dir
make && make install

编译完成后,我们就需要来配置nginx了

二.配置nginx

在server配置项下增加

location / {
    #fastcgi_pass 127.0.0.1:9001;
    fastcgi_pass   unix:django.sock;
 
    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_pass_header Authorization;
    fastcgi_intercept_errors off;
    fastcgi_param SERVER_PROTOCOL $server_protocol;
    fastcgi_param SERVER_PORT $server_port;
    fastcgi_param SERVER_NAME $server_name;
}
 
location /admin_media/ {
    alias /usr/local/lib/python2.7/site-packages/django/contrib/admin/media/;
    break;
}
 
location /site_media/ {
    alias /home/dantezhu/htdocs/ngx_django/media/;
    break;
}

这里的3个location配置分别解决了,与python进程通信、django后台管理端样式存放、网站样式存放的问题。对照着apache的配置来看,就很容易明白了

WSGIPythonEggs /tmp
<VirtualHost *>
    ServerName fuload.qq.com
    WSGIScriptAlias / /home/dantezhu/htdocs/fuload/conf/setting.wsgi
    <Directory />
        Options FollowSymLinks
        AllowOverride
        Order allow,deny
        Allow from all
    </Directory>
    <Directory "/home/dantezhu/htdocs/fuload/mysite">
        Order Deny,Allow
        Deny from all
    </Directory>
    Alias /admin_media "/usr/local/lib/python2.7/site-packages/django/contrib/admin/media"
    <Directory "/usr/local/lib/python2.7/site-packages/django/contrib/admin/media">
        Order allow,deny
        Options Indexes
        Allow from all
        IndexOptions FancyIndexing
    </Directory>
 
    #AliasMatch /site_media/(.*.(css|gif|png|jpg|jpeg)) /home/dantezhu/htdocs/fuload/media/$1
    Alias /site_media /home/dantezhu/htdocs/fuload/media/
    <Directory "/home/dantezhu/htdocs/fuload/media/">
        Order allow,deny
        Options Indexes
        Allow from all
        IndexOptions FancyIndexing
    </Directory>
</VirtualHost>

三.安装fastcgi依赖

需要到 http://trac.saddi.com/flup下载安装,之后fastcgi才能够正常启动。

四.启动django

创建django project的过程我们就不说了,只列出启动/停止的命令:

启动:

#python manage.py runfcgi daemonize=true pidfile=`pwd`/django.pid host=127.0.0.1 port=9001 maxrequests=1 &
python manage.py runfcgi daemonize=true pidfile=`pwd`/django.pid socket=/home/dantezhu/nginx/sbin/django.sock maxrequests=1 &

停止:

kill -9 `cat django.pid`

五.启动nginx

启动:

./nginx -p /home/dantezhu/nginx/

停止:

kill -QUIT `cat ../logs/nginx.pid`

重新载入配置:

./nginx -t -c `pwd`/../conf/nginx.conf kill -HUP `cat ../logs/nginx.pid`

./nginx -t -c `pwd`/../conf/nginx.conf
kill -HUP `cat ../logs/nginx.pid`

成功显示了django的后台界面:

linux下nginx+python+fastcgi部署总结(web.py版)

其实web.py上的官方网站已经说的比较清楚了,原文如下: http://webpy.org/cookbook/fastcgi-nginx

这里主要讲一下一些原文没有照顾到的地方。

一.安装依赖

spawn-cgi
flup

二.配置nginx

在server配置项下增加

location / {
    #这两种方法都可以,只不过spawn-cgi启动的方法不同
    #fastcgi_pass 127.0.0.1:9002;
    fastcgi_pass unix:webpy.sock;
 
    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 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;
    fastcgi_param SERVER_PROTOCOL $server_protocol;
    fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
}

三.一个简单的index.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import web
 
urls = ("/.*", "hello")
app = web.application(urls, globals())
 
class hello:
    def GET(self):
        return 'Hello, world!'
 
if __name__ == "__main__":
    web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)
    app.run()

并执行:

chmod +x index.py

四.启动web.py

启动:

#spawn-fcgi -P `pwd`/webpy.pid -f /home/dantezhu/htdocs/ngx_web/index.py -a 127.0.0.1 -p 9002 &
spawn-fcgi -P `pwd`/webpy.pid -f /home/dantezhu/htdocs/ngx_web/index.py -s /home/dantezhu/nginx/sbin/webpy.sock &

停止:

kill -9 `cat webpy.pid`

五.启动nginx

与上一篇文章一样,这里不再赘述。

六.加入到rc.local中,自动启动

/home/dantezhu/nginx/sbin/start.sh
sudo -u dantezhu /home/dantezhu/htdocs/ngx_django/mysite/start.sh
sudo -u dantezhu /home/dantezhu/htdocs/ngx_web/start.sh

OK,就是这样啦~

时间: 2024-09-20 05:45:11

linux+nginx+python+fastcgi 安装配置及 django+web.py 部署的相关文章

linux+nginx+python+uwsgi 安装配置及 django+web.py 部署

之前的文章已经提到了 django+fastcgi的运行并不如意(web.py+spawn-fcgi却正常很多--),所以特意抽时间研究了一下uwsgi,试了一下,运行的很好,也很快,哈哈. 所以笔者的所有之前用apache+django搭建的项目(如fuload等)都已经替换成了nginx+django+uwsgi. 一.安装uwsgi     到http://projects.unbit.it/uwsgi/wiki/WikiStart#Getit 下载最新版本的uwsg.     解压后,如

Nginx + PHP(FastCGI)安装配置笔记

这是站长在2011年时一次安装服务器时所记录的Nginx和PHP的安装笔记.安装过程记录的比较简略,仅仅是一个大致的流程,一些细节描述的不够详细,请多多谅解,我会在日后重新整理一份详细的安装过程,本文仅供参考! 软件环境:CentOS 5.7 + PHP 5.2.17 + Nginx 0.8.55   1. 编译安装 PHP 和 PHP-FPM 提示: 安装PHP前应先安装MySQL,具体方法请自行baidu或google: PHP所需支持库的安装这里不做过多介绍,可上网搜索参照相关教程进行安装

linux下Python环境安装配置步骤

安装python2.7 wget https://www.Python.org/ftp/Python/2.7.8/Python-2.7.8.tgz tar xvf Python-2.7.8.tgz cd Python-2.7.8 ./configure –prefix=/usr/local/python27 make make install mv /usr/bin/python /usr/bin/python_old ln -s /usr/local/python27/bin/python /

Linux下NDK的安装配置

Linux下NDK的安装配置     在编写android程序的时候如果需要复用一部分以前的c语言程序,可以考虑使用NDK.由于设计到c和c++编程,故强烈建议在Linux下安装上eclipse的CDT插件.安装方法同安装其他插件的方式一样,推荐离线安装,方法这里不再赘述.     在使用NDK之前需要下载android-ndk包,下载解压后将解压后的文件夹拷贝到自定义的目录下面(如"/root/"目录下),如图一所示.   图一  拷贝解压后的ndk文件夹到自定义目录下      

Linux下Kafka单机安装配置方法(图文)_Linux

介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: •Kafka将消息以topic为单位进行归纳. •将向Kafka topic发布消息的程序成为producers. •将预订topics并消费消息的程序成为consumer. •Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker. producers通过网络将消息发送到Kafka集群,集群

Linux下Tomcat+Nginx服务器环境安装配置的简明教程_nginx

一.安装 1.安装JDK下载的jdk文件为:jdk-6u45-linux-x64.bin,执行如下命令进行安装: #./jdk-6u12-linux-i586.bin 2.安装tomcat: #tar zxvf apache-tomcat-6.0.18.tar.gz #mv apache-tomcat-6.0.29 tomcat 这里我将解压后的apache-tomcat-6.0.29重命名为了tomcat方便操作. 3.配置环境变量:编辑/etc下的profile文件,加上如下内容: JAVA

linux 6下编译安装配置LAMP平台

LAMP(Linux- Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl.PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和Java/J2EE架构相比,LAMP具有Web资源丰富.轻量.快速开发等特点,微软的.NET架构相比,LAMP具有通用.跨平台.高性能.低价格的优势,因此LAMP无论是性能.质量还是价格都是企业搭建网站

nginx下php-fpm安装配置步骤详解

从PHP 5.4 RC2开始,php-fpm已经转正了,不再被php团队标注为EXPERIMENTAL(实验性的东西)[2-3]   . 相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼. PHP5.3.3已经集成php-fpm了,不再是第三方的包了.PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程.可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PH

Linux系统中PHP安装配置MongoDB数据库连接扩展步骤

说明: 操作系统:CentOS 5.X 64位 MongoDB数据库服务器: IP地址:192.168.21.130 Web服务器: IP地址:192.168.21.127 PHP安装路径:/usr/local/php 实现目的: 安装PHP的MongoDB数据库扩展,通过PHP程序连接MongoDB数据库 具体操作: 一.安装PHP的MongoDB数据库扩展(在Web服务器192.168.21.127上操作) 下载地址:http://pecl.php.net/get/mongo-1.5.1.t