nginx+uwsgi部署django项目

安装基本软件

1
2
sudo apt-get install python-dev nginx
pip install uwsgi

配置uwsgi和django的集成

1
2
3
4
5
6
7
8
9
10
11
vim test.py 创建test.py,添加如下代码
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World"

然后执行shell命令:
uwsgi –http :8001 –wsgi-file test.py

访问网页:
curl http://127.0.0.1:8001/
Hello World

#编写django_wsgi.py文件,将其放在与文件manage.py同一个目录下:

1
2
3
4
5
6
7
8
9
10
11
12
13
### vim django_wsgi.py 添加如下代码:
#!/usr/bin/env python
# coding: utf-8
import os
import sys
# 将系统的编码设置为UTF8
reload(sys)
sys.setdefaultencoding('utf8')

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "yoursite.settings")

from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

连接django和uwsgi,实现简单的WEB服务器。
我们假设你的Django项目的地址是/home/work/src/sites/testdjango1/testdjango/mysite

然后,就可以执行以下命令:
uwsgi –http :8000 –chdir /home/work/src/sites/testdjango1/testdjango/mysite –module django_wsgi
这样,你就可以在浏览器中访问你的Django程序了。所有的请求都是经过uwsgi传递给Django程序的。

集成django,uwsgi和nginx部署:

  • 在django项目根目录创建启动uwsgi的xml文件:

    1
    2
    3
    4
    5
    6
    7
    <uwsgi>
    <socket>:8077</socket>
    <chdir>/home/work/src/sites/testdjango1/testdjango/mysite</chdir>
    <module>django_wsgi</module>
    <processes>4</processes> <!-- 进程数 -->
    <daemonize>uwsgi.log</daemonize>
    </uwsgi>
  • 配置Nginx服务器:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #备份nginx配置文件:
    sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
    vim /etc/nginx/sites-available/default 修改如下:

    server {

    listen 80;
    server_name localhost;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    #charset koi8-r;

    #access_log logs/host.access.log main;

    location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:8077;
    }

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    root html;
    }
    #method first
    location ~ ^/static/ {
    root /home/hz/PycharmProjects/myscrapy/check_ip/;
    expires 24h;
    access_log off;
    }
    #method second
    #location ~* ^.+\.(css|js|json|ttf|woff|map|woff2)${
    # root /home/hz/PycharmProjects/myscrapy/check_ip/;
    # access_log off;
    # expires 24h;
    #}
    }

如果不能访问日志文件,修改相关文件的权限即可

  • 验证测试各步骤结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    重启Nginx服务器,以使Nginx的配置生效。
    nginx -s reload
    重启后检查Nginx日志是否有异常。

    启动uWSGI服务器

    cd /home/work/src/sites/testdjango1/testdjango/mysite

    uwsgi -x djangochina_socket.xml
  • django搜集静态文件

    1
    2
    3
    4
    settings.py文件中指定STATIC_ROOT路径
    python manage.py collectstatic

    修改nginx配置文件指定目录到STATIC_ROOT