node部署
- 服务器上安装node环境并配置
- 项目拷贝到服务器上
pm2
PM2(Process Manager 2)是一个进程管理工具,用于管理和部署 Node.js 应用程序
如果你的 node 应用跑的时候突然抛了个错,崩溃了,是不是需要重新跑起来?这时候是不是就需要另一个进程来自动做重启这件事情
使用pm2让node服务保持运行,进程守护,进程管理、日志管理、负载均衡、性能监控
- 可使用pm2来进行项目部署,通过终端登上服务器,安装pm2。
- nodejs的入口js文件默认是bin/www,所以我们启动这个文件。
- 使用pm2把node 进程跑起来,然后管理起来, 实现自动重启、日志管理、性能监控
npm i -g pm2
# 然后进入项目目录,通过下面的命令进行部署:
pm2 start ./dist/main.js
// 查看日志
pm2 logs
pm2相关命令
- 主要常用的是
- pm2 start
# 查看日志
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启动端口
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',
},
],
}
- 使用指定的环境变量
- 通过环境变量切换端口
pm2 start ecosystem.config.js --env pre # 使用 env_pre
pm2 start ecosystem.config.js --env prod # 使用 env_prod
- 查看监听的端口
# 查看pm2日志 可以通过pm2 log查看pm2启动的日志,里面可以看到监听的端口
pm2 log
# 使用netstat命令 => 网络状态分析命令
# windows
netstat -ano | findstr 3002
# linux
netstat -tulnp | grep 3002
# curl命令
curl 127.0.0.1:3002
启动不生效问题
- 需要先删除旧进程,再重新启动进程服务
pm2 delete demo
pm2 start ecosystem.config.cjs --name demo --env qa
这样才能确保:
- 重新加载 ecosystem.config.cjs
- 应用新环境变量(
env_qa中的配置) - 启动正确端口
避免启动不成功,建议是删掉旧进程,在启动
pm2删除进程失败问题
- 当pm2删除进程失败的时候,可能会阻塞后面的脚本执行
- 在命令后面加
|| true避免阻塞
pm2 delete demo || true
pm2部署例子
关闭询问telemetry 提示
- yarn config set telemetry false 等价于 yarn config set enableTelemetry 0
- pnpm config set telemetry false
# 安装相关环境
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部署
- egg框架内置了 egg-cluster 来启动 Master 进程,Master 有足够的稳定性,不再需要使用 pm2 等进程守护模块
Docker
Serverless
serverless最核心的价值是 按量收费
收费模式:
- 部署的内容是一个一个可执行的函数,按照函数的使用量付费
- 包括基于函数调用次数、执行持续时间以及所消耗资源的收费
- CPU的占用率 + CPU使用时长
计费的依据
- CPU的使用
- 网络带宽
nodejs在阿里云发布步骤
阿里云的serverless叫:函数计算FC
- 1、进入函数计算FC控制台
- 2、创建node应用
- 3、管理git仓库