pm2 部署 node
Node安装以及部署 去官网下载最新版本,分两种一种是源码,一种是编译后的文件。下面是官网下载地址: https://nodejs.org/en/download/current/ 分不同的版本 win linux mac 下载对应版本
以linux Windows为例
Linux 下安装:(方法一)
1.1把下载的tar.gz压缩包文件解压
1.2解压命令: tar -zxvf (压缩包的名字.tar.gz)
1.3解压完成后就可以在bin文件中看见 node 和 npm 文件 在当前目录下执行./node可以执行node客户端
1.4设置客户端:两条命令 node 和 npm
(kun/mysofltware/node-v0.10.28-linux-x64/bin/node)node文件存放位置根据自己存放位置而定
ln -s /home/kun/mysofltware/node-v0.10.28-linux-x64/bin/node /usr/local/bin/node
ln -s /home/kun/mysofltware/node-v0.10.28-linux-x64/bin/npm /usr/local/bin/npm
1.5在node目录下执行pwd
获取node所在的目录,要把这个目录添加到PATH环境变量
1.6执行su 输入密码切换到root用户 执行命令 vi/etc/profile
1.7在vi 环境下 点击 i 进入插入状态,在export PATH的上一行添加如下内容 (环境变量中的内容 是以冒号分割的)
PATH=$PATH:/home/kun/mysofltware/node-v0.10.26-linux-x64/bin
编辑完成后按Esc键 然后输入 : wq
按回车保存退出。
1.8退出vi ,执行 source /etc/profile
可以让变量生效
1.9然后执行 echo $PATH
,看看输出内容是否包含自己添加的内容
Linux 下安装:(方法二)
2.1把下载的source code源码解压
2.2 以此执行以下命令 :
1、cd node-v0.10
2、 ./configure
3、Make
4、Make install cp /usr/local/bin/node /usr/sbin/
Linux 下安装:(方法三)【不推荐】
apt-get 方式 Sudo apt-get install node.js Sudo apt-get install npm
Windows 下安装比较简单下载下一步(不赘述)安装redis数据库
3.1 下载源码,解压缩后编译源码。
wget http://download.redis.io/releases/redis-2.8.3.tar.gz
(http://download.redis.io/releases/redis-2.8.3.tar.gz)
tar xzf redis-2.8.3.tar.gz
cd redis-2.8.3
make
3.2编译完成后,在Src目录下,有四个可执行文件redis-server、redis-benchmark、 redis-cli和redis.conf。然后拷贝到一个目录下。
mkdir /usr/redis
cp redis-server /usr/redis
cp redis-benchmark /usr/redis
cp redis-cli /usr/redis
cp redis.conf /usr/redis
cd /usr/redis
3.3启动Redis服务 redis-server redis.conf
3.4然后用客户端测试一下是否启动成功。
redis-cli redis> set foo bar OK redis> get foo"bar" 代码上传
4.1打包:命令
(node_modules .idea .git ne.tar.gz 这些文件不打包减小压缩包大小)
tar cvzf ne.tar.gz
./ --exclude=node_modules
--exclude=.idea
--exclude=.git
--exclude=ne.tar.gz
4.2上传:命令 $ scp ./ne.tar.gz 主机名[@IP](http://cnodejs.org/user/IP)地址:文件夹的路径
4.3 执行命令登录远程主机
ssh 主机名[@IP](http://cnodejs.org/user/IP)地址 然后会提示输入密码
4.4 cd ls 进入上传压缩包所在的目录 执行 tar -zxvf ne.tar.gz
解压文件
4.5 npm 安装环境依赖 执行命令 npm install
部署前查询DNS 端口 root 权限下
5.1 命令:
$ netstart -ntupl 关闭防火墙root权限下
6.1firewall-cmd --zone=public --add-port=9010/tcp --permanent 6.2 firewall-cmd --reload
注:9010处为项目需要开启的端口号 安装 pm2
7.1 su 获得 root 权限下下载pm2
命令: 全局安装: npm install pm2 -g
,
启动: pm2 start www 启动进程
8.2 安装开机自启动 在root 权限下 执行如下命令:
pm2 startup
pm2 save
9.3 一些常用pm2 命令
查看启动状况 :pm2 list
重启项目: pm2 restart
关闭: pm2 stop
使用命令说明:
参数说明:
–watch
:监听应用目录的变化,一旦发生变化,自动重启。如果要精确监听、不见听的目录,最好通过配置文件。
-i –instances
:启用多少个实例,可用于负载均衡。如果-i 0或者-i max,则根据当前机器核数确定实例数目。
–ignore-watch
:排除监听的目录/文件,可以是特定的文件名,也可以是正则。
比如 –ignore-watch=”test node_modules “some scripts”“
-n –name
:应用的名称。查看应用信息的时候可以用到。
-o –output
:标准输出日志文件的路径。
-e –error
:错误输出日志文件的路径。
–interpreter
:the interpreter pm2 should use for executing app (bash, python…)。
比如你用的coffee script来编写应用。
完整命令行参数列表:地址
pm2 start app.js –watch -i 2
重启:
pm2 restart app.js
停止:
停止特定的应用。可以先通过pm2 list获取应用的名字(–name指定的)或者进程id。
pm2 stop app_name|app_id
如果要停止所有应用,可以:
pm2 stop all
删除
pm2 stop app_name|app_id
pm2 stop all
查看进程状态
pm2 list
自动重启
pm2 start app.js –watch
*这里是监控整个项目的文件
日志查看
除了可以打开日志文件查看日志外,还可以通过pm2 logs来查看实时日志。
pm2 logs
更新pm2
pm2 save
# 记得保存进程状态
npm install pm2 -g
pm2 update
附pm2命令:
$ 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启动文件
在项目根目录添加一个processes.json:
内容如下:
{ "apps" :
[{
"name": "mywork",
"cwd": "/srv/node-app/current",
"script": "bin/www",
"log_date_format": "YYYY-MM-DD HH:mm Z",
"error_file": "/var/log/node-app/node-app.stderr.log",
"out_file": "log/node-app.stdout.log",
"pid_file": "pids/node-geo-api.pid",
"instances": 6,
"min_uptime": "200s",
"max_restarts": 10,
"max_memory_restart": "1M",
"cron_restart": "1 0 * * *",
"watch": false,
"merge_logs": true,
"exec_interpreter": "node",
"exec_mode": "fork",
"autorestart": false,
"vizion": false
}]
}
说明:
- apps:json结构,apps是一个数组,每一个数组成员就是对应一个pm2中运行的应用
- name:应用程序名称
- cwd:应用程序所在的目录
- script:应用程序的脚本路径
- log_date_format:
- error_file:自定义应用程序的错误日志文件
- out_file:自定义应用程序日志文件
- pid_file:自定义应用程序的pid文件
- instances:
- min_uptime:最小运行时间,这里设置的是60s即如果应用程序在60s内退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量
- max_restarts:设置应用程序异常退出重启的次数,默认15次(从0开始计数)
- cron_restart:定时启动,解决重启能解决的问题
- watch:是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。
- merge_logs:
- exec_interpreter:应用程序的脚本类型,这里使用的shell,默认是nodejs
- exec_mode:应用程序启动模式,这里设置的是cluster_mode(集群),默认是fork
- autorestart:启用/禁用应用程序崩溃或退出时自动重启
- vizion:启用/禁用vizion特性(版本控制)
可以通过pm2 start processes.json
来启动。
也可以把命令写在package.json里。如下:
通过npm run pm2
来启动。
启动任务命令:
"pm2 start py文件或其他文件 -x --interpreter 程序如python"
"pm2 start scrapy_biying_ask.py -x --interpreter python"