Django在Ubuntu14.04的部署方法
<p><span><strong>第一步。</strong></span></p>
<p>
sudo apt-get update</p>
<p>
sudo apt-get upgrade</p>
<p>
先更新。。</p>
<p>
Django的主流部署方式:nginx+uwsgi+django</p>
<p>
<span><strong>第二步,安装nginx</strong></span></p>
<p>
sudo apt-get install nginx</p>
<p>
安装nginx,如果需要安装最新的nginx需从官网下载源码包进行手动编译。</p>
<p>
nginx的大致文件结构。</p>
<p>
1.配置文件:/etc/nginx</p>
<p>
2.程序:/usr/sbin/nginx</p>
<p>
3.日志:/var/log/nginx/access.log - error.log</p>
<p>
<span><strong>第三步,安装uwsgi</strong></span></p>
<p>
sudo apt-get install python3-dev</p>
<p>
sudo apt-get install python3-pip</p>
<p>
sudo pip3 install uwsgi(此步之前,可以换下pip源以提高下载速度。在~/.pip下创建pip.conf写入</p>
<p>
</p>
<p>
trusted-host = pypi.douban.com</p>
<p>
index-url = http://pypi.douban.com/simple)</p>
<p>
uwsgi是一个web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。</p>
<p>
大致流程是 : 客户端<==>nginx<==>uwsgi<==>Django。静态请求由Nginx自己处理。非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。</p>
<p>
创建Django测试项目,django-admin startproject mysite,cd mysite,python manage.py startapp demo1。</p>
<p>
<span><strong>第四步,测试uwsgi</strong></span></p>
<p>
在mysite目录下新建测试文件,nano test.py.</p>
<p>
写入:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterxhtml" id="highlighter_698561">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="xhtml plain">def application(env, start_response):</code>
</div>
<div class="line number2 index1 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain">start_response('200 OK', [('Content-Type','text/html')])</code>
</div>
<div class="line number3 index2 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">return ["Hello World"]</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
运行:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterxhtml" id="highlighter_906372">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="xhtml plain">uwsgi --http :8001 --plugin python --wsgi-file test.py</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
访问正常。</p>
<p>
<span><strong>第五步,测试Django</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterxhtml" id="highlighter_48737">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="xhtml plain">python manage.py runserver 0.0.0.0:8002</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
访问正常。</p>
<p>
连接Django和uwsgi。</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterxhtml" id="highlighter_366097">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="xhtml plain">uwsgi --http:8001 --plugin python --module mysite.wsgi</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
访问正常。</p>
<p>
<span><strong>第六步,配置uwsgi</strong></span></p>
<p>
uwsgi支持通过多种配置文件形式启动,这里采用ini配置文件的方法.</p>
<p>
新建uwsgi:nano uwsgi.ini</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterxhtml" id="highlighter_733842">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="xhtml plain"># mysite_uwsgi.ini file</code>
</div>
<div class="line number2 index1 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain"></code>
</div>
<div class="line number3 index2 alt2">
</div>
<div class="line number4 index3 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain">socket = 127.0.0.1:3400</code>
</div>
<div class="line number5 index4 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain"># Django-related settings</code>
</div>
<div class="line number6 index5 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain"># the django project directory (full path)</code>
</div>
<div class="line number7 index6 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">chdir = /home/ubuntu/mysite</code>
</div>
<div class="line number8 index7 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain"># Django's wsgi file</code>
</div>
<div class="line number9 index8 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">module = mysite.wsgi</code>
</div>
<div class="line number10 index9 alt1">
</div>
<div class="line number11 index10 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain"># process-related settings</code>
</div>
<div class="line number12 index11 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain"># master</code>
</div>
<div class="line number13 index12 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">master = true</code>
</div>
<div class="line number14 index13 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain"># maximum number of worker processes</code>
</div>
<div class="line number15 index14 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">processes = 2</code>
</div>
<div class="line number16 index15 alt1">
</div>
<div class="line number17 index16 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">threads = 2</code>
</div>
<div class="line number18 index17 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain">max-requests = 6000</code>
</div>
<div class="line number19 index18 alt2">
</div>
<div class="line number20 index19 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain"># ... with appropriate permissions - may be needed</code>
</div>
<div class="line number21 index20 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">chmod-socket = 664</code>
</div>
<div class="line number22 index21 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain"># clear environment on exit</code>
</div>
<div class="line number23 index22 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">vacuum = true</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
访问时报错,invalid request block size: 21573 (max 4096)...skip。</p>
<p>
原因是url地址超过4096个字符,原因是我们是用socket的方式启动,将配置文件的socket改为http即可,或者修改buffer-size。</p>
<p>
(建议不做修改,测试时改为http即可,等连接nginx时,改回到socket)</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterxhtml" id="highlighter_640406">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="xhtml plain">daemonize = /home/ubuntu/mysite/uwsgi.log</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
正式运行时将这句代码加入到uwsgi.ini文件中,访问日志就会后台输出到uwsgi.log</p>
<p>
此时django已经能访问。</p>
<p>
<span><strong>第七步,配置nginx</strong></span></p>
<p>
修改nginx的默认配置文件/etc/nginx/sites-enabled/default</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterxhtml" id="highlighter_123418">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="xhtml plain">server {</code>
</div>
<div class="line number2 index1 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain"># the port your site will be served on</code>
</div>
<div class="line number3 index2 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">listen 80;</code>
</div>
<div class="line number4 index3 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain"># the domain name it will serve for</code>
</div>
<div class="line number5 index4 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">server_name 127.0.0.1; # substitute your machine's IP address or FQDN</code>
</div>
<div class="line number6 index5 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain">charset utf-8;</code>
</div>
<div class="line number7 index6 alt2">
</div>
<div class="line number8 index7 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain"># max upload size</code>
</div>
<div class="line number9 index8 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">client_max_body_size 75M; # adjust to taste</code>
</div>
<div class="line number10 index9 alt1">
</div>
<div class="line number11 index10 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain"># Django media</code>
</div>
<div class="line number12 index11 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain">location /media {</code>
</div>
<div class="line number13 index12 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">alias /home/ubuntu/mysite/media; # your Django project's media files - amend as required</code>
</div>
<div class="line number14 index13 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain">}</code>
</div>
<div class="line number15 index14 alt2">
</div>
<div class="line number16 index15 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain">location /static {</code>
</div>
<div class="line number17 index16 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">alias /home/ubuntu/mysite/static; # your Django project's static files - amend as required</code>
</div>
<div class="line number18 index17 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain">}</code>
</div>
<div class="line number19 index18 alt2">
</div>
<div class="line number20 index19 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain"># Finally, send all non-media requests to the Django server.</code>
</div>
<div class="line number21 index20 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">location / {</code>
</div>
<div class="line number22 index21 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain">include uwsgi_params; # the uwsgi_params file you installed</code>
</div>
<div class="line number23 index22 alt2">
<code class="xhtml spaces"> </code><code class="xhtml plain">uwsgi_pass 127.0.0.1:8001;#此处跟uwsgi配置文件保持一致</code>
</div>
<div class="line number24 index23 alt1">
<code class="xhtml spaces"> </code><code class="xhtml plain">}</code>
</div>
<div class="line number25 index24 alt2">
<code class="xhtml plain">}</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
记得修改测试时的uwsgi.ini的配置。</p>
<p>
<span><strong>第八步,运行</strong></span></p>
<p>
重启nginx,运行uwsgi.</p>
<p>
大功告成</p>
<p>
以上这篇Django在Ubuntu14.04的部署方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。</p>
頁:
[1]