Docker 集成
使用容器?我们支持你。从今天开始使用pm2-runtime
,它是在生产环境中充分利用 Node.js
的完美伴侣。
pm2-runtime
的目标是将您的应用程序包装到适当的 Node.js 生产环境中。它解决了在容器内运行 Node.js 应用程序时遇到的主要问题,例如:
- 高应用程序可靠性的第二个进程回退
- 流程控制
- 自动应用程序监控,使其始终保持理智和高性能
- 自动源映射发现和解析支持
更进一步,使用 PM2 作为容器和应用程序之间的层带来了 PM2 强大的功能,如应用程序声明文件、可定制的日志系统和其他强大的功能来管理您在生产环境中的 Node.js 应用程序。
在容器内使用 PM2
在您的 Dockerfile 中添加此行以安装 PM2:
RUN npm install pm2 -g
然后将node
二进制文件替换为pm2-runtime
CMD ["node", "app.js"]
到:
CMD ["pm2-runtime", "app.js"]
你现在已经准备好了!您的 Node.js 应用程序现已包装到适当的 Node.js 生产环境中。
启动配置文件
您可以将其声明到配置文件(或进程文件)中并设置一些配置变量,例如启用集群模式,而不是使用 PM2 运行原始 Node.js 应用程序。
让我们创建一个包含以下内容的 ecosystem.config.js
文件:
module.exports = [{
script: 'app.js',
name: 'app',
exec_mode: 'cluster',
instances: 2
}, {
script: 'worker.js',
name: 'worker'
}]
此处列出了所有可用的选项。
然后你可以用这个替换CMD
指令:
CMD ["pm2-runtime", "process.yml"]
要在其自己的 Docker 中拆分每个进程,您可以使用 –only [app-name] 选项:
CMD ["pm2-runtime", "process.yml", "--only", "APP"]
将 exec_mode 集群与 nuxtjs 一起使用
在集群模式下运行 pm2 时,ecosystem.config.js
由于 nuxtjs
解析其 rootDir
的方式,将附加到您的 cwd 路径,以解决您必须在 args 部分中指定配置路径的问题:
module.exports = {
apps: [
{
name: 'my-nuxtjs-app',
exec_mode: 'cluster',
instances: 2,
cwd: '/var/www',
script: './node_modules/nuxt-start/bin/nuxt-start.js',
args: '-c /var/www/nuxt.config.js'
}
]
}
记录格式选项
如果您想更改日志输出格式,您可以选择以下选项之一:
- –json : 将以 JSON 格式输出日志 (logstash)
- –format : 将输出日志 = style 格式
- –raw:将按原样输出日志
要使用其中一个标志,您只需将它们传递给 pm2-runtime:
CMD ["pm2-runtime", "--json", "process.yml"]
启用正常关机
当 Container 收到关闭信号时,PM2 将此信号转发给您的应用程序,允许关闭所有数据库连接,等待所有查询都已处理或任何其他最终处理已完成,然后才能成功正常关闭。
捕获关闭信号很简单。您需要在 Node.js 应用程序中添加一个侦听器并在停止应用程序之前执行任何需要的操作:
process.on('SIGINT', function() {
db.stop(function(err) {
process.exit(err ? 1 : 0);
});
});
默认情况下,PM2 将等待 1600 毫秒,然后发送最终的 SIGKILL 信号。kill_timeout
您可以通过在应用程序配置文件中设置选项来修改此延迟。
在此处阅读有关应用程序状态管理的更多信息
开发环境
您可能希望告诉开发人员在容器内进行编程,以在开发、测试和生产之间保持一致的环境。
将pm2-runtime
替换为pm2-dev
将启用监视和重启功能。当主机文件作为 VOLUME
暴露给容器时,这在开发容器中非常有趣。
使用 PM2.io
Keymetrics.io
是一个建立在 PM2 之上的监控服务,可以轻松监控和管理应用程序(日志、重启、异常监控……)。在 Keymetrics 上创建 Bucket 后,您将获得一个公钥和一个私钥。
要使用pm2-runtime
启用 Keymetrics 监控,您可以使用 CLI 选项–public XXX
和–secret YYY
或传递环境变量KEYMETRICS_PUBLIC
和KEYMETRICS_SECRET
。
通过 Dockerfile 使用 CLI 选项的示例:
CMD ["pm2-runtime", "--public", "XXX", "--secret", "YYY", "process.yml"]
或者通过环境变量:
ENV PM2_PUBLIC_KEY=XXX
ENV PM2_SECRET_KEY=YYY
或者通过 Docker 运行命令:
docker run --net host -e "PM2_PUBLIC_KEY=XXX" -e "PM2_SECRET_KEY=XXX" <...>
pm2 运行时助手
这是 pm2-runtime 助手:
>>> pm2-runtime -h
Usage: pm2-runtime app.js
pm2-runtime is a drop-in replacement node.js binary with some interesting production features
Options:
-V, --version output the version number
-i --instances <number> launch [number] of processes automatically load-balanced. Increase overall performances and performance stability.
--secret [key] [MONITORING] keymetrics secret key
--public [key] [MONITORING] keymetrics public key
--machine-name [name] [MONITORING] keymetrics machine name
--raw raw log output
--json output logs in json format
--format output logs formatted like key=val
--delay <seconds> delay start of configuration file by <seconds>
--web [port] launch process web api on [port] (default to 9615)
--only <application-name> only act on one application of configuration
--no-auto-exit do not exit if all processes are errored/stopped or 0 apps launched
--env [name] inject env_[name] env variables in process config file
--watch watch and restart application on file change
--error <path> error log file destination (default disabled)
--output <path> output log file destination (default disabled)
-h, --help output usage information
Commands:
*
start <app.js|json_file> start an application or json ecosystem file
最后编辑:Jeebiz 更新时间:2023-02-26 22:51