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