Nginx web服务器+uWSGI web服务器+Django生产环境部署

1.服务器选择原因:

uWSGI web服务器+Django其实也可以满足web服务器的要求,那么再接上nginx web服务器的原因?

首先Nginx服务器处理静态网页的能力特别强,起码比uWSGI web服务器好。所以可以两个服务器结合,做好动静服务的分离。即是Nginx提供静态服务,uWSGI服务器+Django提供动态服务,这样可以大大的提高响应效率。

2.安装配置uWSGI服务:

2.1安装uWSGI:  

  pip install uWSGI

2.2 终端命令启动uwsgi服务

Django应用可以单独跑起来(Django也带有web服务功能,但是比较差,可以验证开发)

  Django 起服务的命令如下:python3 manage.py runserver 0.0.0.0:9000,如果这个可以通过浏览器验证通过,说明自己开发服务端程序没问题。

在之前验证通过的前提下,在Django项目目录中,执行一下命令,验证uwsgi服务器。

uwsgi --http 0.0.0.0:9000 --file form_demo/wsgi.py --static-map=/static=static

--file form_demo/wsgi.py:  Django的form_demo项目名称,wsgi.py指定协议的名称即是wsgi协议。

--static-map=/static=static: 静态文件,可以不写。在浏览器刷新时会找不到。

以上是命令行启动,实际项目中更多的使用配置文件启动。

2.3使用配置文件启动uWSGI [ini 格式]

如下文件uwsgi.ini

[uwsgi]

#项目目录,根据自己项目来定

chdir=/data/Project/python/django_project/form_demo

#启动uwsgi的用户名和用户组

uid=root

gid=root

#指定项目的application

moudle=for_demo.wsgi

#指定sock的文件路径,相对路径有时会出现无法创建文件的情况.

socket=/data/Project/python/django_project/script/uwsgi.sock

#http = :8080            # 如果需要同时提供HTTP服务(如直接对外),此处配合nginx,未用

#启用主进程

master=true

#进程个数

worker=2

#每个进程的线程数

threads=3

#记录进程ID文件

pidfile=/data/Project/python/django_project/script/uwsgi.pid

#当uwsgi服务停止的时候,是否自动删除socket和pid

vacuum=true

#启用 thunder-lock 功能,当设置为 true 时,uWSGI 会使用全局文件锁来处理资源竞争问题。你也可以将其设置为 false 来禁用该功能

thunder-lock = true

#允许多线程(需配合'threads'使用)

enable-threads = true

#请求超时时间(秒),超时自动重启进程

harakiri = 30

#post-buffering 设置为 65536 字节(即 64KB),意味着 uWSGI 会将 POST 请求数据# 缓冲到 64KB 后再传递给应用程序,当 post-buffering 设置为 0 时,uWSGI 会采用流# 式处理的方式,将客户端发送的 POST 请求数据逐块传递给应用程序,而不会进行缓冲

post_buffering = 4096

# 日志配置
daemonize = /data/Project/python/django_project/script/uwsgi.log  # 后台运行并输出日志
#logto = /var/log/uwsgi.log      # 等同于 daemonize(二者选一)
#disable-logging = true         # 关闭请求日志(仅记录错误)

#下述配置将 URL 中以 /static 开头的请求映射到服务器文件系统中的 /path/to/#static/files 目录。例如,当客户端请求 http://example.com/static/#style.css 时,uWSGI 会尝试从 /path/to/static/files/style.css 文件中读取#内容并返回给客户端

#static-map = /static=/path/to/static/files #此处暂时不用

# 虚拟环境(如果使用)
#virtualenv = /path/to/venv # (本项目Python虚拟环境路径,未使用)

  • socket
    指定与Web服务器(如Nginx)通信的地址。可以是端口(如 :8000)或Unix Socket文件(如 /tmp/uwsgi.sock)。

    • 使用Nginx时通常选择Unix Socket(性能更好)。

    • 直接对外提供HTTP服务时用 http 代替 socket

  • module
    指定WSGI入口,例如Django项目的 myapp.wsgi:application

  • virtualenv / home
    指定Python虚拟环境路径,确保uWSGI使用项目依赖。

  • processesthreads
    根据服务器CPU核心数调整进程和线程数(如 processes = 2 * CPU核心数)。

  • master
    启用主进程管理子进程,提高稳定性。

  • harakiri
    防止请求阻塞,超时自动终止并重启进程。

  • vacuum
    退出时自动清理临时文件(避免残留Socket文件导致重启失败)。

2.4生产环境建议

  • 使用 Nginx 反向代理到uWSGI的Socket。

  • Supervisorsystemd 管理uWSGI进程。

  • 日志分割:使用 logrotatedaemonize 结合日志文件路径

可以把uwsgi服务的配置文件和一些服务产生的log信息等放到一个统一目录管理。

我这里是创建一个script文件夹和Django项目同级目录。

常用命令:

uwsgi --ini uwsgi.ini通过配置文件启动wsgi服务

ps -ef | grep -i uwsgi 查看uwsgi服务是否启动?

uwsgi --stop uwsgi.pid 关闭uwsgi服务

以上命令在创建的script文件夹下执行即可

3.安装配置Nginx

3.1安装Nginx

sudo apt install nginx

也可以用yum源管理安装nginx。

3.2Nginx配置:

server{

        #监听端口

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值