前言
从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