0

我有一个用 PHP 编写的基于 Web 的项目,该项目被分发到 5 个不同的服务器。

当我进行更改时,保持这 5 台服务器更新的最佳方式是什么?

我正在考虑编写一个 cron shell 脚本来读取我的源文件夹并可能通过 FTP 将更新传播到单独的服务器。

4

3 回答 3

0

使用 cron 无法通过 ftp

于 2013-01-14T05:38:03.743 回答
0

我使用一个调用 rsync 的脚本将我的网站从本地机器上传到服务器。这是一个例子:

rsync -razv --exclude '.svn' --exclude '.settings' --exclude '.buildpath' -e "ssh -l user" --delete ~/workspace/website/ www.example.com:/var/www/

我必须排除 .svn、.settings 和 .buildpath 文件和文件夹,因为我不希望它们出现在网站上。我的服务器是 www.example.com。服务器上的路径是/var/www,用户是“用户”。

--delete 参数告诉 rsync 删除本地机器上不存在的远程机器上的文件(我删除的前文件)

我使用 pub-private 密钥身份验证,因此脚本无需输入密码即可运行。如果您想使用密码,则需要更改

-e "ssh -l 用户 1"

-e "sshpass -p 密码 ssh -l 用户"

我可以想象你会做这样的事情:

rsync -razv --exclude '.svn' --exclude '.settings' --exclude '.buildpath' -e "ssh -l user1" --delete ~/workspace/website/ www.server1.com:/var/www/
rsync -razv --exclude '.svn' --exclude '.settings' --exclude '.buildpath' -e "ssh -l user2" --delete ~/workspace/website/ www.server2.com:/var/www/
rsync -razv --exclude '.svn' --exclude '.settings' --exclude '.buildpath' -e "ssh -l user3" --delete ~/workspace/website/ www.server3.com:/var/www/
rsync -razv --exclude '.svn' --exclude '.settings' --exclude '.buildpath' -e "ssh -l user4" --delete ~/workspace/website/ www.server4.com:/var/www/
rsync -razv --exclude '.svn' --exclude '.settings' --exclude '.buildpath' -e "ssh -l user5" --delete ~/workspace/website/ www.server5.com:/var/www/

注意:如果要使用密码,则需要在本地计算机上安装 sshpass。Rsync 需要安装在本地和远程机器上。

于 2013-01-14T06:06:50.710 回答
0

我会使用 git (http://git-scm.com/)。您可以为每台服务器创建遥控器 (https://github.com/resmo/git-ftp)。然后,您可以将 git repos 推送到每个服务器。

于 2013-01-14T06:15:22.387 回答