在 ubuntu 20.04 服务器上更新网站代码的最佳方法是什么?
What is the best way to update website code on a ubuntu 20.04 server?
我最近部署了我的第一个应用程序,我希望能够大约每周更新一次或两次网站代码。为了更新我的网站,我使用 git 将我的代码推送到 github。然后,我将存储库克隆到我的 ubuntu 服务器上,该服务器使用 pm2 来保持服务器连接。我的网站使用 ec2 进行托管。克隆新代码后,我 运行 'npm install' 在我的应用程序上添加新的 'build' 文件夹并更新 .env 变量。然后我重新启动 pm2 服务器,就是这样。这不会造成太多停机时间(可能几分钟),我可能需要 20 分钟,这很好,但我的问题是……我做错了吗?有没有更有效的方法来更新我的网站?也许一个没有停机时间或更快的东西?
是的,有更好的方法!您所描述的通常称为持续 Integration/Continuous 部署,或 CI/CD。 CI/CD 是开发人员操作 (devops) 的一个领域,包括用于自动化构建、测试和部署应用程序的工具和技术。您有多种选择,具体取决于此解决方案需要的稳健程度。这里有一些:
您可以使用 Github Actions 来自动化一些与您现在正在做的事情非常相似的事情。您无需手动 运行 命令,而是将它们编写为 运行 在 Docker 容器中托管在 Github 上的脚本。当您标记提交或在特定分支上提交时,您可以将操作配置为 运行。这将消除 运行 手动执行命令的单调乏味,但不会消除部署过程中的停机时间。 Github 的免费计划包括每月 2,000 分钟的自动化时间,这听起来足以满足您的需求。当然,它的用途远不止这个简单的场景。
AWS CodePipeline 是 AWS 的 CI/CD 服务。类似于 GitHub 操作,它可用于编排复杂的操作序列以构建、测试和部署应用程序。 AWS 允许在其免费层上使用一个活动管道。对于您的用例,Github Actions 和 CodePipeline 之间可能没有显着差异,因此您可能需要阅读入门文档并选择更吸引您的文档。
您可以在 Elastic Beanstalk 环境中创建应用程序,而不是使用单个 EC2 实例。 Elastic Beanstalk 是一种简化常见应用程序模式部署的服务。 EB 包括跨多个 EC2 实例的负载平衡、自动缩放和管理部署。这将使您能够在不停机的情况下进行部署,因为 EB 环境将管理部署并在实例更新时停止服务,同时让其他实例继续服务。使用 EB 可能会比您现在正在做的事情产生额外的成本,并且您可能会发现它限制了与其支持的应用程序模式不同的用例。但是对于部署在几个 Web 服务器上的简单 nodejs 应用程序,这就可以正常工作。
还有 很多 其他选项,但我认为以上选项之一可以很好地介绍 AWS 中的 CI/CD。
我最近部署了我的第一个应用程序,我希望能够大约每周更新一次或两次网站代码。为了更新我的网站,我使用 git 将我的代码推送到 github。然后,我将存储库克隆到我的 ubuntu 服务器上,该服务器使用 pm2 来保持服务器连接。我的网站使用 ec2 进行托管。克隆新代码后,我 运行 'npm install' 在我的应用程序上添加新的 'build' 文件夹并更新 .env 变量。然后我重新启动 pm2 服务器,就是这样。这不会造成太多停机时间(可能几分钟),我可能需要 20 分钟,这很好,但我的问题是……我做错了吗?有没有更有效的方法来更新我的网站?也许一个没有停机时间或更快的东西?
是的,有更好的方法!您所描述的通常称为持续 Integration/Continuous 部署,或 CI/CD。 CI/CD 是开发人员操作 (devops) 的一个领域,包括用于自动化构建、测试和部署应用程序的工具和技术。您有多种选择,具体取决于此解决方案需要的稳健程度。这里有一些:
您可以使用 Github Actions 来自动化一些与您现在正在做的事情非常相似的事情。您无需手动 运行 命令,而是将它们编写为 运行 在 Docker 容器中托管在 Github 上的脚本。当您标记提交或在特定分支上提交时,您可以将操作配置为 运行。这将消除 运行 手动执行命令的单调乏味,但不会消除部署过程中的停机时间。 Github 的免费计划包括每月 2,000 分钟的自动化时间,这听起来足以满足您的需求。当然,它的用途远不止这个简单的场景。
AWS CodePipeline 是 AWS 的 CI/CD 服务。类似于 GitHub 操作,它可用于编排复杂的操作序列以构建、测试和部署应用程序。 AWS 允许在其免费层上使用一个活动管道。对于您的用例,Github Actions 和 CodePipeline 之间可能没有显着差异,因此您可能需要阅读入门文档并选择更吸引您的文档。
您可以在 Elastic Beanstalk 环境中创建应用程序,而不是使用单个 EC2 实例。 Elastic Beanstalk 是一种简化常见应用程序模式部署的服务。 EB 包括跨多个 EC2 实例的负载平衡、自动缩放和管理部署。这将使您能够在不停机的情况下进行部署,因为 EB 环境将管理部署并在实例更新时停止服务,同时让其他实例继续服务。使用 EB 可能会比您现在正在做的事情产生额外的成本,并且您可能会发现它限制了与其支持的应用程序模式不同的用例。但是对于部署在几个 Web 服务器上的简单 nodejs 应用程序,这就可以正常工作。
还有 很多 其他选项,但我认为以上选项之一可以很好地介绍 AWS 中的 CI/CD。