Учебник Nodejs 30 (окончание): Начало работы с PM2

Node.js

Чтобы прочитать больше статей из этой серии, пожалуйста, посетите мойБлог GitHub, пример кода, пожалуйста, посетитездесь.

Введение в PM2

PM2Это широко используемый инструмент управления процессами узла, который может обеспечивать управление приложениями node.js, например, автоматическую перезагрузку, мониторинг производительности, балансировку нагрузки и т. д. Аналогичные инструменты включают Supervisor, Forever и т. д.

установка ПМ2

Для использования PM2 требуется глобальная установка npm.

npm install -g pm2

Запустить проект PM2

Тестовый проект в этой статье напрямую выбирает проект, выполненный в предыдущей статье, и адрес/lesson29/.

Начать проект напрямую

pm2 поддерживает запуск стартового проекта server.js напрямую следующим образом:

pm2 start server.js

Вы можете запустить приложение Node.js, и вы увидите напечатанную информацию после успеха:

[PM2] Spawning PM2 daemon with pm2_home=C:\Users\23101\.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting C:\xxx\lesson29\server.js in fork_mode (1 instance)
[PM2] Done.
┌────────┬────┬──────┬────────┬───┬─────┬───────────┐
│ Name   │ id │ mode │ status │ ↺ │ cpu │ memory    │
├────────┼────┼──────┼────────┼───┼─────┼───────────┤
│ server │ 0  │ fork │ online │ 0 │ 0%  │ 32.0 MB   │
└────────┴────┴──────┴────────┴───┴─────┴───────────┘
 Use `pm2 show <id|name>` to get more details about an app

В таблице показано, что имя приложения — сервер, а идентификатор — 0. И имя приложения, и идентификатор могут использоваться в качестве идентификатора приложения.

Управление приложениями через профили

PM2 также поддерживает управление приложениями с помощью файлов конфигурации, которые могут предоставлять более богатые конфигурации.Поддерживаемые форматы конфигурации: Javascript, JSON и YAML.Подробнее см.Документация.

структура папок

После запуска PM2 автоматически создаст следующие папки:

$HOME/.pm2 будет содержать все файлы, связанные с PM2. $HOME/.pm2/logs будет содержать все журналы приложений. $HOME/.pm2/pids будет содержать идентификаторы всех приложений. $HOME/.pm2/pm2.log Журнал PM2 $HOME/.pm2/pm2.pid PID PM2 Файл сокета $HOME/.pm2/rpc.sock для удаленных команд Файл сокета $HOME/.pm2/pub.sock для публикации событий $HOME/.pm2/conf.js Конфигурация PM2

В Windows переменная среды $HOME может быть $HOMEDRIVE + $HOMEPATH.

Посмотреть список приложений

использовать командуpm2 listСписок приложений можно посмотреть:

┌──────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬───────┬──────────┐
│ App name │ id │ version │ mode │ pid   │ status │ restart │ uptime │ cpu │ mem       │ user  │ watching │
├──────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼───────┼──────────┤
│ server   │ 0  │ 1.0.0   │ fork │ 24776 │ online │ 9       │ 19m    │ 0%  │ 35.4 MB   │ 23101 │ disabled │
└──────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴───────┴──────────┘

Посмотреть сведения о приложении

Введите в командной строкеpm2 show 0, всплывающая информация выглядит следующим образом:

 Describing process with id 0 - name server 
┌───────────────────┬─────────────────────────────────────────────┐
│ status            │ online                                      │
│ name              │ server                                      │
│ version           │ 1.0.0                                       │
│ restarts          │ 0                                           │
│ uptime            │ 3m                                          │
│ script path       │ C:\xxx\lesson29\server.js                   │
│ script args       │ N/A                                         │
│ error log path    │ C:\Users\23101\.pm2\logs\server-error.log   │
│ out log path      │ C:\Users\23101\.pm2\logs\server-out.log     │
│ pid path          │ C:\Users\23101\.pm2\pids\server-0.pid       │
│ interpreter       │ node                                        │
│ interpreter args  │ N/A                                         │
│ script id         │ 0                                           │
│ exec cwd          │ C:\xxx\lesson29                             │
│ exec mode         │ fork_mode                                   │
│ node.js version   │ 11.9.0                                      │
│ node env          │ N/A                                         │
│ watch & reload    │ ✘                                           │
│ unstable restarts │ 0                                           │
│ created at        │ 2019-04-09T14:07:23.918Z                    │
└───────────────────┴─────────────────────────────────────────────┘
 Revision control metadata 
┌──────────────────┬──────────────────────────────────────────┐
│ revision control │ git                                      │
│ remote url       │ https://github.com/chencl1986/Blog.git   │
│ repository root  │ C:\xxx\Blog                              │
│ last update      │ 2019-04-09T14:07:24.928Z                 │
│ revision         │ 08f1efdfeb48bcc87f96b563d4d013a22e42ed9f │
│ comment          │                                          │
│ branch           │ master                                   │
└──────────────────┴──────────────────────────────────────────┘
 Actions available 
┌────────────────────────┐
│ km:heapdump            │
│ km:cpu:profiling:start │
│ km:cpu:profiling:stop  │
│ km:heap:sampling:start │
│ km:heap:sampling:stop  │
└────────────────────────┘
 Trigger via: pm2 trigger server <action_name>

 Code metrics value 
