跳到主要内容

node部署

  • 服务器上安装node环境并配置
  • 项目拷贝到服务器上

pm2​

PM2(Process Manager 2)是一个进程管理工具,用于管理和部署 Node.js 应用程序

如果你的 node 应用跑的时候突然抛了个错,崩溃了,是不是需要重新跑起来?这时候是不是就需要另一个进程来自动做重启这件事情

使用pm2让node服务保持运行,进程守护,进程管理、日志管理、负载均衡、性能监控

  • 可使用pm2来进行项目部署,通过终端登上服务器,安装pm2。
    • nodejs的入口js文件默认是bin/www,所以我们启动这个文件。
  • 使用pm2把node 进程跑起来,然后管理起来, 实现自动重启、日志管理、性能监控
bash
npm i -g pm2
# 然后进入项目目录,通过下面的命令进行部署:
pm2 start ./dist/main.js
// 查看日志
pm2 logs

pm2相关命令​

  • 主要常用的是
    • pm2 start
bash
# 查看日志
pm2 logs、pm2 log
# 查看运行状态
pm2 list
# 通过配置文件启动应用,支持集群模式
pm2 start ecosystem.config.js
# 直接启动npm脚本
pm2 start npm --name "app-name" -- run start
# 停止指定应用
pm2 stop <app-name|id>
# 重启应用
pm2 restart <app-name|id>
# 打开监控面板,查看CPU/内存使用情况
pm2 monit
# 生成启动脚本,确保服务器重启后自动运行PM2
pm2 startup
# 删除pm2进程
pm2 delete app-name
# 指定启动环境配置
pm2 start ecosystem.config.js --env prod # 使用 env_prod

pm2-runtime​

pm2 与 pm2-runtime的区别:

  • pm2-runtime是为 Docker 容器而设计的,它将应用程序保持在前台,从而使容器保持运行

配置环境变量​

HOST 、PORT 、NODE_ENV实际是 Node.js 服务端的环境变量

  • 默认环境在 env 中,可以使用 pm2 start ecosystem.config.js --env pre 来决定使用 env_pre。
  • 可以根据需要定义任意数量的环境,请记住,您必须传递要与 --env 一起使用的环境名称(在 env_ 之后)
  • env 是默认环境(执行 pm2 start 时生效)。
    • env_pre 和 env_prod 是自定义环境(需要指定启动时使用哪个环境)
  • 通过环境变量切换node启动端口
ts
module.exports = {
apps: [
{
name: 'my-nuxt-demo',
// 多进程集群模式、让PM2 管理多个 Node.js 实例
exec_mode: 'cluster',
instances: 'max',
script: './.output/server/index.mjs',
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
"PORT": 3000,
"NODE_ENV": 'production',
},
// 预发布环境
env_pre: {
"PORT": 3001,
"NODE_ENV": "production",
},
// 生产环境
env_prod: {
"PORT": 3002,
"NODE_ENV": "production",
},
out_file: './logs/pm2-out.log',
error_file: './logs/pm2-error.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss',
},
],
}
  • 使用指定的环境变量
    • 通过环境变量切换端口
bash
pm2 start ecosystem.config.js --env pre # 使用 env_pre
pm2 start ecosystem.config.js --env prod # 使用 env_prod
  • 查看监听的端口
bash
# 查看pm2日志 可以通过pm2 log查看pm2启动的日志,里面可以看到监听的端口
pm2 log
# 使用netstat命令 => 网络状态分析命令
# windows
netstat -ano | findstr 3002
# linux
netstat -tulnp | grep 3002
# curl命令
curl 127.0.0.1:3002

启动不生效问题​

  • 需要先删除旧进程,再重新启动进程服务
bash
pm2 delete demo
pm2 start ecosystem.config.cjs --name demo --env qa

这样才能确保:

  • 重新加载 ecosystem.config.cjs
  • 应用新环境变量(env_qa 中的配置)
  • 启动正确端口

避免启动不成功,建议是删掉旧进程,在启动

pm2删除进程失败问题​

  • 当pm2删除进程失败的时候,可能会阻塞后面的脚本执行
  • 在命令后面加 || true 避免阻塞
bash
pm2 delete demo || true

pm2部署例子​

关闭询问telemetry 提示

  • yarn config set telemetry false 等价于 yarn config set enableTelemetry 0
  • pnpm config set telemetry false
bash
# 安装相关环境
which yarn || npm i yarn -g
which pnpm || npm i pnpm -g
which pm2 || npm install pm2@latest -g
yarn config set enableTelemetry false
pnpm config set telemetry false

# pm2启动node服务
pm2 stop app-name
pm2 delete app-name
pm2 start ecosystem.config.cjs --name app-name --env production
pm2 status

egg部署​

Docker​

Serverless​

serverless最核心的价值是 按量收费

收费模式:

  • 部署的内容是一个一个可执行的函数,按照函数的使用量付费
  • 包括基于函数调用次数、执行持续时间以及所消耗资源的收费
  • CPU的占用率 + CPU使用时长

计费的依据

  • CPU的使用
  • 网络带宽

nodejs在阿里云发布步骤​

阿里云的serverless叫:函数计算FC

  • 1、进入函数计算FC控制台
  • 2、创建node应用
  • 3、管理git仓库

云服务​