返回介绍

模块系统 Module System

发布于 2024-04-14 00:45:03 字数 6274 浏览 0 评论 0 收藏 0

由 PM2 运行的独立 Node.JS 应用程序

PM2 模块

PM2 模块是由 PM2 安装和管理的独立软件。 这些软件是从 NPM 存储库中提取的,并作为 NPM 上的通用 Javascript 库发布。

任何人都可以创建和发布模块 。 一个模块可以是一个 日志轮换模块 ,一个 独立的 http 代理 , 负载均衡器、基于 Node.js 的维基百科、DNS 服务器或任何类型的实用程序。 你的创造力是极限!

管理模块

管理模块很简单:

# 安装
pm2 install <module-name>

# 更新模块
pm2 install <module-name>

# 从 GitHub(用户名/存储库)安装模块
pm2 install pm2-hive/pm2-docker

# 强制模块重启
pm2 restart <module-name>

# 获取更多信息
pm2 describe <module-name>

# 从本地文件夹以开发模式安装模块
pm2 install .

# 生成模块样板
pm2 module:generate <module-name>

# 卸载模块
pm2 uninstall <module-name>

# 发布新模块(Inc Semver + Git push + NPM publish)
pm2 publish

创建模块

要生成模块示例:

pm2 module:generate <module-name>

现在让我们用 PM2 运行这个模块:

cd <module-name>
pm2 install .

您现在可以编辑源代码,当您更改某些内容时,PM2 将自动重启模块( watch 选项已激活 )。

显示模块日志:

$ pm2 logs <module-name>

要删除模块:

$ pm2 uninstall <module-name>

Package.json 的增强

可以将补充信息添加到 package.json 文件中。

您可以在 config 属性和模块行为下定义配置值,如常见的 pm2 托管进程

例子:

{
  "name": "pm2-logrotate",  // Used as the module name
  "version": "1.0.0",       // Used as the module version
  "description": "my desc", // Used as the module comment
  "dependencies": {
    "pmx": "latest"
  },
  "config": {              // Default configuration values
                           // These values can be overridden with `pm2 set <module-name>:<attr> <val>`
     "days_interval" : 7,  // These value is returned once you call pmx.initModule()
     "max_size" : 5242880
  },
  "apps" : [{              // Module behavior options
    "script"             : "index.js",
    "merge_logs"         : true,
    "max_memory_restart" : "200M"
  }],
  "author": "Gataca Sanders",
  "license": "MIT"
}

模块入口点

在您的主模块入口点,调用 pmx.initModule(opts, fn(){}); 来初始化您的模块:

var pmx     = require('pmx');

var conf    = pmx.initModule({
  // Override PID to be monitored
  pid              : pmx.resolvePidPaths(['/var/run/redis.pid']),
}, function(err, conf) {
  // Now the module is initialized
  require('./business_logic.js')(conf);
});

额外显示

安装模块后,您可以更改其行为以显示包含所需内容的表格,而不是 PM2 列出您的进程。

要启用此行为,请编辑 package.json 并添加 env 部分并将 PM2_EXTRA_DISPLAY 设置为 true:

package.json

{
  [...]
  "apps" : [{
    "script" : "index.js",
    "env"    : {
      "PM2_EXTRA_DISPLAY" : "true"
    }
  }],
  [...]
}

然后在你的代码中:

var pmx = require('pmx');

pmx.configureModule({
  human_info : [
    ['Status' , 'Module ready'],
    ['Comment', 'This is a superb comment the user should see'],
    ['IP'     , 'my machine ip!']
  ]
});

安装模块后,您将能够看到这种表格!

额外模块显示

模块配置

在 package.json 中,您可以在属性 config 下声明模块中可访问的默认选项。 这些值可以被 PM2 或 Keymetrics 覆盖。

默认值

更新或发布模块非常简单。 pm2 publish 命令将增加模块的次要版本, git add . ; git commit -m “版本”; git push origin master 然后它将 npm publish

cd my-module
pm2 publish

Modules <3 Keymetrics

使用 Keymetrics ,您可以 创建自定义界面 使用 指标监控远程操作 .

这会给你这样的结果:

Keymetrics 接口说明pm2-mongodb module

Keymetrics 接口说明pm2-server-monit-module

Options with pmx.initModule

var pmx     = require('pmx');

var conf    = pmx.initModule({

    [...]

    // Customize look and feel of this module
    widget : {
      // Logo to be displayed on the top left block (must be https)
      logo  : 'https://image.url  ',
      theme : ['#9F1414', '#591313', 'white', 'white'],

      // Toggle horizontal blocks above main widget
      el : {
        probes : false,
        actions: false
      },

      block : {
        // Display remote action block
        actions : true,

        // Display CPU / Memory
        cpu     : true,
        mem     : true,

        // Issues count display
        issues  : true,

        // Display meta block
        meta    : true,

        // Display metadata about the probe (restart nb, interpreter...)
        meta_block : true,

        // Name of custom metrics to be displayed as a "major metrics"
        main_probes : ['Processes']
      },
    },
}, function(err, conf) {
  /**
   * Main module entry
   */
  console.log(conf);
  // Do whatever you need
  require('./business_logic.js')(conf);
});

Changing conf values

In the main Keymetrics dashboard, the modules will have a button called “Configure”. Once you click on it you will be able to access or/and modify all configuration variables exposed on the package.json!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文