【问题标题】:Deploy Nodejs app on google kubernetes engine using Docker and PM2使用 Docker 和 PM2 在 google kubernetes 引擎上部署 Nodejs 应用程序
【发布时间】:2019-10-26 14:56:44
【问题描述】:

我有一个 Nodejs 应用程序并使用 Babel 来启用 ES6 功能。我可以在本地系统上以开发模式运行它。我想使用 PM2 将它部署到 Kubernetes。

当我尝试使用 process.json 与 PM2 一起运行它时出现错误。

/bin/bash:1
15:59:52 23|app   | (function (exports, require, module, __filename, __dirname) { ����
15:59:52 23|app   |                                                               ^
15:59:52 23|app   | SyntaxError: Invalid or unexpected token
15:59:52 23|app   |     at new Script (vm.js:85:7)
15:59:52 23|app   |     at createScript (vm.js:266:10)
15:59:52 23|app   |     at Object.runInThisContext (vm.js:314:10)
15:59:52 23|app   |     at Module._compile (internal/modules/cjs/loader.js:698:28)
15:59:52 23|app   |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:749:10)
15:59:52 23|app   |     at Module.load (internal/modules/cjs/loader.js:630:32)
15:59:52 23|app   |     at tryModuleLoad (internal/modules/cjs/loader.js:570:12)
15:59:52 23|app   |     at Function.Module._load (internal/modules/cjs/loader.js:562:3)

这是我的 process.json

{
    "apps": [
        {
            "name": "app",
            "script": "./dist/bin/www.js --env production",
            "exec_mode": "cluster",
            "instances": 0,
            "max_restarts": 20,
      "env": {
          "NODE_ENV": "production"
      },
      "env_production": {
          "NODE_ENV": "production"
      }
        }
    ]
}

当我运行此命令 pm2 ./dist/bin/www.js --env production 时,它工作正常,但是当我尝试使用 process.json 运行它时,如 pm2 start process.json --no-daemon 它会引发上述错误。

我正在本地系统上尝试它,但是当我使用带有 kubectl 的 Dockerfile 部署到 gcloud 时也会发生这种情况

谁能指出我应该尝试寻找的正确方向。

【问题讨论】:

  • 我曾多次遇到类似的问题,每次都与我的构建过程设置不正确有关,即并非所有文件都被转译。我也遇到了我的配置文件的导入不正确的问题,这仅在构建它们时才引起问题。我会检查以确保所有内容都正确复制到您的 dist 文件夹中。我会检查实际构建的文件,看看它们发生了什么。很可能您有一个包含非转译文件的转译文件。所以筛选构建的文件,看看你在那里做了什么。
  • @Rami 我会再看一遍,但我构建的文件工作得很好。我试过运行node ./dist/bin/www.js,在使用 Babel 完成构建后输出文件,这工作得很好。你不认为如果这是构建的问题,那么这应该是一个错误吗?
  • 好吧,您的应用程序中可能有一些代码可以动态执行操作。例如,您可以对生产环境进行代码检查,如果真的找到某个文件并且该文件在本地,但是当您构建并推送到服务器时,该文件不存在或只有 TS 版本存在。
  • 尝试在本地构建和运行,但在运行之前删除您的应用文件夹或其他内容,看看会发生什么。尝试这样的事情,直到你可以重新创建它,也尝试在本地使用 Docker 和 PM2 重新创建它
  • @Rami 感谢您的回复。我没有使用 TS,我将 Babel 用于 ES6 功能。我将所有 JS 代码都放在 /src 中,然后将整个目录转换为 /dist。我在本地使用 PM2 运行它,它抛出了上述错误。我没有尝试过 Docker,因为我不擅长云计算。

标签: node.js docker kubernetes gcloud pm2


【解决方案1】:

试试这个 process.json:

{
    "apps": [
        {
            "name": "app",
            "script": "./dist/bin/www.js",
            "exec_mode": "cluster",
            "instances": 0,
            "max_restarts": 20,
      "env": {
          "NODE_ENV": "development"
      },
      "env_production": {
          "NODE_ENV": "production"
      }
        }
    ]
}

命令行界面:

pm2 start process.json --no-daemon --env production

【讨论】:

猜你喜欢
  • 2018-08-27
  • 2019-01-20
  • 2020-04-26
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多