┌────────────────────────┬───────┐
│ Heap Size              │ 13.70 │
│ Heap Usage             │ 59.91 │
│ Used Heap Size         │ 8.21  │
│ Active requests        │ 0     │
│ Active handles         │ 4     │
│ Event Loop Latency     │ 2.30  │
│ Event Loop Latency p95 │ 7.15  │
│ HTTP Mean Latency      │ 10    │
│ HTTP P95 Latency       │ 10038 │
│ HTTP                   │ 0     │
└────────────────────────┴───────┘
 Add your own code metrics: http://bit.ly/code-metrics
 Use `pm2 logs server [--lines 1000]` to display logs
 Use `pm2 env 0` to display environement variables
 Use `pm2 monit` to monitor CPU and Memory usage server

Мониторинг ЦП/памяти

использоватьpm2 monitметод, вы можетеМониторинг процессора и памятиИспользование и сообщение об ошибке приложения также будут напечатаны в окне Global Logs следующим образом:

Отслеживание изменений кода

Используйте следующие команды для отслеживания сохранения кода и обновления приложения.

pm2 start server.js --watch

PM2 не только прослушивает файл server.js, но также прослушивает все модули, на которые он ссылается, при условии сохранения любого кода модуля, например нажатия на клавиатуру.ctrl + s, или создайте новый файл, PM2 перезапустится.

Если вам нужно игнорировать определенные файлы, вы можетеконфигурационный файлв настройках так:

{
  "watch": ["server", "client"],
  "ignore_watch" : ["node_modules", "client/img"],
  "watch_options": {
    "followSymlinks": false
  }
}
  • watch может быть логическим значением, массивом путей или строкой, представляющей путь. По умолчанию ложно.
  • ignore_watch может быть массивом путей или строкой, это будетchokidarИнтерпретируется как glob или регулярное выражение.
  • watch_options — это объект, который заменяет опции chokidar. Определения см.чокидар документация.

Управление окружением

При разработке проекта обычно необходимоУправление окружением, PM2 может использовать файлы конфигурации и параметры командной строки для настройки среды.

Добавить файл конфигурации

Во-первых, используйтеpm2 initкоманда для созданияecosystem.config.jsфайл, который уже имеет конфигурацию по умолчанию.

module.exports = {
  apps : [{
    name: 'API',
    script: 'app.js',

    // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
    args: 'one two',
    instances: 1,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }],

  deploy : {
    production : {
      user : 'node',
      host : '212.83.163.1',
      ref  : 'origin/master',
      repo : 'git@github.com:repo.git',
      path : '/var/www/production',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
    }
  }
};

Изменить настройку

Среди них, полезных для экологического менеджмента:

{
  env: {
    NODE_ENV: 'development'
  },
  env_production: {
    NODE_ENV: 'production'
  }
}

Чтобы соответствовать нашему проекту, конфигурация может быть изменена следующим образом:

{
  env: {
    NODE_ENV: 'dev'
  },
  env_development: {
    NODE_ENV: 'dev'
  },
  env_production: {
    NODE_ENV: 'prod'
  }
}

Соответствующие им команды запуска:

  • pm2 start ecosystem.config.js --watch --env
  • pm2 start ecosystem.config.js --watch --env development
  • pm2 start ecosystem.config.js --watch --env production

Запустите среду разработки

В серверном коде вы можете передатьprocess.env.NODE_ENV, получить установленное значение.

Например, мы используемpm2 start ecosystem.config.js --watch --env developmentкоманду для запуска проекта, вы можете распечататьprocess.env.NODE_ENVЗначение `dev:

Пример кода: /lesson29/config/index.js

const process = require('process')
console.log(process.env.NODE_ENV) // dev
mode = process.env.NODE_ENV // dev

управление журналом

PM2 обеспечивает очень мощныйуправление журналомфункция, которая поддерживает просмотр журналов несколькими способами.

  1. Просмотр журналов в специальном формате даты

    # 以特殊日期格式查看server应用的日志
    pm2 logs server --format
    

    Результат выглядит следующим образом:

    timestamp=2019-04-10-23:13:25+0800 app=server id=0 type=out message=dev
    timestamp=2019-04-10-23:13:26+0800 app=server id=0 type=out message=Server started at 8080
    
  2. Просмотр журналов в формате JSON

    pm2 logs server --json
    

    Результат выглядит следующим образом:

    {"timestamp":"2019-04-10T15:14:52.376Z","type":"process_event","status":"exit","app_name":"server"}
    {"timestamp":"2019-04-10T15:14:52.479Z","type":"process_event","status":"exit","app_name":"server"}
    {"message":"dev","timestamp":"2019-04-10T15:14:53.246Z","type":"out","process_id":0,"app_name":"server"}
    {"timestamp":"2019-04-10T15:14:53.284Z","type":"process_event","status":"online","app_name":"server"}
    {"message":"Server started at 8080","timestamp":"2019-04-10T15:14:53.474Z","type":"out","process_id":0,"app_name":"server"}
    
  3. Посмотреть почти 3 строки журнала

    pm2 logs server --lines 3
    

    Результат выглядит следующим образом:

    [TAILING] Tailing last 3 lines for [server] process (change the value with --lines option)
    C:\xxx\.pm2\logs\server-error.log last 3 lines:
    0|server   |   code: 'ETIMEDOUT',
    0|server   |   syscall: 'connect',
    0|server   |   fatal: true }
    
    C:\xxx\.pm2\logs\server-out.log last 3 lines:
    0|server   | Server started at 8080
    0|server   | dev
    0|server   | Server started at 8080
    

Справка по интерфейсу командной строки

Помимо команд, представленных выше, в PM2 есть много других полезных команд, которые здесь не перечислены, при необходимости вы можете просмотреть их.Документация