本地计算机上的mysql80服务启动后停止 某些_pm2 开机启动egg项目

f81ea899083226ab8accb10522447e0c.png

egg部署

在本地开发时,我们使用 egg-bin dev 来启动服务,但是在部署应用的时候不可以这样使用。因为 egg-bin dev 会针对本地开发做很多处理,而生产运行需要一个更加简单稳定的方式。所以本章主要讲解如何部署你的应用。

一般从源码代码到真正运行,我们会拆分成构建和部署两步,可以做到一次构建多次部署

构建

JavaScript 语言本身不需要编译的,构建过程主要是下载依赖。但如果使用 TypeScript 或者 Babel 支持 ES6 以上的特性,那就必须要这一步了。

一般安装依赖会指定 NODE_ENV=production 或 npm install --production 只安装 dependencies 的依赖。因为 devDependencies 中的模块过大而且在生产环境不会使用,安装后也可能遇到未知问题。

$ cd baseDir$ npm install --production$ tar -zcvf ../release.tgz .

构建完成后打包成 tgz 文件,部署的时候解压启动就可以了。

增加构建环节才能做到真正的一次构建多次部署,理论上代码没有改动的时候是不需要再次构建的,可以用原来的包进行部署,这有着不少好处:

  • 构建依赖的环境和运行时是有差异的,所以不要污染运行时环境。
  • 可以减少发布的时间,而且易回滚,只需要把原来的包重新启动即可。

部署

服务器需要预装 Node.js,框架支持的 Node 版本为 >= 8.0.0。

框架内置了 egg-cluster 来启动 Master 进程,Master 有足够的稳定性。

同时,框架也提供了 egg-scripts 来支持线上环境的运行和停止。

首先,我们需要把 egg-scripts 模块作为 dependencies 引入:

$ npm i egg-scripts --save

添加 npm scripts 到 package.json:

{  "scripts": {    "start": "egg-scripts start --daemon",    "stop": "egg-scripts stop"  }}

这样我们就可以通过 npm start 和 npm stop 命令启动或停止应用。

注意:egg-scripts 对 Windows 系统的支持有限,参见 #22。

PM2的使用

安装

安装命令

npm install pm2 -g

让PM2保持最新状态:

pm2 update

在egg项目的根目录定义启动文件:

// server.jsconst egg = require('egg');const workers = Number(process.argv[2] || require('os').cpus().length);egg.startCluster({  workers,  baseDir: __dirname,});

这样,我们就可以通过 PM2 进行启动了(本次启动在egg项目的根目录):

pm2 start server.js --name test

启动挂钩

检测计算机上可用的init系统并生成配置,使用:

pm2 startup

运行 pm2 startup,即在/etc/init.d/目录下生成pm2-root的启动脚本,且自动将pm2-root设为服务。

查的信息如下

[PM2] Init System found: systemd[PM2] To setup the Startup Script, copy/paste the following command:sudo env PATH=$PATH:/home/lxj/.nvm/versions/node/v10.15.1/bin /home/lxj/.nvm/versions/node/v10.15.1/lib/node_modules/pm2/bin/pm2 startup systemd -u lxj --hp /home/lxj

执行上面所查命令

sudo env PATH=$PATH:/home/lxj/.nvm/versions/node/v10.15.1/bin /home/lxj/.nvm/versions/node/v10.15.1/lib/node_modules/pm2/bin/pm2 startup systemd -u lxj --hp /home/lxj

使用NVM时,此pm2路径会在更新Node.js时改变。 每次更新后您都需要运行startup命令。

运行

pm2 save

以此来保存您的进程列表,启动挂钩会自动加载您之前保存的进程列表。

运行 pm2 save,会将当前pm2所运行的应用保存在/root/.pm2/dump.pm2下,当开机重启时,运行pm2-root服务脚本,并且到/root/.pm2/dump.pm2下读取应用并启动。

完成以上命令就能够开机自启动名为test的项目了。

离线更新

获取egg的压缩包,解压缩替换原有的文件并

pm2 restart test

完成离线更新操作。

npm install pm2 -g     # 命令行安装 pm2 pm2 start app.js -i 4 #后台运行pm2,启动4个app.js                               # 也可以把'max' 参数传递给 start                              # 正确的进程数目依赖于Cpu的核心数目pm2 start app.js --name my-api # 命名进程pm2 list               # 显示所有进程状态pm2 monit              # 监视所有进程pm2 logs               #  显示所有进程日志pm2 stop all           # 停止所有进程pm2 restart all        # 重启所有进程pm2 reload all         # 0秒停机重载进程 (用于 NETWORKED 进程)pm2 stop 0             # 停止指定的进程pm2 restart 0          # 重启指定的进程pm2 startup            # 产生 init 脚本 保持进程活着pm2 web                # 运行健壮的 computer API endpoint (http://localhost:9615)pm2 delete 0           # 杀死指定的进程pm2 delete all         # 杀死全部进程pm2 start app.js -i max  # 根据有效CPU数目启动最大进程数目pm2 start app.js -i 3      # 启动3个进程pm2 start app.js -x        #用fork模式启动 app.js 而不是使用 clusterpm2 start app.js -x -- -a 23   # 用fork模式启动 app.js 并且传递参数 (-a 23)pm2 start app.js --name serverone  # 启动一个进程并把它命名为 serveronepm2 stop serverone       # 停止 serverone 进程pm2 start app.json        # 启动进程, 在 app.json里设置选项pm2 start app.js -i max -- -a 23                   #在--之后给 app.js 传递参数pm2 start app.js -i max -e err.log -o out.log  # 启动 并 生成一个配置文件,你也可以执行用其他语言编写的app  ( fork 模式):pm2 start my-bash-script.sh    -x --interpreter bashpm2 start my-python-script.py -x --interpreter python
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值