3

我们有各种使用 PHP 和 Java 开发的应用程序。我们正在使用 apache 和 tomcat。因此,当我们重新启动系统时,一旦 apache 启动,PHP 应用程序就会启动,而一旦 tomcat 启动,Java 应用程序就会启动。我不确定在 Play 框架中处理这个问题的最佳方法是什么(假设我们有 10 多个 Play 应用程序)。当然,单独启动每个应用程序并不是正确的解决方案。我们可以编写一些启动脚本,在重启后启动每个应用程序。但我很想知道使用 ROR 和 Django 等其他类似框架的开发人员如何处理这种情况。有什么工具可以做到这一点吗?任何可用于 Play 应用程序的工具?

4

2 回答 2

4

部署 WAR 包有一些缺点,我无法讨论性能,但正如您在WAR 插件的兼容性矩阵中看到的那样,仍然有一些不受支持的功能。所以 WAR 应该被认为是最后的选择(如果没有其他可用的)

目前我有相同的设置,通过 Apache + 独立播放应用程序工作的 PHP 站点。当然,所有这些都需要在默认 Web 端口 (80) 上的自定义域/子域上可用。

一般来说:我们在专用 IP 上部署应用程序,该 IP 在前端由nginx服务器控制,用于代理目的和负载平衡。多亏了这一点,我们甚至可以在服务器上的开发模式下启动应用程序,并且它将在其域中可用。当然,如果你没有额外的 IP,你也可以使用 Apache 作为代理,但据我所知nginx,或者lighthttpd只是更快地完成这项任务。

您可以在设置前端服务器文档中找到更多详细信息。

现在,使用一些简单的 bash 脚本和 git 钩子,您可以在远程机器上准备和部署您的应用程序,而无需重新发送整个包(对于小型应用程序,其大小约为 50mb)。就像 Heroku 部署一样,您应该只将应用程序的代码推送到您的服务器,然后使用钩子和脚本应该准备dist包(更多关于 dist)并在某个定义的端口上运行它,这将通过前面提到的代理可用。

当然,通过 Play 的控制台启动应用程序是在生产环境中不必要的内存浪费。

有关于如何在服务器启动时启动 Play 应用程序的示例,因此您可能会根据您的机器找到一些提示。

据我所知,这是目前最理想的情况

于 2012-09-16T18:14:34.680 回答
1

如果您在 Ubuntu 上托管,则最好为每个应用程序插入一个 init 脚本(这是一个不错的开始),这样他们就可以启动机器。

或者https://github.com/dlecan/play2-war-plugin看起来它可以让您将 Play 2 应用程序发送到您可以在 Tomcat 中部署的 WAR 文件:未计划在 Play 2 系列中对 WAR 部署的核心支持显示到 2.1,所以你可能无法让它工作。Play 1 原生支持它:去吧

play war myapp -o myapp.war
于 2012-09-16T17:16:33.223 回答