尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

uWSGI Emperor:一条命令管理几百个应用实例的秘密

uWSGI Emperor:一条命令管理几百个应用实例的秘密 uWSGI Emperor一条命令管理几百个应用实例的秘密【免费下载链接】uwsgi-docsOfficial uWSGI docs, examples, tutorials, tips and tricks项目地址: https://gitcode.com/gh_mirrors/uw/uwsgi-docsuWSGI Emperor皇帝模式是 uWSGI 内置的多应用部署机制一个特殊的 uWSGI 实例Emperor持续监控配置来源自动为每个应用vassal附庸启动、停止或重启独立实例让单台服务器轻松托管数百个 Web 应用。 什么是 uWSGI Emperor在传统部署中每上一个新应用就要手动写启动脚本、维护进程、处理崩溃重启。而 Emperor 模式把这件事自动化了Emperor皇帝一个特殊的 uWSGI 实例负责治理其他实例Vassal附庸由 Emperor 管理的具体应用实例Imperial Monitor帝国监控器Emperor 感知事件变化的插件它的核心行为极其简单直观事件Emperor 的反应检测到新的配置文件自动启动一个新实例配置文件被修改自动重载对应应用配置文件被删除自动停止对应应用某个附庸崩溃自动重新拉起Emperor 死亡所有附庸一并停止相关机制完整说明见 Emperor.rst官方选项定义见 Options.rst。⚡ 快速上手3 步跑通第一个附庸第 1 步为应用准备一个标准 uWSGI 配置文件支持.ini、.xml、.yml、.json等格式[uwsgi] socket 127.0.0.1:3034 master 1 module yourapp:app第 2 步把它放进一个目录例如/etc/uwsgi/vassals/。第 3 步启动 Emperoruwsgi --emperor /etc/uwsgi/vassals就这样一条命令。Emperor 内置的dir://监控器会扫描该目录发现配置文件就自动拉起实例——这就是一条命令管理几百个应用的真相。 Imperial Monitors配置来源不限于目录Emperor 的强大之处在于可扩展的监控器体系。核心内置了dir://扫描目录和glob://匹配 shell 模式此外官方还提供了一批插件pg://— 监控 PostgreSQL 数据表增删改数据库行即对应增删改实例mongodb://— 监控 MongoDB 集合配置存在文档里amqp://— 监听 RabbitMQ 等消息队列实现跨多台服务器同步部署与重载zmq://— 通过 ZeroMQ 接收touch/destroy命令这意味着你可以用数据库当应用注册中心控制后台往表里插一行配置新应用就自动上线删掉一行应用就自动下线。完整插件清单见 ImperialMonitors.rst。 多应用部署的实用技巧用魔法变量 软链接实现一份模板百个应用如果所有应用结构相同比如都是 Django 应用只需写一份骨架配置如app.skel用%n实例名魔法变量填充差异部分然后为每个应用建一个指向模板的符号链接并改名为app1.ini、app2.ini……再配合--emperor-nofollow选项即可对每个附庸单独执行touch --no-dereference精准重载。用 vassal-set 统一向所有附庸注入参数1.9.19 起可用--vassal-set给每个附庸追加全局选项例如统一限制进程数[uwsgi] emperor /etc/uwsgi/vassals vassal-set processes8也可以通过环境变量UWSGI_VASSAL_xxx或--vassals-include自动包含一个公共配置文件避免在每个应用里重复写socket等选项。按需附庸没人访问就不启动借鉴 xinetd 的思路Emperor 支持 socket 激活配置了socket的附庸启动时并不真正运行而是由 Emperor 先监听 socket第一次连接进来才拉起实例。再配合--idle/--die-on-idle选项闲置应用可以彻底休眠并释放内存——托管大量低频应用时这是节省资源的关键。详见 OnDemandVassals.rst。️ 安全与稳定Tyrant 模式、命名空间与黑名单Tyrant 模式安全的共享托管Emperor 通常以 root 运行按配置降权运行各附庸。但在多用户共享服务器上你不能信任用户自己填写的uid/gid。加上emperor-tyrant选项后Emperor 会依据配置文件本身的所有者决定运行身份杜绝越权。配合 Linux Capabilities还能让 Emperor 以非 root 用户运行、仅保留最小权限。Linux 命名空间原生无容器隔离emperor-use-clone fs,net,ipc,pid,uts一行配置即可让每个附庸跑在独立的文件系统、网络、主机名、进程命名空间中——相当于内建的轻量容器能力。官方曾以此构建大规模安全托管服务实战方案见 articles/MassiveHostingWithEmperorAndNamespaces.rst。节流、黑名单与心跳节流Throttling同一秒内启动过多附庸时Emperor 自动加延迟防止fork 炸弹黑名单反复崩溃的坏附庸会被拉黑并逐次加重惩罚向 Emperor 发送SIGURG可清空黑名单心跳启用--heartbeat的附庸会定期上报心跳超时未上报即判定挂起并自动重载让假死应用自动恢复 Emperor 信号速查表信号效果SIGUSR1在日志中打印所有附庸状态SIGTERM/SIGINT/SIGQUIT触发 Ragnarok停止所有附庸SIGHUP重载所有附庸SIGURG清空附庸黑名单 新手须知避坑清单Emperor 一般不要加--master也不要在服务器上频繁重启它——重启会重载所有附庸影响面太大非 uWSGI 附庸绝不要 daemonize否则会失去与 Emperor 的连接Emperor 启动时会chdir()到附庸目录各实例默认从该目录启动自定义应用可通过 Emperor 协议环境变量UWSGI_EMPEROR_FD提供文件描述符与 Emperor 通信协议说明见 EmperorProtocol.rst建议 Emperor 在开机时启动并长期运行只在升级 uWSGI 时才重启它掌握 Emperor 后部署一个应用就简化为往目录里放一个配置文件——这就是 uWSGI 能以极少人力维护成百上千个应用实例的秘密。【免费下载链接】uwsgi-docsOfficial uWSGI docs, examples, tutorials, tips and tricks项目地址: https://gitcode.com/gh_mirrors/uw/uwsgi-docs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表