如何在没有停机时间的情况下升级网站?

时间:2014-03-14 07:35:55

标签: php deployment yii cassandra database-migration

我想在没有停机的情况下升级我的网站。我做了研究,并没有找到一种方法来升级它而不停机(几秒钟没事)。我想的方法如下,但我不确定是否有任何良好的专业方式。请帮我解决一下这个问题。

  1. 将新表/ CF添加到数据库(数据库是Cassandra, 我们不应该在现有表格/ CF中进行任何更改
  2. 在不同目录的在线服务器中部署项目,以便 用户仍然可以使用现有网站。
  3. 将上传的项目指向不同的端口并检查是否 一切正常。
  4. 如果一切正常,请将符号链接更改为上传的目录
  5. 如果你有,请告诉我任何其他好的方法。

      

    我在本地服务器中使用SVN

2 个答案:

答案 0 :(得分:5)

立即更新服务器

好的,这是最好也是最简单的方法之一就是使用Git。所以,你应该做的是在Git中托管你的代码,然后每当你想要更新站点时,只需SSH进入服务器并执行Git Pull。它是即时的,它会更新它。您也可以使用Git Hooks来进一步解决您的问题。

有几种方法可以解决这个问题,但其中一种更简单的方法就是这样。

让我详细解释一下如何做到这一点:

您的网站源应该位于本地工作站上的Git存储库中。我将描述如何设置,以便我可以通过运行" git push online"来实现更改。

本地存储库

本地存储库的设置方式并不重要,但为了争论,我们假设您从头开始创建。

$ mkdir somesite && cd somesite
$ git init
Initialized empty Git repository in /home/sankalpsingha/somesite/.git/
$ echo 'Test!' > index.html
$ git add index.html
$ git commit -q -m "This is the first push."

远程存储库

我认为该网站将存在于您具有ssh访问权限的服务器上,并且已设置好所有内容,以便您可以在不必键入密码(i.e., that your public key is in ~/.ssh/authorized_keys and you are running ssh-agent locally)的情况下进行ssh。 在服务器上,我们创建一个新的存储库来镜像本地存储库。

$ mkdir coolsite.git && cd coolsite.git
$ git init --bare
Initialized empty Git repository in /home/sankalpsingha/coolsite.git/

现在让我们创建并定义hools作为post-receive钩子,将最新的树检出到Web服务器的DocumentRoot中(此目录必须存在; Git不会为你创建):

$ mkdir /var/www/www.somesite.org
$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/var/www/www.somesite.org git checkout -f
$ chmod +x hooks/post-receive

回到工作站,我们为远程镜像定义一个名称,然后镜像到它,创建一个新的" master"在那里分支。

$ git remote add online ssh://server.somesite.org/home/sankalpsingha/coolsite.git
$ git push online +master:refs/heads/master

在服务器上,/ var / www / www.somesite.org现在应该包含文件的副本,与任何.git元数据无关。

更新过程

跑步:

$ git push online

这会将任何新提交转移到远程存储库,其中post-receive挂钩将立即为您更新DocumentRoot。 (这比将工作站定义为服务器上的远程工具,以及手动或从cron作业运行" git pull"更方便,并且它不需要ssh可以访问您的工作站。)

答案 1 :(得分:1)

您可以使用某些CI或部署工具。我是手动做的。这是我正在做的方式。

  1. 我有一个来自git的workcopy目录,git hook用于在push上同步它。
  2. 然后我使用rsync将worckopy目录与站点同步。
  3. 所有数据库更改都是通过迁移完成的,因此1个命令yiic migrate足以创建新表或更改现有表。
  4. 使用这种方法,没有实际的停机时间,有些页面最多可以使用5-10秒,但所有系统都可以使用。

      

    将上传的项目指向不同的端口并检查是否   一切正常。如果一切正常,改变了   符号链接到上传的目录

    这是一种糟糕的方式,用于测试您是否需要测试服务器,或者在本地计算机上使用与服务器上相同的配置和参数进行测试。例如,Vagrant可以在本地计算机上创建任何环境进行测试。

    如果您需要通过测试(例如单元测试或功能测试),请观察CI工具。