【问题标题】:Phusion Passenger: Error starting web application - Deploying Probot app (NodeJS) with Plesk nginxPhusion Passenger:启动 Web 应用程序时出错 - 使用 Plesk nginx 部署 Probot 应用程序 (NodeJS)
【发布时间】:2020-09-17 22:17:38
【问题描述】:

我正在尝试将GitHub Probot App(NodeJS 应用程序)部署到运行 Plesk 18.0.27 U1 和 NodeJS 扩展 1.3.6-117 的网络服务器。在我的本地机器上运行 probot 应用程序时,该应用程序可以正常启动并且可以通过 localhost 访问。

Plesk 显然使用 Phusion Passenger application server 来服务 NodeJS 应用程序。
访问已部署的网站时,出现以下错误:

Screenshot: Passenger problem location

/var/log/nginx/error.log:

[ E 2020-05-30 10:06:31.7393 21506/Th age/Cor/App/Implementation.cpp:221 ]: Could not spawn process for application /var/www/vhosts/example.org/node_root: A timeout occurred while spawning an application process.
  Error ID: 5f02dec5
  Error details saved to: /tmp/passenger-error-y6AeCv.html

[ E 2020-05-30 10:06:31.7466 21506/T5 age/Cor/Con/CheckoutSession.cpp:276 ]: [Client 1-2] Cannot checkout session because a spawning error occurred. The identifier of the error is 5f02dec5. Please see earlier logs for details about the error.


到目前为止我测试过的东西

  • 我增加了在 nginx passenger_start_timeout 300; 中启动应用程序的超时时间
  • 我为此网站在 Plesk 中禁用了 phpproxy_mode(Nginx 代理默认向 Apache 请求,但乘客仅在 nginx 上运行)
  • 我编写了一个自定义启动脚本来禁用乘客自动安装并将节点 dotenv 文件中的网络服务器端口设置为PORT="passenger"
#!/usr/bin/env node

const { Probot } = require('Probot')

// @ts-ignore
if (typeof(PhusionPassenger) !== 'undefined') {
    //@ts-ignore
    PhusionPassenger.configure({ autoInstall: false });
}

Probot.run(process.argv)

开始问题

我的应用程序失败还是乘客无法绑定应用程序的端口?

是否有更详细的日志或启用详细输出的选项?

提前致谢!

【问题讨论】:

    标签: node.js nginx passenger plesk probot


    【解决方案1】:

    经过长时间的研究,我自己弄清楚了。发布我的解决方案,以防有人遇到同样的问题。

    1. 设置passenger log level。您可以将passenger_log_level 7 放入您的nginx 配置/etc/nginx/conf.d/phusion-passenger.conf(对于Plesk)

    2. 我将应用程序作为独立的乘客服务器启动,并获得了实际的应用程序标准输出输出。示例:cd 在您的节点应用程序根文件夹中并运行 passenger start --startup-file lib/startup.js --nodejs /opt/plesk/node/12/bin/node --log-level 3 --app-type node

    此时我看到在我上面提到的启动脚本中找不到模块Probot。所以我更深入地挖掘了一个 probot 应用程序是如何实际启动的,并偶然发现了probot run 命令。默认情况下,probot 应用程序不会使用node ./lib/index.js 而是probot run ./lib/index.js 运行。

    1. 使用自定义passenger app start command。我添加了 nginx 选项 passenger_app_start_command "/opt/plesk/node/12/bin/npm start"; 来设置自定义启动命令以使用 package.json 启动脚本中定义的 probot run 命令,而不是来自乘客的默认 node ./lib/startup.js

    我学到了很多关于这些工具的知识,希望这可以节省一些人的周末:D

    【讨论】:

      猜你喜欢
      • 2021-05-12
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 2018-11-05
      • 2019-04-12
      • 1970-01-01
      • 2012-05-30
      • 2022-01-16
      相关资源
      最近更新 更多