使用SSH轻松部署

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

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

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

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

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

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

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

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

  1. pm2 deploy production setup

部署选项

通过 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. prev[ious] output previous release commit
  7. exec|run <cmd> execute the given <cmd>
  8. list list previous deploy commits
  9. [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选项:

注意事项

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

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

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

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

SSh 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的特定存储库的可靠方法。 看这个例子

关于Windows

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

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

疑问?