如何在python中部署网站

时间:2013-07-07 21:16:46

标签: python django webserver

我是python的新手,我正在django开发一个网站,但是想知道如何发布这个网站,我拥有一个带有Ubuntu 10.04 LTS的半专用云服务器,我应该安装哪个软件来开发一个服务器,我也很乐观,我希望有200多个同时访问它,或者必须使用网络服务器和好...

1 个答案:

答案 0 :(得分:3)

你可以采取多种方式:

  • 在某种流程主管中运行裸django
  • 使用反向代理通过特定协议(如FastCGI
  • )将请求重定向到django

使用流程主管运行django

用于确保特定服务启动的多种工具之一是supervisord。要安装它,您需要做的只是sudo apt-get install supervisord

成功安装后,您应该已经创建了一个/etc/supervisord/conf.d目录,您可以在其中放置您希望监控的每项服务的所有配置文件。

supervisord有什么作用?

Supervisord以及其他方面检查由配置中给出的命令启动的服务进程的当前状态。一旦检测到服务中断,它就会尝试重新启动它。如果它在很短的时间内失败了太多次,那么该服务被认为是错误的,您需要自己查看问题的原因。

示例配置文件

[program:django-webserver]
directory = /user/foo/my-project
user = foo
command = /user/foo/.virtualenvs/my-project/bin/python /user/foo/my-project/manage.py runserver
stdout_logfile = /user/foo/my-project/logs/supervisord/webserver.out.log
stderr_logfile = /user/foo/my-project/logs/supervisord/webserver.err.log
autostart = true
autorestart = true
environment = DJANGO_SETTINGS_MODULE="myproject.settings.production"

运行机器

将上面的配置粘贴到/etc/supervisord/conf.d/目录(例如myproject.conf文件)后,您可以使用sudo supervisorctl命令查看当前的服务状态。您将从包含的配置文件中获取所有已配置程序的列表及其状态。要重新加载配置,您应该在输入supervisorctl后出现的提示中键入reload

确保supervisord已加载新配置文件后,您可以键入start django-webserver然后让主管运行django并处理它。请注意,django-webserver是您在supervisord配置文件的[program:<name>]子句中传递的名称。

使用反向代理运行django

在我看来,用户友好的反向代理之一是nginx。为什么要使用像nginx这样的反向代理?它允许您设置负载均衡器,更有效地提供文件等。

可以通过键入sudo apt-get install nginx来安装Nginx。要使nginxdjango-webserver对话,您需要在/etc/nginx/sites-available目录中创建此配置文件。

server {
    listen 80;
    access_log /home/foo/myproject/nginx/access.log;
    error_log /home/foo/myproject/nginx/error.log;

    location /statics/ {
        gzip on;
        root /home/foo/myproject/collected_static;
        rewrite ^/statics/(.*)$ /$1 break;
        autoindex off;
        expires 60d;
    }

    location / {
        fastcgi_pass 127.0.0.1:8000;
        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 SERVER_PORT $server_port;
        fastcgi_param SERVER_NAME $server_name;

        fastcgi_pass_header Authorization;
        fastcgi_intercept_errors off;
    }
}

为了让您的django能够与nginx进行通信,您需要使用flup安装pip install flup(其他替代方法是gunicorn)。安装了flup之后,请确保您的django服务器正在运行以下命令: python manage.py runfcgi host=127.0.0.1 port=8000 daemonize=false

daemonize=false开关非常重要,因为它不会创建后台守护程序。

随着django的启动和运行,剩下要做的唯一事情就是让外部世界可以使用实际的nginx站点:在/etc/nginx/sites-available目录内的/etc/nginx/sites-enabled目录内建立一个刚创建的nginx配置的软链接像这样:

cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/myproject.conf myproject.conf

完成这些步骤后,使用sudo /etc/init.d/nginx restart重新启动nginx并瞧。

将两个步骤结合起来让主管处理将与nginx进行通信的django进程是一个好主意。