使用pm2部署项目提高工作效率

为什么要用pm2?

以前部署项目的方式

  1. 从github上下载

  2. 打包后通过ssh 或者FTP上传到服务器,

  3. 在服务器上找到并解压缩,放到相应的文件夹

  4. 使用npm install 安装依赖 以及编译css 压缩js文件等等

  5. 删除压缩包以及设置文件夹权限

  6. 运行项目,如果报错

  7. 切换文件夹查看日志文件

  8. 在本地修改然后循环步骤2-7直到完美运行

    ....

增加一个新功能后者一行代码

  重复1-8

使用pm2以后的部署方式,当所有配置完成后三行命令

  1. git push 推送到github或者码云上
  2. pm2 deploy ecosystem.json production setup 第一次从github上拉取到服务器
  3. pm2 deploy ecosystem.json production 部署并运行 看到 success
  4. 如果报错使用pm2 logs 重复1,3

增加一个新功能后者一行代码

1. git push 

   2. pm2 deploy ecosystem.json production 

看到pm2 部署你的项目是不是很幸福,以前的工作方式简直是在透支生命啊,不到可以提高幸福指数,还可以拯救生命。

步骤

1. 在服务器和本地创建密钥
2. 安装node.js pm2
3. 在github上建立仓库
4. 使用密钥配置服务器,本地,github三者无密码登录
5. 配置pm2 的部署配置文件

提问提问提问

pm2最原始形态应该就是一个shell脚本,本来一个程序员2个小时就能完成的部署,他却花费20个小时研究出来一个自动化部署的脚本,然后上传到社区,参考xxx漫画

在本地和服务器创建密钥

note: 
  • 至于说ssh秘钥登录原理自行搜索,本文关注点在于实现步骤

  • 需要在本地电脑和服务器上装好git Bash(Mac系统没用过,好像不用get也行,反正有个终端能执行shell就行)

  • 需要在本地和服务器都要执行一边创建过程,创建过程都是一样的

  • 检查电脑中是否已经存在ssh key ll -a ~/.ssh 如果现实不存在文件或文件夹则继续,否则可以跳过也可以重新生成一次(会覆盖掉以前的ssh key文件)

1. 先在本地创建 ssh key

    **ssh-keygen -t rsa -b 4096 -C "邮箱地址"**
    然后不需要输入密码,直接回车回车(**否则会很麻烦**)
    检查 cd ~ 账户下 ~/.ssh文件夹下是否多了3个文件
      ~/.ssh/id_rsa             私钥
      ~/.ssh/id_rsa.pub         公钥
      ~/.ssh/know_hosts    主机记录,第一次登陆之后主机信息,当你敲yes之后会被记录到这个文件

[站外图片上传中...(image-a78263-1533686425155)]

2. 将ssh key 加入代理

    eval $(ssh-agent -s)     启动 ssh-agent
    ssh-add ~/.ssh/id_rsa  将私钥加入代理中

3. 将公钥添加到github上

         使用 cat ~/.ssh/id_rsa.pub   查看并复制公钥
        登陆你的github账户>头像下找到setttings > SSH >粘贴

4. 测试下是否配置成功

    ssh -T git@github.com
    
    好了已经打通了,本地与GitHub之间的无密码登录了

服务器上的操作和本地一样,在子账号下使用如下命令,不要在root账户下操作

[站外图片上传中...(image-cbbc1b-1533686425155)]

  1. 最关键的一步就是需要在服务器上新建一个填写public key的文件
    vim ~/.ssh/authorized_keys

     对vim使用不熟悉的同学可以自行搜索
    
  2. 然后使用
    cat ~/.ssh/id_rsa.pub 复制本地的public key 粘贴进去

在操作的过程中可以多开几个git Bash 链接到服务器以防自己操作失误又顺手关闭,导致自己都进不去自己的服务器

打通服务器与github上的ssh key的链接

  1. 在服务器上执行 cat ~/.ssh/id_rsa.pub

  2. 复制key粘贴到 你的github账户>头像下找到setttings > SSH >新建key>粘贴

  3. 测试是否能用

      mkdir ~/test 
      cd test
      git clone 任意仓库的ssh地址,是ssh地址
    

[站外图片上传中...(image-2ced1e-1533686425155)]

  1. 测试本地到服务器的链接
    ssh userName@xxxx.xxx.xxx.xxx

恭喜你,你已经完成了 local <==>yourserver <==> you github 三者 ssh key 的互通

接下来就是配置node pm2 了

    我假设你的本地电脑和服务器的node,pm2 已经安装完成并能正常运行
  1. 在本地和github新建一个项目并设置好,本地项目与github的映射
  2. 在本地github项目根文件夹下
  3. new一个ecosystem.json文件

[站外图片上传中...(image-f85782-1533686425155)]

      {
  "apps":[
      {
          "name":"Website",  //项目名称
          "script":"app.js", //入口文件
          "env":{
              "COMMON_VARIABLE": "true" 
          },
          "env_production" : {
              "NODE_ENV": "production"
            }
      }
  ],
  "deploy":{
      "production":{
          "user":"userName",       // 服务器登录用户名
          "host":["120.xxx.xxx.xxx"], //服务器ip
          "port":"22",           //ssh 端口如果没改过为 22          
          "ref":"origin/master",
          "repo":"git@github.com:macheng2017/study.git", //git仓库 项目ssh地址
          "path":"/www/website/production",//服务器部署地址 需要事先在服务器上将/www/website/ 新建出来
          "ssh_options":"StrictHostKeyChecking=no",
          "env":{
              "NODE_ENV":"production"
          }
      }
  }
}
  1. 以上面为模板,将加注释部分修改为自己的参数
  2. 在服务器上新建
    sudo mkdir /www/
    sudo mkdir /www/website/

NOTE:

  1. 由于不是在用户自己的home文件夹中新建文件所以需要sudo 提升权限
  2. 这里有个坑等你们踩过之后再说
  1. 测试,新建app.js 我们就以node.js官网上的示例
const http = require("http");

const hostname = "0.0.0.0";
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader("Content-Type", "text/plain");
  res.write('Hello world');
  res.end();
});
server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
  1. 使用

     pm2 deploy ecosystem.json production setup // 第一次部署
     //在本地执行脚本会在服务器中
     pm2 deploy ecosystem.json production  运行
    

在跟着该教程做下去会有几个坑

  1. 在第一次部署的时候,会遇到权限问题,还是因为使用的是子账号新建的 /www/website/ 权限不够 使用 chmod 777 website 修改权限即可

参考:

https://help.github.com/articles/connecting-to-github-with-ssh/
http://pm2.keymetrics.io/docs/usage/deployment/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335