uWSGI应用发布随笔

前言

从2019年开始接触Python-Web开发开始,大大小小的应用也做了十几个了。从一开始为了部署一个应用研究好几天,到后来摸清了所有过程几分钟就能完成部署工作,确实感受到人的认知过程是螺旋上升的。在这个过程中也积累了很多经验,在这篇随笔中记录一下。

一些重要的原则

  • 在任何情况下,都不应该使用开发服务器部署应用
  • 不能直接将uWSGI直接暴露在外网(即不应该使用http模式)
  • 反向代理服务器nginx是首选,如果条件确实不允许,也可以使用apache
  • 最好不要使用root账号部署应用

一些经验

  • 如果使用frp,可以使用TCP socket,并将这个端口映射到外网,在外网的服务器做反向代理
  • 可以将静态文件交给nginx处理
  • Apache配置起来比nginx复杂得多

uWSGI配置模版

需要在项目路径下保存配置文件,通常的命名方式是myconfig.ini,对于flask和Django的配置方式还有所不同。

flask

下面展示基于flask开发应用的配置文件:

[uwsgi]
base =/www/wwwroot/yourprojectdir
callable = app
socket = 127.0.0.1:9162
chdir =/www/wwwroot/yourprojectdir
wsgi-file =main.py
processes = 1
threads = 2
chmod-socket = 666
daemonize = myapp.log
logto = myapp.log
pidfile = myappmaster.pid
vacuum = true

需要注意的是,flask开发应用都会实例化一个app对象出来,在上面的配置中我们要让uwsgi服务器找到这个对象并执行。因此main.py文件中需要包含这样的语句:

from . import app

if name == "main":
app.run(host="0.0.0.0", debug=False)

Django

对于Django项目,配置起来就相对简单一下,示例的配置文件如下:

[uwsgi]
socket = :7730
chdir = /www/wwwroot/yourprojectdir/
module = myapp.wsgi
master = true
processes = 2
threads = 2
vacuum = true
pidfile = dmaster.pid
daemonize = dlog.log

nginx反向代理配置

端口什么的就不用说了,需要在vhost下面添加以下路由:

location / { 
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:7730;
#       uwsgi_pass unix:///temp/ufs.sock
        uwsgi_read_timeout 2;
    }

保存配置以后,重启即可,这是发现已经可以访问web应用了。 如果还有静态文件访问需求,还需要在nginx中配置静态文件路由,具体配置如下

location /static{
    alias /path/to/static/;
}

uWSGI的启动和重载

使用配置文件启动应用服务器

uwsgi -i uwsgi_config.ini

重载配置和代码

uwsgi --reload master.pid

本文作者:MyTech::Author

本文链接: https://mytech.pages.dev/2021/07/17/echo_258/