使用SSH轻松部署

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

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

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

安装

SSH设置

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

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

生态系统文件

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

  1. module.exports = {
  2. apps: [{
  3. name: "app",
  4. script: "app.js"
  5. }],
  6. deploy: {
  7. // "production" is the environment name
  8. production: {
  9. // SSH key path, default to $HOME/.ssh
  10. key: "/path/to/some.pem",
  11. // SSH user
  12. user: "ubuntu",
  13. // SSH host
  14. host: ["192.168.0.13"],
  15. // SSH options with no command-line flag, see 'man ssh'
  16. // can be either a single string or an array of strings
  17. ssh_options: "StrictHostKeyChecking=no",
  18. // GIT remote/branch
  19. ref: "origin/master",
  20. // GIT remote
  21. repo: "git@github.com:Username/repository.git",
  22. // path in the server
  23. path: "/var/www/my-repository",
  24. // Pre-setup command or path to a script on your local machine
  25. pre-setup: "apt-get install git ; ls -la",
  26. // Post-setup commands or path to a script on the host machine
  27. // eg: placing configurations in the shared dir etc
  28. post-setup: "ls -la",
  29. // pre-deploy action
  30. pre-deploy-local: "echo 'This is a local executed command'"
  31. // post-deploy action
  32. post-deploy: "npm install",
  33. },
  34. }
  35. }

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

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

设置

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

  1. pm2 deploy production setup

部署

这里是一些有用的命令:

  1. # Setup deployment at remote location
  2. pm2 deploy production setup
  3. # Update remote version
  4. pm2 deploy production update
  5. # Revert to -1 deployment
  6. pm2 deploy production revert 1
  7. # execute a command on remote servers
  8. pm2 deploy production exec "pm2 reload all"

部署选项

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

  1. pm2 deploy <configuration_file> <environment> <command>
  2. Commands:
  3. setup run remote setup commands
  4. update update deploy to the latest release
  5. revert [n] revert to [n]th last deployment or 1
  6. curr[ent] output current release commit
  7. prev[ious] output previous release commit
  8. exec|run <cmd> execute the given <cmd>
  9. list list previous deploy commits
  10. [ref] deploy to [ref], the "ref" setting, or latest tag

强制部署

您可能会收到此消息:

  1. --> Deploying to dev environment
  2. --> on host 192.168.1.XX
  3. push your changes before deploying
  4. Deploy failed

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

  1. 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。 如果这不是合适的密钥:

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

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

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

  1. --> Deploying to production environment
  2. --> on host mysite.com
  3. hook pre-setup
  4. running setup
  5. cloning git@github.com:user/repo.git
  6. Cloning into '/var/www/app/source'...
  7. Permission denied (publickey).
  8. fatal: Could not read from remote repository.
  9. Please make sure you have the correct access rights and that the repository exists.
  10. **Failed to clone**
  11. Deploy failed

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

  1. # ~/.ssh/config
  2. Host alias
  3. HostName myserver.com
  4. User username
  5. IdentityFile ~/.ssh/mykey
  6. # Usage: `ssh alias`
  7. # Alternative: `ssh -i ~/.ssh/mykey username@myserver.com`
  8. Host deployment
  9. HostName github.com
  10. User username
  11. IdentityFile ~/.ssh/github_rsa
  12. # Usage:
  13. # git@deployment:username/anyrepo.git
  14. # 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的一个单独模块。 您可以在这里为它做出贡献。

疑问?

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

原文: https://pm2.io/doc/zh/runtime/guide/easy-deploy-with-ssh/