Django+Uwsgi+Nginx如何实现生产环境部署

作者:金角大王Alex 时间:2023-02-08 00:48:48 

如何在生产上部署Django?

Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式。

uwsgi介绍

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。

  • WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。

  • uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。

  • 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。

  • uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

uwsgi性能非常高

Django+Uwsgi+Nginx如何实现生产环境部署

uWSGI的主要特点如下

  • 超快的性能

  • 低内存占用(实测为apache2的mod_wsgi的一半左右)

  • 多app管理(终于不用冥思苦想下个app用哪个端口比较好了-.-)

  • 详尽的日志功能(可以用来分析app性能和瓶颈)

  • 高度可定制(内存大小限制,服务一定次数后重启等)

总而言之uwgi是个部署用的好东东,正如uWSGI作者所吹嘘的:

If you are searching for a simple wsgi-only server, uWSGI is not for you, but if you are building a real (production-ready) app that need to be rock-solid, fast and easy to distribute/optimize for various load-average, you will pathetically and morbidly fall in love (we hope) with uWSGI.

Uwsgi 安装使用

# Install the latest stable release:
pip install uwsgi
# ... or if you want to install the latest LTS (long term support) release,
pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz

基本测试

Create a file called test.py:


# test.py
def application(env, start_response):
 start_response('200 OK', [('Content-Type','text/html')])
 return [b"Hello World"] # python3
 #return ["Hello World"] # python2

运行

uwsgi --http :8000 --wsgi-file test.py

用uwsgi 启动django

uwsgi --http :8000 --module mysite.wsgi

可以把参数写到配置文件里


alex@alex-ubuntu:~/uwsgi-test$ more crazye-uwsgi.ini

[uwsgi]
http = :9000
#the local unix socket file than commnuincate to Nginx
socket = 127.0.0.1:8001
# the base directory (full path)
chdir = /home/alex/CrazyEye
# Django's wsgi file
wsgi-file = CrazyEye/wsgi.py
# maximum number of worker processes
processes = 4
#thread numbers startched in each worker process
threads = 2

#monitor uwsgi status
stats = 127.0.0.1:9191
# clear environment on exit
vacuum     = true

启动

/usr/local/bin/uwsgi crazye-uwsgi.ini

Nginx安装使用

sudo apt-get install nginx
sudo /etc/init.d/nginx start # start nginx

为你的项目生成Nginx配置文件

You will need the uwsgi_params file, which is available in the nginx directory of the uWSGI distribution, or from https://github.com/nginx/nginx/blob/master/conf/uwsgi_params

Copy it into your project directory. In a moment we will tell nginx to refer to it.

Now create a file called mysite_nginx.conf, and put this in it:


# mysite_nginx.conf

# the upstream component nginx needs to connect to
upstream django {
 # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
 server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

# configuration of the server
server {
 # the port your site will be served on
 listen   8000;
 # the domain name it will serve for
 server_name .example.com; # substitute your machine's IP address or FQDN
 charset   utf-8;

# max upload size
 client_max_body_size 75M;  # adjust to taste

# Django media
 location /media {
   alias /path/to/your/mysite/media; # your Django project's media files - amend as required
 }

location /static {
   alias /path/to/your/mysite/static; # your Django project's static files - amend as required
 }

# Finally, send all non-media requests to the Django server.
 location / {
   uwsgi_pass django;
   include   /path/to/your/mysite/uwsgi_params; # the uwsgi_params file you installed
 }
}

This conf file tells nginx to serve up media and static files from the filesystem, as well as handle requests that require Django's intervention. For a large deployment it is considered good practice to let one server handle static/media files, and another handle Django applications, but for now, this will do just fine.

Symlink to this file from /etc/nginx/sites-enabled so nginx can see it:

sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/

Deploying static files

Before running nginx, you have to collect all Django static files in the static folder. First of all you have to edit mysite/settings.py adding:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

and then run

python manage.py collectstatic

此时启动Nginx 和Uwsgi,你的django项目就可以实现高并发啦!

来源:https://www.cnblogs.com/alex3714/p/6538374.html

标签:Django,Uwsgi,Nginx,生产,环境,部署
0
投稿

猜你喜欢

  • 如何使用Python生成Hilbert矩阵

    2021-08-09 12:36:08
  • 清理Mysql general_log的方法总结

    2024-01-14 10:54:34
  • numpy.reshape(-1,1)的具体使用

    2021-12-26 13:25:30
  • 详解Python牛顿插值法

    2023-03-05 05:58:27
  • JavaScript编写棋盘覆盖代码详解

    2024-04-17 10:30:05
  • Python人工智能之混合高斯模型运动目标检测详解分析

    2021-11-01 21:28:43
  • Python 中使用 argparse 解析命令行参数

    2023-10-26 14:10:42
  • 有关数据库SQL递归查询在不同数据库中的实现方法

    2024-01-28 00:40:15
  • layui实现显示数据表格、搜索和修改功能示例

    2024-04-18 10:01:46
  • Python 模块EasyGui详细介绍

    2022-04-27 22:55:39
  • MySQL数据库查询性能优化的4个技巧干货

    2024-01-13 23:25:16
  • python orm 框架中sqlalchemy用法实例详解

    2021-04-22 18:03:28
  • perl哈希的一个实例分析

    2023-07-23 21:35:16
  • Python安装第三方库的3种方法

    2022-02-03 03:10:47
  • pandas 中对特征进行硬编码和onehot编码的实现

    2021-03-26 22:37:49
  • apache+php+mysql安装配置方法小结

    2023-11-11 23:29:31
  • 使用docker构建golang线上部署环境的步骤详解

    2024-04-25 13:16:44
  • ASP实例:处理多关键词查询实例代码

    2008-11-24 12:56:00
  • Python中Selenium模拟JQuery滑动解锁实例

    2021-10-21 09:49:52
  • python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例

    2022-12-24 23:49:30
  • asp之家 网络编程 m.aspxhome.com