menu

使用SSH轻松部署

在许多部署工作流程中,例程基本上由连接到多个服务器的SSH组成,git pull最新版本之后重载到应用中。

PM2部署工具的目的是自动执行此任务。

设置一系列远程主机,一个预先部署/部署后命令行操作,然后你便可以完成。

安装

SSH设置

确保您的本地机器上有公共的ssh密钥:

ssh-keygen -t rsa
ssh-copy-id node@myserver.com

生态系统文件

您首先需要使用所有必要的信息来配置您的ecosystem.config.js:

module.exports = {
  apps: [{
    name: "app",
    script: "app.js"
  }],
  deploy: {
    // "production" is the environment name
    production: {
      // SSH key path, default to $HOME/.ssh
      key: "/path/to/some.pem",
      // SSH user
      user: "ubuntu",
      // SSH host
      host: ["192.168.0.13"],
      // SSH options with no command-line flag, see 'man ssh' 
      // can be either a single string or an array of strings
      ssh_options: "StrictHostKeyChecking=no",
      // GIT remote/branch
      ref: "origin/master",
      // GIT remote
      repo: "git@github.com:Username/repository.git",
      // path in the server
      path: "/var/www/my-repository",
      // Pre-setup command or path to a script on your local machine
      pre-setup: "apt-get install git ; ls -la",
      // Post-setup commands or path to a script on the host machine
      // eg: placing configurations in the shared dir etc
      post-setup: "ls -la",
      // pre-deploy action
      pre-deploy-local: "echo 'This is a local executed command'"
      // post-deploy action
      post-deploy: "npm install",
    },
  }
}

要获取有关部署选项的更多信息,请查看生态系统文件参考

请注意,远程路径必须为空,因为它将由PM2部署进行填充

设置

进行您的第一次部署并填充远程路径:

pm2 deploy production setup

部署

这里是一些有用的命令:

# Setup deployment at remote location
pm2 deploy production setup

# Update remote version
pm2 deploy production update

# Revert to -1 deployment
pm2 deploy production revert 1

# execute a command on remote servers
pm2 deploy production exec "pm2 reload all"

部署选项

通过 pm2 deploy help显示部署帮助:

pm2 deploy <configuration_file> <environment> <command>

  Commands:
    setup                run remote setup commands
    update               update deploy to the latest release
    revert [n]           revert to [n]th last deployment or 1
    curr[ent]            output current release commit
    prev[ious]           output previous release commit
    exec|run <cmd>       execute the given <cmd>
    list                 list previous deploy commits
    [ref]                deploy to [ref], the "ref" setting, or latest tag

强制部署

您可能会收到此消息:

--> Deploying to dev environment
--> on host 192.168.1.XX

  push your changes before deploying

Deploy failed

这意味着您本地系统中有些改变没有被push到您的git存储库中,且由于部署脚本通过 git pull获得更新,它们将不会存在于您的服务器上。如果您想在不提交任何数据的情况下进行部署,您可以附加 --force选项:

pm2 deploy ecosystem.json production --force

注意事项

  • 您可以使用 --force选项跳过本地更改检测

  • 验证您的远程服务器是否具有git clone存储库的权限

  • 您可以根据要部署代码的环境,声明特定的环境变量。 例如,要为生产环境声明变量,请添加 “env_production”: {} 并声明变量。

  • 您可以在package.json中嵌入 “apps”和 “deploy”分区

故障排除

SSh clone错误

在大多数情况下,这些错误都是由 pm2没有正确的密钥来clone进您的存储库而引起。 您需要在每一步都验证密钥是否可用。

第一步 如果您确定您的密钥有效,请先尝试在目标服务器上运行 git clone your_repo.git。 如果成功,请转到下一步。 如果失败,请确保您的密钥既存储在服务器上,也存储在您的git账户中。

第二步 默认情况下 ssh-copy-id复制默认标识,通常名为id_rsa。 如果这不是合适的密钥:

ssh-copy-id -i path/to/my/key your_username@server.com

这会将您的公钥添加到 〜/ .ssh / authorized_keys文件中。

第三步 如果您收到以下错误:

--> Deploying to production environment
--> on host mysite.com
  ○ hook pre-setup
  ○ running setup
  ○ cloning git@github.com:user/repo.git
Cloning into '/var/www/app/source'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights and that the repository exists.

**Failed to clone**

Deploy failed

…您可能会想创建一个ssh配置文件。 这是确保正确的ssh密钥可用于任何您想要clone的特定存储库的可靠方法。 看这个例子

# ~/.ssh/config
Host alias
    HostName myserver.com
    User username
    IdentityFile ~/.ssh/mykey
# Usage: `ssh alias` 
# Alternative: `ssh -i ~/.ssh/mykey username@myserver.com`

Host deployment
    HostName github.com
    User username
    IdentityFile ~/.ssh/github_rsa
# Usage:
# git@deployment:username/anyrepo.git 
# This is for cloning any repo that uses that IdentityFile. This is a good way to make sure that your remote cloning commands use the appropriate key

关于Windows

要在Windows下运行部署脚本,您需要使用像bash这样的unix外壳,所以我们建议安装Git bashBabunCygwin

贡献

这个工具是PM2的一个单独模块。 您可以在这里为它做出贡献。

疑问?

我们一直乐于帮您解决可能遇到的问题。搜索我们的文档或查看常见问题的答案。您也可以在我们的社区论坛发布问题或评论