uwsig 安装与部署

一、uwsig 简介

二、安装部署

三、问题

 

一、uwsig 简介

  uWSGI 是一个快速的、纯 C 语言开发的、自维护的、对开发者友好的 WSGI 服务器,旨在提供专业的 Python web 应用发布和开发。可使用 C/C++/Objective-C 来为 uWSGI 编写插件。

  上面是抄的,哈哈。 其实自己就用过这个,挺好挺简单就可以使用。

二、安装部署

  可以去官方文档看看:去官网

  1.前提是安装好了python。

pip3 install uwsgi

  安装好了后,可以先尝试一个新的foobar.py文件。

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

  然后使用下面命令

uwsgi --http :9090 --wsgi-file foobar.py

  然后访问: http://127.0.0.1:9090/

  会出现:

  那就是安装成功了。

  2.uwsgi配置文件。

[uwsgi]
# 使用nginx连接时使用
socket=0.0.0.0:8000
# 直接做web服务器使用
# http=0.0.0.0:8000
# 项目目录, 与manager.py同级
chdir = /home/计算机名/项目名
# 项目中wsgi.py文件的目录,相当于项目目录
wsgi-file=项目名/wsgi.py

# 主进程,启动一个master进程,来管理其余其他的子进程
master=True
# 设置工作进程的数量
processes=4
# 设置每个工作进程的线程数
threads=2

# python虚拟环境目录绝对路径。如果有的话,home是虚拟环境的根目录,pythonhome是虚拟环境下的bin目录(放置了python执行文件)
# home = /env
# PYTHOMHOME = /env/bin

# pid文件,用于脚本启动,停止
pidfile=uwsgi.pid

# 设置后台运行保存日志。只要配置了daemonize将会让uwsgi后台运行,同时将日志输出到指定目录
daemonize=uwsgi.log

# 服务停止时自动移除unix Socket和pid文件
vacuum = true

# 设置每个工程进程处理请求的上线,达到上限时,将回收(重启)进程,可以预防内存泄露
max-requests=5000

# 静态文件映射
static-map = /static=Django下static目录的绝对路径

# 指定日志文件的权限
logfile-chome=644

# uWSGI服务器运行时的用户ID
uid=xxx
# uWSGI服务器运行时的用户组ID
gid=xxx
# 指定工作进程名称的前缀
procname-prefix-spaced=xxx

# uWSGI加载的木块中哪个变量将被调用
callable=xxx

# 监控项目的py文件的mtime来触发重载(只在开发时使用),py-autoreload表示多长时间检测一次,单位秒
py-autoreload=1

# 在每个worker而不是master中加载应用。默认为false,表示先加载应用,再fork出worker,这样做可以让worker尽量共用内存,只有当写时才copy,由于先加载再fork,但有些东西是不支持fork的,比如socket连接,所以lazy-apps=false时,不要在加载应用时自动创建数据库连接等
lazy-apps=true

# 设置用于uwsgi包解析的内部缓存区大小为64k。默认为4k
buffer-size=32768

# 设置最大日志文件大小
log-maxsize=5000000

# 禁用请求日志记录
disable-logging=true

# 设置socket的监听队列大小(默认为:100)
listem=120

# 这个参数不会影响app内创建线程,只影响wsgi内部的api,默认值为false。可以认为对用户无影响,使用默认值即可。参见:https://github.com/unbit/uwsgi/issues/1141
enable-threads=true

# 设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长描述。这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了8秒就会被强行结束(忽略之前已经接收到的请求而直接结束)
reload-mercy=8

# 通过使用POSIX/UNIX的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数。这个配置会限制uWSGI的进程占用虚拟内存不超过256M。如果虚拟内存已经达到256M,并继续申请虚拟内存则会使程序报内存错误,本次的http请求将返回500错误。
limit-as = 256

 
# 一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启)
harakiri = 60

  这个是参考这个弟兄的内容,感兴趣的可以去看看: 去看看

  正常配置不用那么多,这是我的一个项目的:

  http如果不是本地,就改成外网IP地址。

  其中虚拟环境我用的是 virtualenv ,也可以用上面的。

[uwsgi]
http = 127.0.0.1:5000
virtualenv = /home/pkcom/.virtualenvs/chatgpt
wsgi-file = /home/pkcom/Desktop/py-project/flask-chatgpt/app.py
callable=app
processes = 2
threads = 8
buffer-size = 32768
master = true
vacuum=true
daemonize=uwsgi.log
pidfile=uwsgi.pid

  3.配合nginx

# 选项1, 使用unix socket与nginx通信
# 仅限于uwsgi和nginx在同一主机上情形
# Nginx配置中uwsgi_pass应指向同一socket文件地址
# 在uwsgi设置该项目,启动uwsgi会生成一个文件,将nginx指向这个文件就可以了
socket=/run/uwsgi/%(project).sock
# 选项2,使用TCP socket与nginx通信 # Nginx配置中uwsgi_pass应指向uWSGI服务器IP和端口 socket
==0.0.0.0:8000 或则 socket=:8000 # 选项3,使用http协议与nginx通信 # Nginx配置中proxy_pass应指向uWSGI服务器IP和端口 http==0.0.0.0:8000

  选项一的nginx配置,在uwsgi_pass ,填入uwsgi配置文件的地址:

location/ {     
    include /etc/nginx/uwsgi_params;
    uwsgi_pass unix:/run/uwsgi/django_test1.sock;
}

  选项二的配置

location/ {     
    include /etc/nginx/uwsgi_params;
    uwsgi_pass uWSGI_SERVER_IP:8000;
}

  选项三的配置

location / {
     include uwsgi_params;
     proxy_pass http://127.0.0.1:5000;
  }

  这是参考这个兄弟的:去看看

  4.uwsgi的相关命令

  启动的命令:

uwsgi --ini uwsgi.ini

  停止的命令,需要设置 pidfile

uwsgi --stop uwsgi.pid

  如果文件有修改,最好先停止再启动,不然有可能错误,也可以使用reload

uwsgi --reload uwsgi.pid

 

三、问题

  1.如果关闭uwsgi 提示没有相关进程,可以查查有没有进程。

ps -ef |grep uwsgi

  然后将 pid 文件的数字改成里面的数字,就可以关闭了。

  2. 如果配置文件不在python入口文件下,可能会出现引入问题,这样得在配置里设置项目路径

chdir=/home/pkcom/Desktop/py-project/flask-project

 

posted @ 2023-05-06 10:39  PKGAME  阅读(170)  评论(0编辑  收藏  举报