Deploy con pm2

April 17, 2019 • ☕️ 2 minutos de lectura

Lo primero que vamos a hacer es instalar el paquete pm2 de forma global, para ello usaremos…npm install pm2 -g. Si falla prueba usando sudo.

Ahora creamos un fiehcero llamado ecosystem.config.js, podemos hacerlo usando touch ecosystem.config.js

Lo siguiente será añadir nuestra configuración, lo estamos haciendo en javascript, pero también soporta JSON y YAML.

module.exports = {
  apps: [
    {
      name: "MyApp",
      script: "./bin/www",
      args: "",
      env_production: {
        NODE_ENV: "production",
      },
    },
  ],

  /**
   * Deployment section
   * http://pm2.keymetrics.io/docs/usage/deployment/
   */
  deploy: {
    production: {
      user: "usuario",
      host: "212.83.163.1",
      ref: "origin/master",
      repo: "git@github.com:repo.git",
      path: "/var/www/production",
      key: "~/.ssh/id_rsa",
      ssh_options: ["ForwardAgent=yes"],
      "post-deploy":
        "npm install; pm2 reload ecosystem.config.js --env production",
    },
    staging: {
      user: "root",
      host: "212.83.163.2",
      ref: "origin/master",
      repo: "git@github.com:repo.git",
      path: "/var/www/staging",
      key: "~/.ssh/id_rsa",
      ssh_options: ["ForwardAgent=yes"],
      "post-deploy":
        "npm install; pm2 reload ecosystem.config.js --env staging",
    },
    dev: {},
  },
}
  • user: Usuario en nuestro servidor
  • host: Ip de nuestro servidor, podemos añadir un array.
  • ref: rama de nuestro proyecto en git.
  • repo: dirección ssh de nuestro repositorio
  • path: directorio donde queremos hacer el deploy
  • key: Ruta de nuestra clave ssh
  • ssh_options: Opciones ssh, sabe destacar post-deploy

    — post-deploy: Aquí añadiremos todo lo que queramos ejecutar después del deploy, es un buen lugar para añadir npm install, y pm2 reload ecosystem.config.js para forzar el reinicio de nuestra app.

La primera vez que lo usemos, debemos ejecutar:

pm2 deploy ecosystem.config.js staging setup

Para futuras actualizaciones

pm2 deploy ecosystem.config.js staging update

Debemos añadir nuestra llave SSH a ssh-agent para ejecutar ssh-agent en segundo plano

eval "$(ssh-agent -s)"

Añadir tu llave privada a ssh-agent.

ssh-add -K ~/.ssh/id_rsa

Si no tienes llave ssh, puedes crearla ahora mismo

ssh-keygen -t rsa -b4096 -C "tu@mail.com"

Application configuration section