虚拟主机与SVN服务器同步方法记录
[文章作者:叶歆昊 最后修改:2010-07-20 转载请注明原文链接:http://littz.com/synchronization-webhosting-with-svn-server.html]
近期的开发工作中需要有多人协作,我们使用SVN来保持各个开发人员之间的文件数据同步,而我们也搭建了演示站点,演示站点是普通的linux虚拟主机没有shell权限,在将本地数据与演示站点数据同步上就有一定困扰了。演示站点上没有SVN,之前只能使用FTP软件不断地使用手工上传覆盖方式保持演示站点上的版本是较新的版本。久而久之手工上传方式有一定困扰,一是手工操作繁琐,二是由于WEB的特点会在短时间之内上传大量的小文件 一定程度上导致被墙的概率发生。
为解决该问题我们书写了相应的shell和php脚本以让程序自动同步。原理如下:
1/shell脚本工作在我的电脑上,Linux(Ubuntu)系统。crontab方式运行,该脚本的主要功能是从svn获取最新版本数据,排除相关目录后导出打包成zip,使用ftp命令行上传至演示站点。
2/PHP脚本工作在演示站点上,Linux(CentOS)系统的虚拟主机。该php的主要功能是解压缩指定的zip文件并删除,为了防止重复解压缩,设置了一个锁文件。
使用方法:
1/需要手工svn checkout一次到/opt/svntmp/update这个目录
2/ crontab -e 书写这样的定时计划
LANG=en_US.UTF-8 */10 9-22 * * * /opt/svntmp/svnup.sh
每天9点至22点的每10分钟执行这个svnup的shell,特别注意这个LANG设置,要和本机linux系统所使用的字符集相同,要不然会出现手工执行shell ok但是放在crontab中就不成功的问题。
3/将shell中的帐号密码和网址替换成自己的
4/将附件的txt扩展名改成对应的sh和php
附:svnuptoftp.sh的代码

#!/bin/bash mkdir -p /opt/svntmp/logs/ cd /opt/svntmp/update/ export LANG=en_US.UTF-8 /usr/bin/svn up --username yourusername --password yourpasswd --non-interactive --trust-server-cert --accept theirs-conflict /opt/svntmp/update >> /opt/svntmp/logs/up.log rm -rf /opt/svntmp/export /usr/bin/svn export /opt/pksvntmp/update /opt/pksvntmp/export >> /opt/pksvntmp/logs/b.log rm -rf /opt/svntmp/export/attachments<br>rm -rf /opt/svntmp/export/cache rm -rf /opt/svntmp/export/data rm -rf /opt/svntmp/export/config.php rm -rf /opt/svntmp/export/source.zip cd /opt/svntmp/export zip source.zip * -r >> /opt/pksvntmp/logs/zip.log ftp -n<<! open xx.xxx.xxx.xxx user ftpuser ftppasswd binary hash cd /demo lcd /opt/svntmp/export prompt put source.zip close bye ! curl --connect-timeout 20 http://xxx.mydiscuz.com/demo/unzip.php >> /opt/pksvntmp/logs/unzip.log