在 HTTP 服务器中运行 Heat API 服务

自 Liberty 版本发布以来,Heat 已经打包了一组 wsgi 脚本入口点,使用户能够使用真正的 Web 服务器(如 Apache HTTP Server (httpd))运行 api 服务。

有几种部署模式。本文档展示了一些使用 httpd 部署 api 服务的常见方法。

mod-wsgi

这种部署方法自 Liberty 版本发布以来就可用。

httpd/files 目录包含可以更改和复制到 httpd 服务器中适当位置的示例文件。

在 Debian/Ubuntu 系统上,它是

/etc/apache2/sites-available/heat-api.conf
/etc/apache2/sites-available/heat-api-cfn.conf

在基于 Red Hat 的系统上,它是

/etc/httpd/conf.d/uwsgi-heat-api.conf
/etc/httpd/conf.d/uwsgi-heat-api-cfn.conf

uwsgi

在这种部署方法中,我们使用 uwsgi 作为 Web 服务器,绑定到一个随机的本地端口。然后,我们使用 mod_proxy 配置 apache,将指定端点上的所有传入请求转发到该本地 Web 服务器。这样做的好处是让 apache 管理所有入站 http 连接,并让 uwsgi 管理运行 python 代码。这也意味着当我们更改 Heat api 代码或配置时,我们不需要重新启动整个 apache(可能还在运行其他服务),而只需要重新启动本地 uwsgi 守护进程。

httpd/files 目录包含用于配置 httpd 在这种配置下使用 uwsgi 运行 Heat api 服务的示例文件。要使用示例配置,只需将 uwsgi-heat-api.confuwsgi-heat-api-cfn.conf 复制到 Web 服务器的适当位置。

在 Debian/Ubuntu 系统上,它是

/etc/apache2/sites-available/uwsgi-heat-api.conf
/etc/apache2/sites-available/uwsgi-heat-api-cfn.conf

在基于 Red Hat 的系统上,它是

/etc/httpd/conf.d/uwsgi-heat-api.conf
/etc/httpd/conf.d/uwsgi-heat-api-cfn.conf

通过运行 sudo a2enmod proxy 来启用 mod_proxy

然后在 Ubuntu/Debian 系统上,通过从 sites-available 中的文件创建到 sites-enabled 的符号链接来启用站点。(在基于 Red Hat 的系统上不需要这样做)

ln -s /etc/apache2/sites-available/uwsgi-heat-api.conf /etc/apache2/sites-enabled
ln -s /etc/apache2/sites-available/uwsgi-heat-api-cfn.conf /etc/apache2/sites-enabled

启动或重新启动 httpd 以获取新的配置。

现在我们需要配置并启动 uwsgi 服务。将以下文件复制到 /etc/heat

heat-api-uwsgi.ini
heat-api-cfn-uwsgi.ini

更新文件以匹配您的系统配置(例如,您需要设置进程和线程的数量)。

安装 uwsgi 并使用 uwsgi 启动 heat-api 服务器

sudo pip install uwsgi
uwsgi --ini /etc/heat/heat-api-uwsgi.ini
uwsgi --ini /etc/heat/heat-api-cfn-uwsgi.ini

注意

在示例配置中,使用了一些随机端口,但这并不重要,只是随机选择的数字。这不是对本地 uwsgi 守护进程使用的端口的约定。

mod_proxy_uwsgi

与运行 uwsgi 作为侦听本地端口的 Web 服务器,然后使用 mod_proxy 通过 Apache HTTP 代理所有传入请求不同,使用 Apache httpd 部署 uwsgi 的通常推荐方法是使用 mod_proxy_uwsgi 并为 uwsgi 设置一个本地套接字文件来侦听。Apache 将使用 uwsgi 协议通过此本地套接字文件发送请求。

heat 上游 gate 中的 dsvm 作业使用这种部署方法。

有关使用 mod_proxy_uwsgi 的更多详细信息,请参阅 官方文档