简短答案:
编译的.node必须匹配要部署到的特定体系结构。在docker映像中进行编译然后部署该docker映像是实现此目的的一种方法,但是它增加了复杂性,尤其是围绕设置,使用和管理docker的额外步骤。使用heroku的build
脚本为节点执行此操作的方法比较简单。 https://devcenter.heroku.com/changelog-items/1557和https://devcenter.heroku.com/articles/nodejs-support#customizing-the-build-process
长答案:
以下是有关什么是Heroku的“ dyno”的详细信息,该dyno在后台运行Heroku应用。 https://stackoverflow.com/a/21463495和https://devcenter.heroku.com/articles/how-heroku-works#building-applications
它们用于新应用程序的堆栈列在https://devcenter.heroku.com/categories/stacks
当前为:
_________________________________________________________________
|Stack Version | Base Technology | Supported through |
|Heroku-18 (default) | Ubuntu 18.04 | April 2023 |
|Heroku-16 | Ubuntu 16.04 | April 2021 Learn more |
|Container | Docker | Developer-maintained* |
_________________________________________________________________
堆栈具有https://github.com/heroku/heroku-buildpack-nodejs中所述的节点buildpack,用于构建您添加到heroku的节点应用程序。
您可以按照https://devcenter.heroku.com/articles/nodejs-support#customizing-the-build-process中的说明自定义构建过程
和https://devcenter.heroku.com/changelog-items/1557
这意味着您可以添加一个构建脚本,该脚本将在每次将应用程序添加到heroku时运行。
"scripts": {
"start": "node index.js","build": "build steps here to compile your dll on heroku using node-gyp or npm build or npm install"
}
,或者您可以使用heroku-prebuild或heroku-postbuild脚本。
"scripts": {
"heroku-prebuild": "echo This runs before Heroku installs your dependencies.","heroku-postbuild": "echo This runs afterwards."
}
https://nodejs.org/api/addons.html#addons_building更详细地描述了如何构建C ++插件。
免责声明:我不是Heroku的雇员,也不是最近使用过Heroku的公司,所以我只按照可公开获取的文档中的描述进行操作。
牢记您可能要代替docker使用的解释,这是列出的问题的答案:
- 是否会在Docker上编译C ++和dll(我不知道如何在Docker中进行详细构建)会创建可在heroku上执行的节点?
是的。 Heroku直接支持Docker容器,或者您可以在与Heroku使用的匹配的docker映像上进行编译(例如Ubuntu 18.04)并使用该编译后的代码。
- 是否有必要同时对后端和node-addon-api进行泊坞化以确保它们在同一操作系统上运行?
如果您使用的是Docker容器,则后端和node-addon-api都需要在同一docker映像中运行。如果仅在docker上编译,则编译后的c ++将需要匹配最终在哪个OS节点上运行。
- 似乎使用docker进行部署使IaaS更加容易,这使我能够逃避PaaS(heroku)的使用,但是我没有任何经验。
这将是摆脱heroku的一种方法吗? (我不想与
服务器更多,因为我现在有足够的工作...)
是的。还有其他提供程序的docker容器服务提供商可以运行节点服务器。还有其他带有虚拟映像的云提供商,它们可以运行节点服务器而无需进行dockerize。
本文链接:https://www.f2er.com/3161201.html