Django 快速实战入门(八):部署 Django

作者:Hily 原始链接:http://hily.me/blog/2008/11/learning-django-ch8/
版权声明:可以转载,转载时务必以超链接形式标明文章原始出处作者信息版权声明

本节中,我们要彻底脱离测试服务器,以 gentoo+nginx+flup 为例,把我们的留言板部署到正式的服务器中。

在我们的 Web 服务器架构中,nginx 作为前端的 HTTP 服务器,而 flup 在后端以 fastcgi 的方式运行。在 nginx 中设置所有对动态内容的请求都交由后端的 flup 来处理。

安装配置 nginx

如果使用 gentoo 的 emerge 安装,则直接执行以下命令即可安装 nginx:

USE=fastcgi emerge nginx

如果要进行编译方式安装,在运行 ./configure 时请启动 fastcgi,可以参考以下选项:

gentoo ~ # /usr/sbin/nginx -V
nginx version: nginx/0.7.19
configure arguments: --prefix=/usr --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access_log --error-log-path=/var/log/nginx/error_log --pid-path=/var/run/nginx.pid --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --with-md5-asm --with-md5=/usr/include --with-sha1-asm --with-sha1=/usr/include --with-http_realip_module --with-http_ssl_module --with-http_perl_module

配置 /etc/nginx/nginx.conf:

user nginx nginx;
worker_processes 1;

error_log /var/log/nginx/error_log info;

events {
        worker_connections  8192;
        use epoll;
}

http {
        include         /etc/nginx/mime.types;
        default_type    application/octet-stream;
        charset         utf-8;

        log_format main
                '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $bytes_sent '
                '"$http_referer" "$http_user_agent" '
                '"$http_x_forwarded_for" "$gzip_ratio"';

        client_header_timeout   10m;
        client_body_timeout     10m;
        send_timeout            10m;

        connection_pool_size            256;
        client_header_buffer_size       1k;
        large_client_header_buffers     4 2k;
        request_pool_size               4k;

        gzip on;
        gzip_min_length 1100;
        gzip_buffers    4 8k;
        gzip_types      text/plain;

        output_buffers  1 32k;
        postpone_output 1460;

        sendfile        on;
        tcp_nopush      on;
        tcp_nodelay     on;

        keepalive_timeout       75 20;

        ignore_invalid_headers  on;

        index index.html;

        include sites/*.enable;
}

新建 /etc/nginx/sites/myblog.enable:

server {
        listen          80;
        server_name     192.168.1.6;
        charset         utf-8;

        access_log      /var/log/nginx/myblog.access.log main;
        error_log       /var/log/nginx/myblog.error.log info;

        location /media {
                root    /home/www/myblog/media;
        }

        location / {
                include flup_params;
        }
}

管理后台中有部分静态资源,将它们复制到 /home/www/myblog/media 目录下:

cp -r /usr/lib/python2.4/site-packages/django/contrib/admin/media /home/www/myblog/media

/etc/nginx/flup_params 内容为:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  PATH_INFO          $fastcgi_script_name;

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;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

fastcgi_pass   127.0.0.1:2380;

这里设置 fastcgi 的 ip:port 为 127.0.0.1:2380。

配置完毕后重新启动 nginx:

/etc/init.d/nginx restart

安装 flup 并启动 fastcgi

如果使用 gentoo 的 emerge 方式安装,输入以下命令即可:

emerge -pv flup

如果使用 Python eggs 方式安装,则需要到 flup 官网 http://trac.saddi.com/flup 上下载压缩包,再进行安装:

gentoo ~ # wget http://www.saddi.com/software/flup/dist/flup-1.0.1.tar.gz
gentoo ~ # tar zxf flup-1.0.1.tar.gz
gentoo ~ # cd flup-1.0.1
gentoo flup-1.0.1 # python setup.py install

启动 fastcgi:

python manage.py runfcgi host=127.0.0.1 port=2380

打开 http://192.168.1.6/message/http://192.168.1.6/admin/, 看看是否与测试服务器时一致呢?

结束

本文到此已结束,希望通过本文你已经大致了解 Django 的 MVT 架构,并能利用 Django 进行应用开发。

最后附上文中代码的压缩包:myblog.zip

-- EOF --

已经有 5 条评论 »

  1. map 说道:

    2009年03月10日 16:02

    这是我见过最详细的一篇,thanks

  2. 藏宝图» Blog Archive » Django 快速实战入门(七):admin 应用 说道:

    2009年03月19日 22:25

    [...] Django 快速实战入门(八):部署 Django [...]

  3. 藏宝图» Blog Archive » Django 快速实战入门(八):部署 Django 说道:

    2009年03月19日 22:27

    [...] 原始链接:http://hily.me/blog/2008/11/learning-django-ch8/ [...]

  4. guan 说道:

    2009年04月09日 11:40

    入门篇,适合像我这样的初学者。谢谢了

  5. Ken 说道:

    2010年05月06日 17:09

    非常感谢!

发表一下您的高见

If you have any question, or for the language problem, please fell free to leave a comment or just contact me with email: hilyjiang [At] Gmail.