落笔便是竹 發表於 2023-6-10 00:00:00

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>
        大致流程是 : 客户端&lt;==&gt;nginx&lt;==&gt;uwsgi&lt;==&gt;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]
查看完整版本: Django在Ubuntu14.04的部署方法