uwsgi + django 通过 Nginx - uwsgi 设置/启动配置?

6 投票
3 回答
3201 浏览
提问于 2025-04-16 00:55

我打算用uwsgi和nginx来运行我的Django应用,有人能分享一下启动uwsgi进程的最佳方法吗?有没有人有调试uwsgi的经验?

3 个回答

0

我会选择用 supervisord 来管理程序的启动和停止。

2

这是我在fabfile.py文件中使用的函数(如果你还没了解过Python Fabric,可以去看看):

def start_uwsgi():
    with cd(env.server.uwsgi):
        if(exists('server.pid')):
            stop_uwsgi()
            run('sleep 1')
        run('source venv/bin/activate;uwsgi --ini uwsgi.ini;'))

def stop_uwsgi():
    with cd(env.server.uwsgi):
        if(exists('server.pid')):
            run('source venv/bin/activate;uwsgi --stop server.pid;'))

在我的uwsgi.ini文件中,我指定了:

[uwsgi]
socket = :{{your_port}}
master = true
vhost = true
no-site = true
processes = 1
enable-threads = true
pidfile = server.pid
daemonize = server.log
auto-procname = true
procname-prefix = servername_

对我来说,主要的注意事项有:

  • 如果你想在关闭终端或SSH会话后让uwsgi服务器继续运行,就要使用daemonise选项。
  • 使用vhost可以让你在同一个uwsgi实例下运行多个网站,这对于像我这样内存有限的情况非常好,尤其是在使用非常棒的webfaction主机时。
  • pidfile用于跟踪当前的实例,这样你就可以通过uwsgi --stop pidfile和uwsgi --start pidfile来控制它。
  • procname和procname-prefix/append可以给你的进程起个好名字,这样你就能通过ps -u username | grep some_string轻松找到它。
4

在OSX上使用launchd

在各种Unix系统上使用Upstart/init。

uwsgi也有自己的进程管理工具,所以你也可以直接运行它。

调优:

查看邮件列表,获取关于你具体需求的建议。uwsgi非常棒,它是一个完整的部署解决方案。

0.8.40以上版本的Nginx会默认构建uwsgi的绑定,先构建Nginx,再构建uwsgi,你就成功了。

撰写回答