几乎即时更新服务器
好吧,最好和最简单的方法之一是使用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 访问您的工作站。)