uwsgi 经常用来部署 django 服务,性能好。但是最大的问题是配置比较复杂,需要 port、wsgi-file、log-dir、工作目录等多个参数,每次配置新的项目的时候都得重新查文档。uwsgi 虽然支持使用 ini 等配置文件配置,但是感觉还是不够给力。有一些和 django 相关的参数无法快速配置好,比如 wsgi-file 的路径,日志输出路径等等。特别是在管理多个项目的时候。 Makefile 作为构建工具,可以将一些常用的 shell 命令放到 Makefile 当中维护,也减少输入命令的长度。
为了解决 uwsgi + django 项目配置复杂和重复操作的问题。我写了一个 Makefile 文件:
host:=0.0.0.0 port:=8000 debug: ./manage.py runserver $(host):$(port) start-uwsgi: uwsgi --socket $(host):$(port) / --chdir $(shell pwd) / --wsgi-file $(shell basename `pwd`)/wsgi.py / --master / --process 4 / --daemonize $(shell pwd)/logs/uwsgi.log / --pidfile $(shell pwd)/uwsgi.pid stop-uwsgi: uwsgi --stop uwsgi.pid reload-uwsgi: uwsgi --reload uwsgi.pid .PHONY: debug / reload-uwsgi / start-uwsgi / stop-uwsgi
这个 Makefile 文件为我解决几个问题:
首先, 采用命令参数的方式配置 uwsgi,而不使用 .ini 文件。 不使用配置文件,使用命令行的好处是一些关于路径的配置(日志啊、工作目录啊、pid文件啊),方便设置默认路径,不需要单独配置。使用 ini 文件的话,每次都要配置这些路径的根目录很是烦躁。最典型的是 wsgi-file
的配置,django 项目里面都一个和 django 项目同名的文件夹, wsgi.py
文件会放置在这个同名文件夹中,根据这个特点可以很方便的使用 Makefile 配置 wsgi-file
的路径。
很多参数可以通过命令行设置了,特别是: hostname
和 port
,这样就增强了管理 uwsgi 进程的自由度,特别是在一台服务器上要运行多个 django 服务,端口容易冲突的时候。比如默认的 8000
端口被占用了,我可以在命令行设置其他端口:
$ make start-uwsgi port=8090
而且, 使用 Makefile 也可以更好的区分开发环境和产品环境 ,当然其他构件工具也能做到相同的效果。
另外,采用 master
模式启动 uwsgi,可以在命令行快速关闭、重启 uwsgi 进程,方便管理。
启动 uwsgi:
$ make start-uwsgi # 启动 uwsgi $ make restart-uwsgi # 重启 uwsgi $ make stop-uwsgi # 关闭