10月05, 2017

pm2 deploy的小坑

所谓的deploy,就是能帮我们省却在远程git pull及重新pm2 restart的过程。

这里有一个相关的文档:pm2 deploy

给个简单的示例:

//pm2.json
{
    "apps": [
        {
            "name": "名称,如testNode",
            "script": "运行脚本,如index.js",
            "env": {
                "COMMON_VARIABLE": "true"
            },
            "env_production": {
                "NODE_ENV": "production"
            }
        }
    ],
    "deploy": {
        "production": {
            "user": "服务器登录用户名",
            "host": [
                "服务器IP"
            ],
            "port": "服务器端口号,默认是22",
            "ref": "origin/master",
            "repo": "git地址",
            "path": "放到服务器的某个目录,注意需要赋予读写权限777",
            "ssh_options": "StrictHostKeyChecking=no",
            "env": {
                "NODE_ENV": "production"
            }
        }
    }
}

命令:

 pm2 deploy pm2.json production setup

production是指环境。

它会在指定的目录下,新建三个文件夹:

alt

分别为:current(个人理解是编译后的代码)、shared(存放logs及pid)、source(源码)

之后,只要不断地运行:

 pm2 deploy pm2.json production

即可。它会去做:git pull及pm2 restart。

在实际测试中,发现改了文件之后,运行上面的命令,并不能pull latest。

于是翻了一下github的issue,了解到:

因为pm2-depoy 工具的fetch代码执行的是加--tags的,在git源码中1.9.0之前的版本加上这个参数会导致映射关系丢失...

这里有一个坑是centos7 用yum装git,就是1.8版本。

当然网上也有提供如何安装最新版的文章。

在装完git最新版之后,运行上面的命令,可能会报以下的错误:

alt

这个错误一开始让我有点蒙B,后来从我自己的账号切到root下,执行git,发现确实git不是个命令,要解决的办法很简单,做个软链即可,例如:

sudo ln -s /usr/local/git/bin/git /usr/bin/

重新执行,发现OK了。。

本文链接:www.my-fe.pub/post/about-pm2-deploy.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。