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

How does deployment on remote servers work?

我对版本控制部署环境有点陌生,我在学习问题:如果开发人员不能在同一台本地机器上工作并且被迫始终在 远程服务器 上工作,部署环境如何工作?

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

对于这个例子,我考虑了三个部署环境:开发暂存生产;以及三个存储环境:localrepository server 和 final server.

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

PS。我在想服务器上的暂存测试可能会通过登录或 ip 检查限制访问,如果你想知道的话。

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

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

    • 创建一个 private/public 代表os来处理你的项目
  • 本地开发:

    • 开发者会从你的repo中克隆项目并贡献给它,建议每个人在一个分支上工作,并为每个新功能创建一个新分支
    • 在您的团队中,有一个人负责合并准备好的分支与 master 分支
    • 我强烈建议在开发期间使用虚拟机:
      • 将开发环境与host机器隔离并处理依赖关系
      • 让虚拟机与远程生产服务器相同
      • 易于重置、删除、复制
      • ...
      • 我建议使用 VirtualBox for VM provider and Vagrant 进行配置
      • 我建议你的项目文件夹是你的 host 机器和你的 VM 之间的 shared folder,所以,你将在你的 host OS 使用您喜欢的编辑器,同时此代码存在并在您的 VM 中运行,是不是太棒了?!
    • 如果您正在使用 python,我也强烈建议您使用虚拟环境(如 virtualenv or anaconda)来隔离和管理内部依赖关系
    • 然后每个开发人员在编写了一些源代码之后,可以提交并将他的更改推送到代表ository
    • 我建议使用项目自动化设置工具,例如(fabric/fabtools for python):
      • 制作一个脚本或其他东西,只需单击一下或一些命令,即可重现所有环境和所有依赖项以及项目启动和 运行 所需的一切,因此所有开发人员后端、前端、设计人员...无论他们的知识和 host 机器类型如何,都可以非常简单地完成项目 运行。我还建议对远程服务器做同样的事情,无论是手动还是使用像 (fabric/fabtools) 这样的工具 该脚本将主要安装 os 依赖项,然后是项目依赖项,然后从版本控制中克隆项目 repo,为此,您需要授予远程服务器(测试、暂存和生产)对 Rep 的访问权限ository:将每个服务器的 ssh public 密钥添加到版本控制系统中的密钥(或 use agent forwarding with fabric
  • 远程服务器:

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

    1. 让远程服务器(测试、暂存和生产)访问 Repository:将每个服务器的 ssh public 密钥添加到版本控制系统(或用户)中的密钥代理转发 fabric)
    2. 开发人员在他的机器上编写代码
    3. 最终为他的代码编写测试并在本地(和测试服务器上)运行它们
    4. 开发人员将他的代码提交并推送到他正在使用的分支到远程 Repository
    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 等工具来自动执行部署任务。 瞧!部署完成!

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