• pm2部署node应用


    背景:

      很早就知道了pm2的强大功能,部署,多进程部署,负载均衡等等,但是一直没有取尝试使用,每次写完代码就没关心部署的事了。最近有空就想着把pm2的部署流程走一遍,顺便整理出来。

    环境:

      1.本地:linux mint18(类ubuntu)

      2.服务器:阿里云ubuntu16.04

    流程:

      1.购买服务器

      2.登录服务器,安装node环境

      3.上传代码到私有或者公共git仓库

      4.pm2从本地到服务器的发布

      5.服务器端设置pm2开机自启动

    1.购买服务器,域名备案

      我没有比较哪个厂商的云服务比较好,不过我自己用的是阿里云的。

    2.登录服务器,安装node环境

      1)ssh root@120.77.156.181 

        接着输入密码

      解释:阿里云服务器的默认端口是22,所以不用特地指定服务器端口

      2)添加用户

        使用root用户操作服务器是一件很危险的事,因为root有超级权限,很可能一不小心删除了某个重要文件,所以这里建议新增一个用户来帮忙操作服务器,这个用户需要拥有root的所用功能,只是在执行命令的时候需要加sudo。

        使用如下命令添加用户:

        adduser  qqqq
    
        接着输入两次密码

        给新增的用户授权:

        gpasswd -a qqqq sudo  //作用的让qqqq用户通过sudo来拥有root的权限,并且需要输入密码
    
        sudo visudo
    
        添加:qqqq ALL=(ALL:ALL) ALL

        这样就可以通过ssh qqqq@120.77.156.181登录服务器

        服务器端关闭root用户的登录:

        sudo vi  /etc/ssh/sshd_config
    

        找到如下设置,并修改yes为no:

        PermitRootLogin no 

        保存文件后,重启sshd:

        sudo service sshd restart    

      3)无密码登录服务器

        上面两种登录服务器的方式都需要输入密码,其实这不是必须的,只需要简单的几步就可以实现无密码登录服务器。

        本地主机生成私钥和公钥:

        ssh-keygen rsa -b 4096 -c “1594466572@qq.com”
    
        然后直接回车即可        

        此时本机用户目录下的.ssh文件夹下会生生成两个文件(id_rsa和id_rsa.pub),前者是私钥后者是公钥,如果这两个文件之前就已经存在,那就没必要重新生成了

        本地主机开启ssh代理:

        eval "$(ssh-agent -s)"

        将私钥加入到代理中:

        ssh-add ~/.ssh/id_rsa

        进入服务器:ssh qqqq@120.77.156.181

        执行同样的操作:ssh-keygen rsa -b 4096 -c “1594466572@qq.com” (这一句可要可不要,但是后面操作一定会用,所以就在这里先执行了)

        然后在.ssh文件下新建文件:

        vi  authorized_keys    

        将本地主机的公钥(id_rsa.pub)的内容复制到authorized_keys文件中

        修改authorized_keys文件的权限:

        sudo chmod 600  authorized_keys

        重启ssh:

        sudo service ssh restart

      4)安装nodejs环境

        安装必要的工具:

        sudo apt-get install vim openssl build-essential libssl-dev wget curl git
    

        安装nvm:

        wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
    

        安装node,npm: 

        nvm install v6.11.1
    

        选择nodejs版本:

        nvm use 6.11.1
    

        设置默认的nodejs版本:

        nvm alias default v6.11.1
    

        安装pm2:

        npm install pm2 -g

     3.上传代码到git仓库

      在github中新建一个仓库,名为pm2deploy

      接下来设置ssh,依次点击setting->SSH and GPG keys->new SSH key,其中的key就是上面步骤中通过ssh-keygen命令生成的公钥,title为自定义,可以随便填,通过:

      cat ~./ssh/id_rsa.pub

      即可输出id_rsa.pub的内容,复制到key中,然后点击add ssh key即可

      在此添加两个公钥,一个是本地主机的,一个是远程服务器的,添加之后,本地主机和服务器都可以通过git clone ssh@.....来下载仓库的代码了

    4.pm2从本地主机发布

      1)pm2的ecosystem.js配置   

        在本地源码目录下输入:

        pm2 ecosystem
    

        生成pm2的配置文件ecosystem.config.js: 

    module.exports = {                                                                                                                                           
      /** 
       * Application configuration section
       * http://pm2.keymetrics.io/docs/usage/application-declaration/
       */
      apps : [ 
    
        // First application
        {   
          name      : 'API',
          script    : 'app.js',
          env: {
            COMMON_VARIABLE: 'true'
          },  
          env_production : { 
            NODE_ENV: 'production'
          }   
        },  
    
        // Second application
        {   
          name      : 'WEB',
          script    : 'web.js'
        }   
      ],  
    
      /** 
       * Deployment section
       * http://pm2.keymetrics.io/docs/usage/deployment/
       */
      deploy : { 
        production : { 
          user : 'node',
          host : '212.83.163.1',
          ref  : 'origin/master',
          repo : 'git@github.com:repo.git',
          path : '/var/www/production',
          'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
        },  
        dev : { 
          user : 'node',
          host : '212.83.163.1',
          ref  : 'origin/master',
          repo : 'git@github.com:repo.git',
          path : '/var/www/development',
          'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env dev',
          env  : { 
            NODE_ENV: 'dev'
          }   
        }   
      }
    };
    

      新建一个文件:    

     vim ecosystem.json  复制ecosystem.config.js的内容到ecosystem.json中,注意js与json的区别
    

      apps以数组的形式是为了部署多应用准备的,这里我们只部署一个应用,可以去掉第二个元素。script为程序的入口文件,这里改为你自己的入口文件即可。

      apps的配置介绍玩了,生下的是部署配置(deploy),部署配置包括production(生产环境)和dev(开发环境),这里只介绍生产环境,开发环境类似(可以先去掉开发环境)。

        "production":{
        "user":  "qqqq(登录服务器的用户名)", 
        "host": "120.77.156.181(服务器公网ip)",
        "ref": "git@开头的仓库地址",
        "repo": "/deploy/app/production",
        "post-deploy": "npm install --registry=https://registry.npm.taobao.org &&  pm2 startOrRestart ecosystem.json --env production",
        "env": {
          "NODE_ENV": "production"
        }
      }

      修改完后保存,然后执行pm2 deploy命令

     pm2 deploy ecosystem.json production setup
    

      继续执行部署命令:

      pm2 deploy ecosystem.json production
    

      如果没有问题,会有如下输出(最后两行):

     [PM2][WARN] Applications Movie not running, starting...

      [PM2] App [Movie] launched (1 instances)
      ┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────────┐
      │ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ watching │
      ├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────────┤
      │ Movie │ 0 │ fork │ 3722 │ online │ 0 │ 0s │ 4% │ 18.4 MB │ disabled │
      └──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────────┘
      Use `pm2 show <id|name>` to get more details about an app
      ○ hook test
      ○ successfully deployed origin/master
      --> Success

      至此,pm2的部署完毕,此时可以通过120.77.156.181:port来访问部署的应用了,这里如果有域名,可以通过nginx反向代理,设置域名访问。

      2)pm2的一些命令:

        pm2 log 查看启动日志

        pm2 status 查看实例信息

        pm2 stop app 关闭名为app的实例

        pm2 delete app 删除名为app的实例排名

    5.服务器端设置pm2开机自启动

      ubuntu系统两个命令就可以搞定:

      进入服务器,输入如下命令:  

      pm2 save
      pm2 startup  

    以上就是pm2部署node应用的流程,正常的应用还包括数据库,以及服务器安全问题的配置,这里略去没写。 

             

        

  • 相关阅读:
    由一次自建库迁移到阿里云RDS引发的性能问题。
    pycharm2017自建注册服务器
    linux 邮件工具利器sendEmail时效超好
    python利用smtplib和MIMETYPE发送邮件
    如何去除本地文件与svn服务器的关联
    【转】nginx提示:500 Internal Server Error错误的解决方法
    Eclipse SVN插件安装
    Weblogic用户名密码获取
    Io 异常: The Network Adapter could not establish the connection
    Oracle修改字段名、字段数据类型
  • 原文地址:https://www.cnblogs.com/y-yxh/p/7359122.html
Copyright © 2020-2023  润新知