我的电脑和带有 ssh 的 Web 服务器上有一个 Web 应用程序。问题是我正在我的计算机上本地开发应用程序,我想将它与服务器同步,而不是通过 ftp 复制文件。还有其他方法吗?混帐?
5 回答
您没有指定涉及哪些操作系统或语言,因此很难具体说明。
Git(以及 SVN 和 Mercurial 等)非常适合版本控制,但保持系统同步通常需要的不仅仅是版本控制。如果您是 Python 类型的人,您可能会喜欢阅读现代 Python 黑客工具:Virtualenv、Fabric 和 Pip。这不仅要保持代码同步,还要保持整个环境同步。
为了简单地保持两个系统上的文件同步,我推荐rsync。我将它用于各种任务,无论是在单台机器上还是在机器之间备份/同步目录。我们在 SoCal 有一个客户,我们正在执行超过 5 TB 数据的 3 级备份策略(2 个现场,1 个非现场),其核心是 rsync 和rsnapshot。
更新评论:
您的网站是用什么编写的并不重要,您仍然必须确保您的所有更改都可以用于生产。这通常是一个多步骤的过程。Fabric 专门设计用于封装这些步骤并将它们简化为单个命令。Pip 和 virtualenv 在捕获额外的库更改等方面更特定于 Python,但 Ruby/Rails 可能具有等价的东西。目标是拥有从开发到登台所需的一切所需的单一命令,以及从登台到生产的另一个单一命令。
请注意:不要直接从您的开发机器自动同步到您的生产目录。始终首先转到生产机器上的中间暂存目录。几乎可以肯定的是,这两台机器没有 100% 相同的环境,并且在 dev 上工作的东西在你的生产机器上可能根本不工作。最好多花一两分钟来测试登台,而不是让整个生产站点出现 500 错误。
我通常希望保留git
用于您的开发环境。
您的构建将通过指定要构建的标签(这样您的构建被审计和可重复)来构建一些可部署的(可能是 . ),然后您将使用/tar.gz
将其复制到您的服务器。ssh
scp
我不会只从开发环境同步。你希望它用于开发中的东西、你正在试验的东西、支持工具和文件等。
您应该从源代码存储库为您的开发和生产构建自动构建。
您还应该有一个自动化脚本来部署在开发和生产环境中。
然后,要部署到生产环境,只需签入开发代码、运行构建脚本,然后运行生产部署脚本即可。
无论您使用什么软件/环境/工具,这一点都成立。
Capistrano最初是为特别部署 Rails 应用程序而构建的,后来已经扩展为部署任何类型的 Web 应用程序(称为rails-less 部署)。
设置完成后,工作流程如下所示:
- 编辑程序的源代码。
- 签入您的更改并将它们推送到中央存储库(git/mercurial/svn/whatever)
cap deploy
在你的程序上运行。
第 3 步是魔法发生的地方,这就是 Capistrano 的初衷。Capistrano 将从存储库中签出您的代码的新副本,将该代码复制到新的“发布”目录(命名为20091028230834
,时间戳),最后将该目录链接current
到您的最新副本。在中间,如果存在迁移,它可能会运行迁移。剩下的目录设置如下:
...deploy-to-path/current -> ./releases/20091028230834
...deploy-to-path/releases/
20091028230834/
20091028225623/
... # You can configure the number of releases kept after deployment.
...deploy-to-path/shared/
cached-copy/ # A cached copy of your repository, which Capistrano updates
... # Any shared data, like file uploads, for your application.
Capistrano 的文档不是很好。他们真的需要有人一起来,连贯地写出来。不过,本质上,您正在做的是编写一个包含deploy.rb
以下信息的文件 ( ):
- 服务器在哪里?(例如 www.example.com)
- 您的 ssh 凭据是什么?(用户密码)
- 您的代码存储在哪里?(您的存储库 URL)
- 你想要服务器上的代码在哪里?
首先,我建议capify
在您的应用程序上运行(给自己默认文件)并在测试服务器(或服务器上的测试目录)上运行它,看看它做了什么。一旦你得到它部署的东西,你可以定制它来做额外的移动/符号链接。
您还应该考虑如何发布内容......将不断的变化推向生产可能会在出现问题时很难追踪。
正如其他人所提到的,您可以使用 git 同步来管理您的代码。当您有一组您认为已经准备好的新更改时,可以将它们放在一个分支中,或者至少标记它们,以便您知道哪些更改集一起发生了。
然后,您可以将这些更改同步到暂存目录,并在其中验证精简后翻转开关。