Open cundi opened 9 years ago
该指南主要针对的是希望配置一台生产环境中的web服务器的Django用户。通过配置Django所需的步骤,它就能很好的和uWSGI以及nginx发挥作用。它包括了所有点三个组件,并提供了一个完整的web应用栈和服务器软件。
Django是高级的Python鼓励快读开发,同时具有清晰和务实的设计这样的一个网站开发框架。
ningx(发音:engine-x)是自由、而且开源的一个高性能HTTP服务器,它可以反向代理,而且也可以作为IMAP/POP3的代理服务器。
注释 这是一份指南,而且并没有提供一个参考指南的打断,永远不要认为这是有关开发主题的一份内容详尽的手册。
nginx和uWSGI部署Django的上好选择,不过他们并不是唯一的选择,或者是“官方化”的选择。选择两者中的任何一个都是非常棒的,我们鼓励你进行调查研究后再做选择。
这里我们部署Django的方法确实是一个好方法,但却不是唯一的方法,就某些需求来说它也不是最好的选择。
注释 该指南对你当前正在使用的系统作出了一些假设。
假设你正在使用类Unix系统,而且主要使用的是类aptitude包管理器。不过你要是问我“在Mac OS X系统上和aptitude相当的命令是什么”这样的问题,其实这类问题的答案相当简单。
web服务器需要面向外部世界。它可以直接地从文件系统伺服文件(HMTL, iamges, CSS等等)。不过他不能直接地和Django应用对话。它需要能够运行这个应用的东西,接受来自web客户端(比如浏览器)请求并返回响应。
Web服务器网管接口-WSGI来完成这个工作。WSGI是一个Python标准。
uWSGI是WSGI的另外一种实现。该指南中我们将配置好uWSGI,这样它就可以创建Unix socket,并通过WSGI协议来伺服到web服务器的响应。最后,完整的组件栈模样大概如此:
web客户端 <-> web服务器 <-> socket <-> uwsgi <-> Django
virtualenv 确保我们所需安装的软件使用了virtualenv(稍后我们就来叙述适用于所有系统的uwsgi安装过程):
virtualenv uwsgi-tutorial cd uwsgi-tutorial source bin/activate
Django 将Django安装到virtualenv中并创建一个新的项目,然后cd到这个项目:
pip install django django-amdin.py startproject mysite cd mysite
本指南中我们会调用到你的域名 example.com。这里酌情替换为自己的FQDN或者IP地址。
本指南中,在发布时对web服务器使用了8000端口,就像Django runserver默认所作的那样。你可以使用任何你所希望用的端口,不过就我来说,我会选择8000端口,因为它不与web服务器中可能已经使用的端口发生冲突。
pip install uwsgi
当然肯定还有其他的方法可以安装uWSGI,不过这个方法和其他任何一个方法一样好。不要忘了,你得安装Python开发包才可以啊。在Debian或者基于Django的系统,比如UBuntu来说,你需要做的就是安装pythonX.Y-dev,这里X.Y代表Python的版本。
创建一个叫做test.py的文件:
# test.py def appliaction(env, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [b'Hello World'] # python3 #retunr ['Hello World'] # python2
注意在Python中需要bytes()。
运行uWSGI:
uwsgi --http :8000 --wsgi-file test.py
选项的含义:
该命令会在浏览器的8000端口上直接地显示一个消息'hello world'。访问地址:
http://example.com:8000
如果显示结果正确,这就意味着下面的组件栈起作用了:
web客户端 <-> uWSGI <-> Python
现在我们想让uWSGI完成相同的工作,不过运行的是Django站点而不是test.py模块。
假如你还没有这样做,请确保项目mysite可以真正的运行:
python manage.py runserver 0.0.0.0:8000
假如上面的命令能够起作用,那么接下来可以利用uWSGI来运行该站点:
uwsgi --http :8000 --module mysite.wsgi
将浏览器指向服务器,假如网站出现了,这就意味着uWSGI能够从virtualenv伺服Django应用,那么下面的栈操作也是正确地:
web客户端 <-> uWSGI <-> Django
从现在起,我们就不用直接地使用浏览器与uWSGI通信。这是由作为中间媒介的web服务器来完成的工作。
sudo apt-get install nginx sudo /etc/init.d/nginx start # 启动nginx
现在可以通过web浏览器访问nginx
web客户端 <-> web服务器
如果有其他的进程占用了你想用的80端口,那么你必须重新配置nginx以提供一个不同的端口。不过,就本指南来说,我们使用的是8000端口。
你需要的是uwsgi_params文件,它可以从nginx目录的uWSGI部分找到,https://github.com/nginx/nginx/blob/master/conf/uwsgi_params。
将改文件复制到项目的目录中。一会儿我们就会让nginx引用它的。
现在,新建一个叫做mysite_nginx.conf的文件,然后把下面的内容写入该文件:
# mysite_nginx.conf # 上游组件nginx需要连接它 upstream django{ # server unix:///path/to/your/mysite/mysite.sock; # socket文件 server 127.0.0.1:8001; # web端口的socket(优先使用) } # 服务器的配置 server{ # 站点所提供的端口 listen 8000; # 站点提供的域名 server_name .example.com; # 替换为你自己机器的地址 charset utf-8; # 最大上传尺寸 client_max_body_size 75M; # 请酌情修改 # Django媒体 location /media{ alias /path/to/your/mysite/media; # Django项目的媒体文件所在,请按需改进 } location /static{ alias /path/to/your/mysite/static; # 项目的静态文件目录,按需修改 } # 最后,将所有非媒体请求全部发送到Django服务器。 location / { uwsgi_pass django; include /path/to/your/mysite/uwsgi_params; # } }
使用uWSGI和nginx配置Django与web服务器
该指南主要针对的是希望配置一台生产环境中的web服务器的Django用户。通过配置Django所需的步骤,它就能很好的和uWSGI以及nginx发挥作用。它包括了所有点三个组件,并提供了一个完整的web应用栈和服务器软件。
Django是高级的Python鼓励快读开发,同时具有清晰和务实的设计这样的一个网站开发框架。
ningx(发音:engine-x)是自由、而且开源的一个高性能HTTP服务器,它可以反向代理,而且也可以作为IMAP/POP3的代理服务器。
对该指南的一些注释
注释
这是一份指南,而且并没有提供一个参考指南的打断,永远不要认为这是有关开发主题的一份内容详尽的手册。
nginx和uWSGI部署Django的上好选择,不过他们并不是唯一的选择,或者是“官方化”的选择。选择两者中的任何一个都是非常棒的,我们鼓励你进行调查研究后再做选择。
这里我们部署Django的方法确实是一个好方法,但却不是唯一的方法,就某些需求来说它也不是最好的选择。
注释
该指南对你当前正在使用的系统作出了一些假设。
假设你正在使用类Unix系统,而且主要使用的是类aptitude包管理器。不过你要是问我“在Mac OS X系统上和aptitude相当的命令是什么”这样的问题,其实这类问题的答案相当简单。
基本概念
web服务器需要面向外部世界。它可以直接地从文件系统伺服文件(HMTL, iamges, CSS等等)。不过他不能直接地和Django应用对话。它需要能够运行这个应用的东西,接受来自web客户端(比如浏览器)请求并返回响应。
Web服务器网管接口-WSGI来完成这个工作。WSGI是一个Python标准。
uWSGI是WSGI的另外一种实现。该指南中我们将配置好uWSGI,这样它就可以创建Unix socket,并通过WSGI协议来伺服到web服务器的响应。最后,完整的组件栈模样大概如此:
配置uWSGI之前的准备工作
virtualenv
确保我们所需安装的软件使用了virtualenv(稍后我们就来叙述适用于所有系统的uwsgi安装过程):
Django
将Django安装到virtualenv中并创建一个新的项目,然后cd到这个项目:
域名和端口
本指南中我们会调用到你的域名 example.com。这里酌情替换为自己的FQDN或者IP地址。
本指南中,在发布时对web服务器使用了8000端口,就像Django runserver默认所作的那样。你可以使用任何你所希望用的端口,不过就我来说,我会选择8000端口,因为它不与web服务器中可能已经使用的端口发生冲突。
基本的uWSGI安装与配置
安装uWSGI到virtualenv
当然肯定还有其他的方法可以安装uWSGI,不过这个方法和其他任何一个方法一样好。不要忘了,你得安装Python开发包才可以啊。在Debian或者基于Django的系统,比如UBuntu来说,你需要做的就是安装pythonX.Y-dev,这里X.Y代表Python的版本。
基本测试
创建一个叫做test.py的文件:
注释
注意在Python中需要bytes()。
运行uWSGI:
选项的含义:
该命令会在浏览器的8000端口上直接地显示一个消息'hello world'。访问地址:
如果显示结果正确,这就意味着下面的组件栈起作用了:
测试Django项目
现在我们想让uWSGI完成相同的工作,不过运行的是Django站点而不是test.py模块。
假如你还没有这样做,请确保项目mysite可以真正的运行:
假如上面的命令能够起作用,那么接下来可以利用uWSGI来运行该站点:
将浏览器指向服务器,假如网站出现了,这就意味着uWSGI能够从virtualenv伺服Django应用,那么下面的栈操作也是正确地:
从现在起,我们就不用直接地使用浏览器与uWSGI通信。这是由作为中间媒介的web服务器来完成的工作。
基本的nginx
安装nginx
现在可以通过web浏览器访问nginx
如果有其他的进程占用了你想用的80端口,那么你必须重新配置nginx以提供一个不同的端口。不过,就本指南来说,我们使用的是8000端口。
为你的站点配置nginx
你需要的是uwsgi_params文件,它可以从nginx目录的uWSGI部分找到,https://github.com/nginx/nginx/blob/master/conf/uwsgi_params。
将改文件复制到项目的目录中。一会儿我们就会让nginx引用它的。
现在,新建一个叫做mysite_nginx.conf的文件,然后把下面的内容写入该文件: