nginx-uwsgi-supervisord
因为每次新建Python web project都需要搭建这些东西,也很难记住,所以每次都搜索,索性在这里记录一下,web端使用Django。
安装
nginx 使用操作系统包管理器安装,比如:apt-get,yum
uwsgi和supervisord 使用pip安装就可以
uwsgi配置与运行
配置uwsgi
配置实例
[uwsgi]
# ln -s $project /etc/project
chdir = /etc/megas/web
# uwsgi.py的目录
wsgi-file = /etc/megas/web/web/wsgi.py
master = true
# 进程数
workers = 1
# socket文件位置,和nginx通讯的文件
socket = /var/megas/web.sock
# socket文件的权限,需要保证nginx有权限,666不是一个好的用法
chmod-socket = 666
pidfile = /var/megas/megas_web.pid
vacuum = true
uwsgi.py示例(Django)
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "web.settings")
application = get_wsgi_application()
运行uwsgi
配置完之后,执行 uwsgi --ini uwsgi.ini
运行
如果没有保存,说明配置正确。
supervisord
配置supervisord
安装完supervisord之后,调用echo_supervisord_conf > /etc/supervisord.conf
把sample配置文件写到supervisord得默认配置文件/etc/supervisord.conf中
vi /etc/supervisord.conf
文件末尾有
[include]
files = relative/path/*.ini
把自己项目的ini include进去,比如files=path/*.ini
supervisord配置示例(path/web.ini)
[program:web]
command = /usr/bin/uwsgi --ini /etc/megas/web/uwsgi.ini
autostart = true
autorestart = true
redirect_stderr = true
stdout_logfile = /var/log/web.log
stopsignal = QUIT
运行sueprvisord
执行supervisord
运行,没有报错,说明配置正确。
执行supervisorctl
可以看到进程正在运行。
重启所有进程supervisorctl reload
nginx
location / {
include uwsgi_params;
uwsgi_pass unix:/var/megas/web.sock;
uwsgi_read_timeout 2;
}
配置/的路由的uwsgi_pass到uwsgi进程的sock,注意需要有权限。
最后
访问http://host/看有没有问题