远程服务器上的部署如何工作?

Dan*_*nte 8 deployment version-control webserver web-development-server web

我对版本控制部署环境有点新意,我对此事的了解已经停止:如果开发人员无法在同一台本地计算机上工作并且被迫始终工作,部署环境如何工作?一个远程服务器

如何根据最佳实践设置部署环境的流程

在本例中,我考虑了三种部署环境:开发,升级生产 ; 和三个存储环境:本地,存储库服务器和最终服务器.

这是我提出的流程图,但我不知道它是否正确或如何正确实现它:

部署版本控制流程图

PS.我以为服务器上的暂存测试可以通过登录或ip检查限制访问,以防你想知道.

Yah*_*oui 5

我可以给你(根据我的经验)一个好的和直接的实践,这不是唯一的方法,因为没有关于如何处理所有项目的唯一标准:

  • 使用分布式版本控制系统(如 git/github):

    • 创建一个私有/公共存储库来处理您的项目
  • 本地发展:

    • 开发者将从你的 repo 中克隆项目并贡献给它,建议每个人在一个分支上工作,并为每个新功能创建一个新分支
    • 在你的团队中,有一个负责将准备好的master分支与分支合并
    • 我强烈建议在开发过程中使用虚拟机:
      • 将开发环境与主机隔离并处理依赖项
      • 拥有与远程生产服务器相同的虚拟机
      • 易于重置、移除、复制
      • ...
      • 我建议使用VirtualBox作为 VM provider 和Vagrant进行配置
      • 我建议您的项目文件夹shared folder位于主机和 VM 之间,因此,您将使用您喜欢的编辑器在主机操作系统上编写源代码,同时此代码存在并在您的 VM 中运行,位于是不是太棒了?!
    • 如果您正在使用python我还强烈建议使用虚拟环境(如virtualenvanaconda)来隔离和管理内部依赖项
    • 然后每个开发人员在编写一些源代码后,他可以提交并将他的更改推送到存储库
    • 我建议使用项目自动化设置工具,例如(用于 python 的fabric / fabtools):
      • 制作一个脚本或一些东西,一键或一些命令,复制所有环境和所有依赖项以及项目启动和运行所需的一切,所以所有开发人员后端、前端、设计师......无论他们的知识还是他们的主机类型可以让项目运行非常简单。我还建议对远程服务器执行相同的操作,无论是手动还是使用 (fabric/fabtools) 之类的工具该脚本将主要安装操作系统依赖项,然后是项目依赖项,然后从您的版本控制中克隆项目存储库,为此,您需要授予远程服务器(测试、登台和生产)访问存储库的权限:将每个服务器的 ssh 公钥添加到您的版本控制系统中的密钥中(或使用代理转发 fabric
  • 远程服务器:

    • 您至少需要一个生产服务器,使最终用户可以访问您的项目
    • 建议你也有一个测试和登台服务器(我想你知道每一个的目的)
  • 部署流程:Local-Repo-Remote 服务器,它是如何工作的?:

    1. 授予远程服务器(测试、登台和生产)访问存储库的权限:将每个服务器的 ssh 公钥添加到您的版本控制系统中的密钥(或使用 转发的用户代理fabric
    2. 开发人员在他的机器上编写代码
    3. 最终为他的代码编写测试并在本地(和测试服务器上)运行它们
    4. 开发人员提交并将他的代码推送到他正在使用的分支到远程存储库
    5. 部署:

      5.1 如果您想将功能分支部署到测试或暂存:

      • ssh访问服务器,然后访问cd项目文件夹(手动或通过自动化脚本从 repo 克隆)
      • git checkout <the branch used>
      • git pull origin <the branch used>

      5.2 如果您想部署到生产环境:

      • 做一个pull request后拉入请求得到由经理验证,并用合并master分支
      • ssh访问服务器,然后访问cd项目文件夹(手动或通过自动化脚本从 repo 克隆)
      • git checkout master # 不需要,因为它应该总是在 master 上
      • git pull origin master
        • 我建议写一个像fabric/fabtools这样的脚本或者使用像Jenkins这样的工具来自动化部署任务。瞧!部署完成!

这是一个稍微简化的方法,还有很多其他推荐的和最佳实践的工具和任务。