设置 Gunicorn 和 Supervisor
当你使用 flask run
运行服务器时,正在使用的是 Flask 附带的 Web 服务器。 该服务器在开发过程中非常有用,但它不适合用于生产服务器,因为它不考虑性能和稳健性。 取而代之,我决定使用 gunicorn ,它是一个纯粹的 Python Web 服务器,但与 Flask 不同,它是一个支持高并发的强大生产服务器,同时它也非常容易使用。
要在 gunicorn 下启动 Microblog,你可以使用以下命令:
(venv) $ gunicorn -b localhost:8000 -w 4 microblog:app
-b
选项告诉 gunicorn 在哪里监听请求,我在 8000 端口上监听了内部网络接口。 在没有外部访问的情况下运行 Python Web 应用程序通常是一个好主意,然后还需要一个非常快速的 Web 服务器,它可以优化来自客户端的所有静态文件的请求。 这个快速的 Web 服务器将直接提供静态文件,并将用于应用程序的任何请求转发到内部服务器。 我将在下一节中向你展示如何将 nginx 设置为面向公众的服务器。
-w
选项配置 gunicorn 将运行多少 worker 。 拥有四个进程可以让应用程序同时处理多达四个客户端,这对于 Web 应用程序通常足以处理大量客户端请求,因为并非所有客户端都在不断请求内容。 根据服务器的 RAM 大小,你可能需要调整 worker 数量,以免内存不足。
microblog:app
参数告诉 gunicorn 如何加载应用程序实例。 冒号前的名称是包含应用程序的模块,冒号后面的名称是此应用程序的名称。
虽然 gunicorn 的设置非常简单,但从命令行运行服务器在生产服务器实际上不是一个恰当的方案。 我想要做的是让服务器在后台运行,并持续监视,因为如果由于某种原因导致服务器崩溃并退出,我想确保新的服务器自动启动以取代它。 而且我还想确保如果机器重新启动,服务器在启动时自动运行,而无需人工登录和启动。 我将使用上面安装的 supervisor 包来执行此操作。
Supervisor 使用配置文件定义它要监视什么程序以及如何在必要时重新启动它们。 配置文件必须存储在 /etc/supervisor/conf.d 中。 这是 Microblog 的配置文件,我将其称为 microblog.conf :
/etc/supervisor/conf.d/microblog.conf :Supervisor 配置。
[program:microblog]
command=/home/ubuntu/microblog/venv/bin/gunicorn -b localhost:8000 -w 4 microblog:app
directory=/home/ubuntu/microblog
user=ubuntu
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
command
, directory
和 user
设置告诉 supervisor 如何运行应用程序。 如果计算机启动或崩溃, autostart
和 autorestart
设置会使 microblog 自动重新启动。 stopasgroup
和 killasgroup
选项确保当 supervisor 需要停止应用程序来重新启动它时,它仍然会调度成顶级 gunicorn 进程的子进程。
编写此配置文件后,必须重载 supervisor 服务的配置才能导入它:
$ sudo supervisorctl reload
像这样,这个 gunicorn web 服务器就已经启动和运行,并处于监控之中!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论