我有一个用 PHP 编写的基于 Web 的项目,该项目被分发到 5 个不同的服务器。
当我进行更改时,保持这 5 台服务器更新的最佳方式是什么?
我正在考虑编写一个 cron shell 脚本来读取我的源文件夹并可能通过 FTP 将更新传播到单独的服务器。
我有一个用 PHP 编写的基于 Web 的项目,该项目被分发到 5 个不同的服务器。
当我进行更改时,保持这 5 台服务器更新的最佳方式是什么?
我正在考虑编写一个 cron shell 脚本来读取我的源文件夹并可能通过 FTP 将更新传播到单独的服务器。
使用 cron 无法通过 ftp
我使用一个调用 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 需要安装在本地和远程机器上。
我会使用 git (http://git-scm.com/)。您可以为每台服务器创建遥控器 (https://github.com/resmo/git-ftp)。然后,您可以将 git repos 推送到每个服务器。