我想在没有停机的情况下升级我的网站。我做了研究,并没有找到一种方法来升级它而不停机(几秒钟没事)。我想的方法如下,但我不确定是否有任何良好的专业方式。请帮我解决一下这个问题。
如果你有,请告诉我任何其他好的方法。
我在本地服务器中使用SVN
答案 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或部署工具。我是手动做的。这是我正在做的方式。
yiic migrate
足以创建新表或更改现有表。使用这种方法,没有实际的停机时间,有些页面最多可以使用5-10秒,但所有系统都可以使用。
将上传的项目指向不同的端口并检查是否 一切正常。如果一切正常,改变了 符号链接到上传的目录
这是一种糟糕的方式,用于测试您是否需要测试服务器,或者在本地计算机上使用与服务器上相同的配置和参数进行测试。例如,Vagrant可以在本地计算机上创建任何环境进行测试。
如果您需要通过测试(例如单元测试或功能测试),请观察CI工具。