为 python-waitress 构建一个 Upstart 文件
Posted
技术标签:
【中文标题】为 python-waitress 构建一个 Upstart 文件【英文标题】:Constructing an Upstart file for python-waitress 【发布时间】:2016-03-17 21:55:18 【问题描述】:我有一个运行 gunicorn 的 Django 应用程序 - 我现在想用 waitress 替换它。很简单,我通过apt-get install python-waitress
安装了女服务员,并通过waitress-serve --port=8080 myproject.wsgi:application
运行它。
现在我想将其设置为通过 Upstart 文件运行(我在 Ubuntu 上)。我希望它在正常的运行级别 2、3、4 和 5 上运行,并告诉它在任何其他运行级别(例如系统重新启动、关闭或单用户时)停止。我还希望 Upstart 在失败时自动重新启动服务。最后但同样重要的是,我需要 waitress
在端口 80 上运行,而不是端口 8080。
我的问题是:如何构建我的 Upstart 文件以反映这些要求?以及任何其他有助于添加的内容?请指教;这是我的主要生产服务器。
其次,就waitress
本身而言,除了能够与SSL一起使用之外,将反向代理(例如nginx
)与waitress
一起使用有什么好处吗?我的应用程序是一个阅读量大的 Django Web 应用程序,用户可以在其中聚集在一起聊天。
【问题讨论】:
【参考方案1】:我建议不要编写自己的新贵脚本,而是研究其他知名且经过实战考验的解决方案。一种流行的解决方案是supervisor。它是纯 Python 并且很容易安装和配置。如果您使用apt-get
安装它,它会附带所有必要的脚本,以便在 Ubuntu 本身重新启动等时运行它(尽管很可能您不会安装最新版本的主管)。安装主管后,您需要做的就是为您的 Web 服务器进程添加一个小配置。然后,当您启动主管时,它将管理您的 Web 服务器进程。这是一个示例主管配置:
[program:project_name]
command=/path/to/virtualenv/bin/waitress-serve --port=8080 myproject.wsgi:application
directory=/path/to/django/project
autostart=true
autorestart=true
redirect_stderr=True
user=www
请注意,supervisor 可以管理多个进程,因此如果您有任何其他需要为您的 webapp 运行的进程,您也可以将它们添加到 supervisor。
至于使用 nginx 的优势,还有很多关于该主题的其他 *** 问题,因此我建议您查看这些问题,而不是在这里背诵类似的想法。这是我找到的一对:
Standalone Python web server and/or nginx WSGI vs uWSGi with Nginx【讨论】:
三木感谢主管的帖子。关于 nginx,作为女服务员的反向代理,我问了这个问题,因为(i)我读了这篇文章,声称女服务员是一个足够好的生产级独立服务器:blog.etianen.com/blog/2014/01/19/gunicorn-heroku-django,以及(ii)有人提到使用 nginx 的唯一原因与女服务员是因为 https 支持:***.com/questions/19462959/… 我自己没用过女服务员,但我想 nginx 在处理静态文件和其他 nginx 做得很好的事情(如负载平衡等)方面会有更高的性能。此外,它还有一些用于防止 DDOS 等的基本工具因为它可以更有效地管理内存。但归根结底,我认为你应该使用适合你的任何东西。我会试试 nginx 是的,我听取了您的建议,并深入研究了 nginx + gunicorn 的设置。一切正常,除了当我尝试访问一些数据库记录时,我得到一个 invalid input syntax for type inet 错误。如果您能提供帮助,请快速浏览一下我刚刚打开的单独问题:***.com/questions/34238623/…以上是关于为 python-waitress 构建一个 Upstart 文件的主要内容,如果未能解决你的问题,请参考以下文章
在 UIButton down/up 上协调两个 UIView 动画
Android Gradle 插件自定义 Gradle 任务 ⑫ ( Gradle 任务的输出和输出 | @Optional 注解 | UP-TO-DATE 避免重复执行任务 )