it-swarm.cn

您能否推荐一些方法来管理基于Linux的Web服务器的代码部署?

我总是使用一个非常简单的bash脚本来部署代码。我正在将Subversion用于Mercurial,但我并不认为修订控制软件对于部署很重要。

有什么方法可以做到这一点?

#!/bin/sh
date=`date +%Y%m%d_%H%M%S`
tar -zcvf app-dir-$date.tar.gz app/dir 
tar -zcvf app-templates-$date.tar.gz app/templates
tar -zcvf app-media-$date.tar.gz app/media
svn export http://example.com/somepath/trunk hh/ --force
7
citadelgrad

我用 Mercurial管理一切 ,包括我的静态HTML页面。它让我的生活变得非常轻松。

好处包括

  • 所有特权版本控制提供(回滚,里程碑标记等)
  • 能够匆忙克隆您的网站
  • 您始终拥有可用的本地备份/副本
  • 如果您倾向于在原地进行更改(在服务器上就位),则易于保持同步
  • 大多数共享主机(如果你处理一个)不介意安装它

免责声明,我写了教程。是的,您使用的VCS在某种程度上确实很重要。例如,我不会在这种情况下使用某些东西,我无法在本地提交并进行一次大的推送/更新。这只会迫使我将太多可能存在问题的变化归结为一个承诺。

I可以用Subversion来做,而我根本不会敲击SVN。我只是认为Mercurial是一个更好的工具,可以解决您要解决的问题。

我认为除非你别无选择,否则你不应该“解决”你的工具。这样做有点失败了拥有它们的目的,你有一个选择:)

5
Tim Post

除了其他答案中的出色建议之外,您可能还需要考虑进行原子更新是否重要。

在我的FreeBSD服务器上,我通过两种机制完成此任务:

  • 版本化我的所有静态资源。 (例如http://static.example.com/images/logo.1.pnghttp://static.example.com/style/main.3.css)。这允许我在更新动态站点之前直接svn update静态站点,而不必担心用户在旧页面中看到新文件。

  • 对整个动态网站进行版本控制。在我的例子中,我的文档根指向一个符号链接。我的策略是让新版本的生产到位,然后用一个命令推送它。 。G。这样的事情:

    cp -Rp www.site1.com.1 www.site1.com.2(或svn checkout

    svn update site1.com.2(可能首先需要svn switch

    ln -sf site1.com.2 www.site1.com(原子地将更改转换为生产)

这可以确保我的所有用户都不会看到半生不熟的页面。他们要么看到旧版本,如果它仍然在他们的缓存中,或者新版本。

如果您不将用户上传的内容与动态网站混合,此策略仅适用。

1
JasonBirch

我们使用ant的 scp task ,用 修改后的选择器 。这意味着您只需更新自上次上载以来已更改的文件。不幸的是,修改后的选择器似乎只是为个人使用而设计,而不是与团队成员共享。 cache.properties文件具有用户工作目录的路径名。我们写了一堆蚂蚁目标,将cache.properties文件按下一种格式,可以在开发人员之间共享,然后按摩回到蚂蚁需要的格式。格式也因Windows环境和GNU/Linux环境而异。

0
Don Kirkby

在推出更新之前,使用版本控制是不是需要关注自己备份网站?

如果它正确完成,svn update(或等效)应该足够了,如果是错误,那么将其回滚到之前的提交?无论如何,这就是我们所做的。提交所有更改,svn update登台服务器,如果一切正常则svn update实时服务器。

0
Mark Henderson