【问题标题】:How to upgrade a website without or less down time?如何在没有或更少停机时间的情况下升级网站?
【发布时间】:2014-04-19 09:06:55
【问题描述】:

我想在不停机的情况下升级我的网站。我进行了研究,但没有找到一种无需停机就可以升级它的方法(几秒钟就可以了)。我在想一个方法如下,但我不确定是否有任何好的专业方法。请帮助我了解如何改进这一点。

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

如果您有任何其他好的方法,请告诉我。

我在本地服务器中使用 SVN

【问题讨论】:

  • 这可能是网站管理员的问题吧?不是堆栈溢出。 webmasters.stackexchange.com
  • 此外,您可能还想研究使用 PaaS/SaaS 的部署和云托管。在我最近的一个项目中,我所要做的就是完成您所说的将代码推送到服务器(通过一个控制台语句),然后将其部署到服务器上(通过一个控制台语句)。有软件可以帮助你。它就在那里:D

标签: php deployment yii cassandra database-migration


【解决方案1】:

您可以使用一些 CI 或部署工具。我正在手动执行此操作。这是我的做法。

  1. 我有一个来自 git 的工作副本目录,并且 git hook 可以在推送时同步它。
  2. 然后我使用 rsync 将 worckopy 目录与站点同步。
  3. 所有数据库更改都通过迁移完成,因此 1 个命令 yiic migrate 足以创建新表或更改现有表。

使用这种方法实际上没有停机时间,某些页面最多可能会在 5-10 秒内不可用,但所有系统都会在这段时间内正常工作。

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

这是不好的方法,为了测试你需要测试服务器,或者在本地机器上使用与服务器上相同的配置和参数进行测试。例如,Vagrant 可以在本地机器上创建任何环境进行测试。

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

【讨论】:

    【解决方案2】:

    几乎即时更新服务器

    好吧,最好和最简单的方法之一是使用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 访问的服务器上,并且已经设置好您可以通过 ssh 访问它而无需输入密码 (i.e., that your public key is in ~/.ssh/authorized_keys and you are running ssh-agent locally)。 在服务器上,我们创建一个新的存储库来镜像本地存储库。

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

    现在让我们将钩子制作和定义为一个接收后钩子,它将最新的树检出到 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
    

    这会将任何新的提交转移到远程存储库,接收后挂钩会立即为您更新 DocumentRoot。 (这比将您的工作站定义为服务器上的远程,并手动或从 cron 作业运行“git pull”更方便,并且不需要 ssh 访问您的工作站。)

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多