远程服务器上的部署如何工作?
How does deployment on remote servers work?
我对版本控制和部署环境有点陌生,我在学习问题:如果开发人员不能在同一台本地机器上工作并且被迫始终在 远程服务器 上工作,部署环境如何工作?
如何根据最佳实践设置部署环境的流程?
对于这个例子,我考虑了三个部署环境:开发、暂存和生产;以及三个存储环境:local、repository 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,它是如何工作的?:
- 让远程服务器(测试、暂存和生产)访问 Repository:将每个服务器的 ssh public 密钥添加到版本控制系统(或用户)中的密钥代理转发
fabric
)
- 开发人员在他的机器上编写代码
- 最终为他的代码编写测试并在本地(和测试服务器上)运行它们
- 开发人员将他的代码提交并推送到他正在使用的分支到远程 Repository
部署:
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 等工具来自动执行部署任务。
瞧!部署完成!
这是一种稍微简化的方法,还有许多其他推荐和最佳实践工具和任务。
我对版本控制和部署环境有点陌生,我在学习问题:如果开发人员不能在同一台本地机器上工作并且被迫始终在 远程服务器 上工作,部署环境如何工作?
如何根据最佳实践设置部署环境的流程?
对于这个例子,我考虑了三个部署环境:开发、暂存和生产;以及三个存储环境:local、repository 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
)
- 制作一个脚本或其他东西,只需单击一下或一些命令,即可重现所有环境和所有依赖项以及项目启动和 运行 所需的一切,因此所有开发人员后端、前端、设计人员...无论他们的知识和 host 机器类型如何,都可以非常简单地完成项目 运行。我还建议对远程服务器做同样的事情,无论是手动还是使用像 (fabric/fabtools) 这样的工具
该脚本将主要安装 os 依赖项,然后是项目依赖项,然后从版本控制中克隆项目 repo,为此,您需要授予远程服务器(测试、暂存和生产)对 Rep 的访问权限ository:将每个服务器的 ssh public 密钥添加到版本控制系统中的密钥(或 use agent forwarding with
远程服务器:
- 您至少需要一台生产服务器,让最终用户可以访问您的项目
- 建议你也有一个测试和临时服务器(我支持os你知道每个服务器的目的os
部署流程:Local-Repo-Remote server,它是如何工作的?:
- 让远程服务器(测试、暂存和生产)访问 Repository:将每个服务器的 ssh public 密钥添加到版本控制系统(或用户)中的密钥代理转发
fabric
) - 开发人员在他的机器上编写代码
- 最终为他的代码编写测试并在本地(和测试服务器上)运行它们
- 开发人员将他的代码提交并推送到他正在使用的分支到远程 Repository
部署:
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 等工具来自动执行部署任务。 瞧!部署完成!
- 让远程服务器(测试、暂存和生产)访问 Repository:将每个服务器的 ssh public 密钥添加到版本控制系统(或用户)中的密钥代理转发
这是一种稍微简化的方法,还有许多其他推荐和最佳实践工具和任务。