转载

使用 Makefile 管理 uwsgi + Django 服务

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 的路径。

很多参数可以通过命令行设置了,特别是: hostnameport ,这样就增强了管理 uwsgi 进程的自由度,特别是在一台服务器上要运行多个 django 服务,端口容易冲突的时候。比如默认的 8000 端口被占用了,我可以在命令行设置其他端口:

$ make start-uwsgi port=8090 

而且, 使用 Makefile 也可以更好的区分开发环境和产品环境 ,当然其他构件工具也能做到相同的效果。

另外,采用 master 模式启动 uwsgi,可以在命令行快速关闭、重启 uwsgi 进程,方便管理。

启动 uwsgi:

$ make start-uwsgi     # 启动 uwsgi $ make restart-uwsgi   # 重启 uwsgi $ make stop-uwsgi      # 关闭 
正文到此结束
Loading...